成為Android高手必須掌握的28大項內容和10個建議
【原文:http://www.cnblogs.com/hnrainll/archive/2012/01/17/2325064.html】
成為Android高手必須掌握的28大項內容和10個建議
(一)成為Android高手必須掌握的8項基本要求
【1】 Android作業系統概述
1. Android系統架構。
2. Android利用設計理念。
3. Android 開源知識。
4. Android 參考網站與權威資訊。
【2】 Android SDK及其開發環境搭建
1. Android SDK的版本釋出。
2. ADT外掛的安裝和更新。
3. Android利用程式架構。
4. 建立第一個Android專案(HelloAndroid!)。
5. 通過Eclipse匯入一個開源專案
6. 視覺化的介面開發工具
7. 佈置利用程式到Android模仿器或手機
【3】Android原始碼開發環境搭建與原始碼結構分析
1.開發系統主機環境搭建 。
2. 安裝軟體包Required Packages。
3.Ubuntu 6.06 (Dapper)。
4. Ubuntu 8.04。
5. Ubuntu 7.10。
6.Install javva。
7.原始碼結構分析Android source (kernel / platform/application)。
8. Android build system。
9. Android bring up。
【4】 Android 利用程式設計模型
1. drawable。
2. layout 。
3. values(strings.xml、colors.xml、style.xml 、arrays.xml等)。
4. R.java分析及應用 。
5. AndroidManifest.xml。
6. Android.mk。
7. Activity 。
8. Intent。
9. Service 。
10.ContentProvider。
【5】 Android 利用程式介面(一)
1. TextView的應用。
2. drawable的應用 。
3. 引用Drawable色彩常數及背風景。
4. CharSequence資料型別與ResourceID利用。
5. DisplayMetrics的應用。
6. Style樣式的定義。
7. Button事件處理。
8. setContentView的利用。
9. Intent物件的應用。
10. Bundle物件的實現。
11. startActivityForResult法子。
12. AlertDialog視窗。
13. Button與TextView的互動。
14. Typeface物件應用。
15. Gallery物件。
16. 多按鈕利用。
17. Menu功效選單程式設計。
18. ProgressDialog與執行緒利用。
19. 動態產生按鈕並最大化。
20. 選擇功效的對話方塊。
21. Android主題(Theme)實現。
22. 支撐多種分手率的螢幕。
【6】 Android利用程式介面(二)
1. EditText與setOnKeyListener事件。
2.ImageButton的焦點及事件處理。
3. Toast物件的應用。
4. CheckBox的isChecked屬性。
5. 多選項CheckBox的利用。
6. RadioGroup組與onCheckedChanged事件。
7. ImageView的堆疊利用。
8. Spinner與setDropDownViewResource。
9. ArrayList與Widget的依附性。
10. Gallery與衍生BaseAdapter容器。
11. JavaI/O的利用。
12.ImageButton選擇特效。
13. AutoCompleteTextView與陣列。
14. AnalogClock與DigitalClock的原理。
15. DatePicker與TimePicker利用。
16. ImageView點選事件與透明度處理。
17. ProgressBar與Handler的整合利用。
18. GridView與ArrayAdapter設計。
19. ListView的佈局。
20. ListActivity與Menu整合技術。
21. JavaI/O與ListActivity的聯合。
22. 應用decodeFile法子。
23. 運用Matrix物件來縮放圖檔案。
24. Bitmap與Matrix旋轉ImageView。
25. RadioButtonID。
26. 對話視窗上的ICON圖示。
【7】Android 利用互動與手機模組把持
1. PendingIntent與AlarmManager。
2. PendingIntent 與 SmsManager 。
3. Intent 與 Email。
4. 資料儲存法子。
5. NotificationManager與Notification。
6. Adapter物件與Cursor。
7. TelephonyManager的利用。
8. RunningTaskInfo的利用。
9. Provider.Contact的應用。
10.Provider.Calendar的應用。
11. Service與Runnable整合並用。
12.BroadcastReceiver與Intent 。
13. receiver與intent-filter。
14. Android網路程式設計。
15. HTTP懇求與連線。
16. WebView.loadUrl。
17. Webkit 與 WebCore。
18. HttpURLConnection與URLConnection和執行執行緒。
19. Runnable混搭SurfaceView。
20. Google ApI。
【8】 Android 系統服務
1. Activity Manager。
2. Windows Manager。
3. Surface Manager(surface flinger)。
4. Package Manager。
5. Telephony Manager。
6. Content Provider。
7.Resource Manager。
8. AssetManager。
9. View System。
10.Location Manager。
11. Notification Manager。
12.AlarmManager。
13. BatteryManager。
14. HardwareManage。
15. 如何新增一個新系統Service並開放API。
16. 要害服務。
17. Android系統啟動流程。
(二)成為Android高手必須掌握的20項進階要求
ARM平臺 Android 移植與驅動核心開發
Android嵌入式智慧作業系統是基於Linux核心和驅動的,對於HTC、華為等公司開發Android作業系統時,需要專門將Android移植到 特定硬體平臺下,同時將必要的驅動進行編寫及開發。本課程旨在讓學員成為Android的核心層開發者,讓學員在這種嵌入式裝置廠商中謀得核心開發人員的 職位。
1. Android系統體系及移植相關工具
1.1Android作業系統體系結構介紹。
Android Linux核心移植介紹。
檔案系統,toolbox等移植。
儲存驅動移植。
Bootloader相應方案與移植。
Android虛擬器Dalvik移植介紹。
1.2ARM處理器介紹。
ARMv5TJS。
ARM中斷處理。
ARM體系結構與ARM處理器的體系結構。
IP核、晶片與開發板。
ARM處理器結構處理器模式。
. 寄放器。
. 流水線結構。
C語言內嵌彙編款式與程式設計例項。
1.3ARM指令系統。
.算術邏輯指令 。
.指令對狀態寄放器的影響。
.對比指令。
.分支指令。
.移位。
.指令點陣圖。
.辨認機器指令。
1.4記憶體造訪與記憶體把持。
.資料匯流排與地址匯流排的應用與例項。
.STR/LDR 。
1.5ARM歷程呼叫標準。
.LDM/STM。
.反彙編。
.APCS。
.C語言函式與彙編的互相呼叫。
【案例】應用Android Linux patch進行Linux核心的構建
2. AndroidLinux核心移植與核心開發
2.1ARM處理器的Android系統構建。
2.2輸入輸出裝置驅動移植 。
2.3儲存裝置nand flash,MMC/SD卡驅動移植。
2.4Framebuffer移植 。
2.5 Touchscreen移植 。
2.6 Open Binder IPC移植。
【案例】
2.7在ARM處理器上移植Android實驗 。
2.8編寫Nand flash驅動。
2.9移植Framebuffer驅動。
2.10硬體相關部分(鍵盤、觸控式螢幕、LCD等)。
3. Android相關環境庫、以及Bionic系統移植
3.1libc移植 。
3.2libm移植 。
3.3libdl移植。
3.4libm移植。
3.5 busybox, toolbox移植。
【案例】
1.移植glibc。
2.移植busybox和toolbox。
4. Android Dalvik移植一
4.1 JNI Call Bridge相關原理 。
4.2 dx, dalvitvm原理和應用。
4.3 Dalvik指令款式。
4.4 Dalvik履行款式dex 。
4.5 Java位元組碼款式。
5. Android Dalvik移植二
5.1 Dalvik Library原理 。
5.2 dalvit libcore核心庫移植。
5.3 dalvit/vm/native移植。
5.4 Dalvik Interpreter原理 。
5.5 Dalvik Mterp。
6. ARMAT&T彙編
6.1AT&T彙編語法詳解 。
6.2gas工具的應用 。
6.3label標籤的作用。
6.4資料與程式碼的散播。
7. 連結指令碼ld-script
7.1 段地址的斷定。
7.2 編寫ld-script。
7.3 ELF款式與libc函式庫的關係。
8. 時序電路根基
8.1電平訊號 。
8.2 電路圖分析。
8.3時序圖分析。
8.4datasheet檢視 。
8.5s3c2440的外圍器件結構。
8.6GPIO操作。
9. AMBA匯流排標準
9.1 AMBA匯流排標準 。
9.2 FCLK/HCLK/PCKL頻率分配與設定。
9.3 Watchdog計時操作。
9.4 UART操作 。
9.5 ARM中斷體系。
9.6 異常向量表。
9.7 ARM模式切換。
9.8 ARM中斷把持器 。
9.9 軟中斷。
9.10 Linux系統呼叫的實現。
10. Nand Flash把持器
10.1 Flash原理。
10.2 Nand把持器原理及時序分板。
10.3k9f1208時序分析。
11. 記憶體把持器
11.1 s3c2440實體地址散播 。
11.2 SDRAM原理與時序。
11.3 記憶體把持器的物理連線。
11.4 地址對齊 。
11.5 SRAM造訪。
12. 記憶體管理單元
12.1 MMU的原理 。
12.2ARM協處理器指令。
12.3 section模式。
12.4 small page模式 。
12.5 I & D TLBs 。
12.6 I & DCache。
12.7 哈佛結構的原理與實現。
13. DMA 直接記憶體造訪的機制與應用
13.1 DMA的狀態機 。
13.2 DMA的把持。
14. 觸控式螢幕介面與ADC介面 與例項
14.1 ADC原理 。
14.1 觸控式螢幕介面與把持。
15. LCD把持器
15.1 圖形顯示原理。
15.2 LCD把持器。
15.3 LCD時序。
15.4 LCD驅動相關的框架與體系 。
16. I2S音訊匯流排
16.1音訊硬體原理。
16.2 I2S時序。
16.3 s3c2440上I2S的操作。
16.4音訊裝置的裸驅動討論。
17. CS8900網路卡把持
17.1 邏輯鏈路層與MAC層。
17.2 CS8900原理與時序分析。
17.3後續網路卡裸驅動討論與體系結構。
18. TCP/IP協議棧移植,與網路體系結構
18.1 LwIP TCP/IP協議棧簡介 。
18.2 LwIP配置與編譯。
18.3 tftp配置與編譯。
19. Bootloader原理與移植
19.1u-boot的配置、編譯 。
19.2u-boot啟動歷程分析。
19.3ARM-Linux的啟動請求。
19.4 ARM-Linux kernel的ld-sript分析 。
19.5 u-boot到ARM-Linux的跳轉程式碼分析 。
19.6應用mkimage製作啟動映象檔案。
20. ARM-Linux原理與移植
20.1ARM-Linux的配置、編譯 。
20.2ARM-Linux啟動程式碼分析。
20.3ARM-Linux 地址對映的關係。
20.4 Busybox的配置、編譯 。
(三)成為Android高手的十個建議
1、Q:如何成為高手?
A:成為一名真正的Android高手必須掌握和遵循的一些準則:
1)學會懶惰
aDon"t Reinvent the Wheel(不要重複發明輪子)。
bInventing the Wheel(發明輪子)。
cDon"t Reinvent the Wheel(不要重複發明輪子)。
“輪子理論”,也即“不要重複發明輪子”,這是西方國家的一句諺語,原話是:Don"t Reinvent the Wheel。“不要重複發明輪子 ”意思是企業中任何一項工作實際上都有人做過,我們所需要做的就是找到做過這件事情的人。拿到軟體領域中就是指有的專案或功能,別人已經做過,我們需要用 的時候,直接拿來用即可,而不要重新制造。
2)精通Android體系架構、MVC、常見的設計模式、控制反轉(IoC)
3)編寫可重用、可擴充套件、可維護、靈活性高的程式碼
4)高效的編寫高效的程式碼
5)學會至少一門伺服器端開發技術
2、Q:JNI是什麼?
A:JNI是Java Native Interface的縮寫,中文為JAVA本地呼叫。從Java1.1開始,Java Native Interface(JNI)標準成為java平臺的一部分,它允許Java程式碼和其他語言寫的程式碼進行互動。JNI一開始是為了本地已編譯語言,尤其是 C和C++而設計的,但是它並不妨礙你使用其他語言,只要呼叫約定受支援就可以了。
使用java與本地已編譯的程式碼互動,通常會喪失平臺可移植性。但是,有些情況下這樣做是可以接受的,甚至是必須的,比如,使用一些舊的庫,與硬體、作業系統進行互動,或者為了提高程式的效能。JNI標準至少保證原生程式碼能工作在任何Java 虛擬機器實現下。
3、Q:Android和Linux的區別?
A:Android是一個專門針對移動裝置的軟體集,包括一個作業系統,中介軟體和一些重要的應用程式。Android SDK 提供了在Android平臺使用java語言進行android 應用程式開發必須的工具和API介面。Android 系統架構除了Linux2.6核心之外,還提供了豐富的lib和適用於java的執行時環境(很重要的一點是Dalvik虛擬機器,類似於JVM)、應用程 序框架和核心應用。在此基礎之上可以快速開發應用程式。
linux核心像是核心技術支援,而google 將其商業化於移動裝置上。android上開發應用程式和Windows MFC開發有些類似。
4、Q:SDK升級了,如何更新SDK?
A:更新SDK是非常棘手的。當一個新的SDK釋出,必須是plugin也釋出。更新容易出現的錯誤是兩個版本都存在,而且都不正常。最終不得 不解除安裝了它們並且重新安裝最新的一個。然後那個最新的SDK工作正常了。建議任何面對SDK或者plugin升級的人都採用相同的過程。簡單的解除安裝老版 本,然後安裝新版本。不要升級。
5、Q:如何進入Recovery模式
A:每部Android裝置進入Recovery模式的方法不同。以Milestone為例:若bootloader為90.78,按住鍵盤的 “X”鍵,再按電源鍵開機,看到moto的經典logo即可放開此2鍵。等待出現一個三角形圖示,然後按住音量向上鍵+輕按拍照鍵,會出現四個選項。放開 按鍵,可以用方向鍵選擇一個選項。作用分別為重啟,應用update.zip,清除所有資料至出廠狀態、清除cache。
6、Q:Android bionic移植需要注意的事項
A:下面通過一個例子來說明移植binic需要做的事情(BIONIC使用的核心標頭檔案從2.6.29 升級到 2.6.31):
1)修改之前,先要備份 android/bionic
2)按照下面方法複製linux kernel v2.6.31 標頭檔案:
複製 include/asm-generic 到 bionic/libc/kernel/original folder
複製 include/linux 到 bionic/libc/kernel/original folder
複製 include/mtd 到 bionic/libc/kernel/original folder
3)執行 tools/update_all.py 指令碼,生成新的標頭檔案,方法如下.
$ cd android/bionic/libc/kernel
$ tools/update_all.py
以上的操作將複製新的標頭檔案到 bionic/libc/kernel/common 目錄
4)刪除 bionic/libc/kernel/original 目錄
5)複製平臺相關的標頭檔案:
複製 linux v2.6.31 平臺相關的 asm 目錄到指定的路徑,方法如下:
複製 arch/arm/include/asm 到 android/bionic/libc/kernel/arch-arm/
複製 arch/x86/include/asm 到 android/bionic/libc/kernel/arch-x86/
6)從 v2.6.29 bionic/libc/kernel/common/linux 複製一下的標頭檔案到新的 android/bionic/libc/kernel/common/linux 目錄:
android-alarm.h
android-pmem.h
android_power.h
ashmem.h
binder.h
msm_adsp.h
msm_audio.h
msm_mdp.h
keychord.h
7)編譯
$ cd android
$ make -j4
7、Q:Android原始碼下vendor目錄下檔案的作用?
A:指的是某些公司的產品型號,主要是一些針對硬體配置的東西,比如radio 方面的,若是採用TI 的,這裡面會有TI提供的一些RIL方面的介面等。
8、Q:編譯Android原始碼和編譯Android核心有什麼區別?
A:其實沒什麼區別,就多了幾個android特有的驅動,最重要的是binder
9、Q:如何獲取手機和儲存卡上的圖片?
A:
/**
* 通過uri獲取檔案的絕對路徑
* @param uri
* @return
*/
protected String getAbsoluteImagePath(Uri uri)
{
// can post image
String [] proj={MediaStore.Images.Media.DATA};
Cursor cursor = managedQuery( uri,
proj, // Which columns to return
null, // WHERE clause; which rows to return (all rows)
null, // WHERE clause selection arguments (none)
null); // Order-by clause (ascending by name)
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
複製程式碼
10、Q:如何使用雙緩衝?
A:系統自身已經實現了雙緩衝,也就是說為了避免重影,必須連續onDraw兩次,或者是對上一次onDraw裡面畫髒的部分進行修復。
執行Bitmap.createBitmap函式一般要花銷100-300ms的時間,要想提高它的效率,只能祈禱google能把android的程式碼寫得更高效一些了。
(四)成為Android高手的教程與資料選擇
學習教程與開發資料下載:
Android 15本經典教程和150多個例項原始碼
如果覺得免費的Android電子教程不過癮的話,你可以花錢買紙質的教材,教程不在多,在於精。
你可以花錢買一兩本經典的紙質Android書籍,這個仔細看或者收藏;其他的看免費的電子版的Android教材就好了,建議不要花太多冤枉錢。
1
2
3
相關文章
- AS3開發必須掌握的內容S3
- 必須掌握的10個Linux命令!Linux
- 10 個你必須掌握的超酷 VI 命令技巧
- PHP初學者必須掌握的10個知識點PHP
- 每個程式設計師必須掌握的常用英語詞彙分享給你(建議收藏)程式設計師
- 【供應鏈】供應鏈高手必須掌握的79個專業術語
- 成為Python大牛必須要掌握的高階語法——yieldPython
- 10個必須掌握的PHP關聯陣列使用技巧PHP陣列
- 內容開放協議 會成為內容產業標配嗎?協議產業
- 成為最差開發者的10條建議
- Android Application物件必須掌握的七點AndroidAPP物件
- Android 之 Notification 必須掌握知識點Android
- 成為Android高手的路徑Android
- android studio: Error:元素內容必須由格式正確的字元資料或標記組成AndroidError字元
- Linux新手入門必須要掌握的10個知識點!Linux
- 成為高手前必懂的TCP乾貨TCP
- sed、awk——運維必須掌握的兩個工具運維
- 小白學Web前端必須掌握的4項基礎技能!Web前端
- C語言必須掌握的判斷題 | 10C語言
- Oracle10g rac 必須掌握的知識Oracle
- Git中~你必須掌握的!Git
- Java Annotation 必須掌握的特性Java
- 聊聊開始資料治理前必須瞭解的四個內容
- 成為優秀Swift開發者的10條建議Swift
- 在面試前必須要知道的 Redis 面試內容面試Redis
- 24個必須掌握的資料庫面試問題~資料庫面試
- JavaScript大師必須掌握的12個知識點JavaScript
- Oracle10g rac 必須掌握的知識二Oracle
- 軟體測試必須掌握的http網路協議知識HTTP協議
- 軟體測試必須掌握的 http 網路協議知識HTTP協議
- CSS中那些必須掌握的概念CSS
- 前端必須掌握的知識點前端
- 對Android初學者的10個建議Android
- 9個必須掌握的Javascript處理陣列的方法JavaScript陣列
- iOS 效能調優,成為一名合格 iOS 程式設計師必須掌握iOS程式設計師
- 三種常用的內建函式--必須牢記函式
- java開發必須要掌握的20個核心技術Java
- Java程式設計師必須掌握的5個註解!Java程式設計師