成爲Android高手必須掌握的28大項內容和10個建議

(一)成爲Android高手必須掌握的8項基本要求java

 

【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系統啓動流程。
       
linux

(二)成爲Android高手必須掌握的20項進階要求android

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的配置、編譯 。
git

 

(三)成爲Android高手的十個建議

 

一、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)學會至少一門服務器端開發技術

  二、Q:JNI是什麼?

  A:JNI是Java Native Interface的縮寫,中文爲JAVA本地調用。從Java1.1開始,Java Native Interface(JNI)標準成爲java平臺的一部分,它容許Java代碼和其餘語言寫的代碼進行交互。JNI一開始是爲了本地已編譯語言,尤爲是 C和C++而設計的,可是它並不妨礙你使用其餘語言,只要調用約定受支持就能夠了。

  使用java與本地已編譯的代碼交互,一般會喪失平臺可移植性。可是,有些狀況下這樣作是能夠接受的,甚至是必須的,好比,使用一些舊的庫,與硬件、操做系統進行交互,或者爲了提升程序的性能。JNI標準至少保證本地代碼能工做在任何Java 虛擬機實現下。

  三、Q:Android和Linux的區別?

  A:Android是一個專門針對移動設備的軟件集,包括一個操做系統,中間件和一些重要的應用程序。Android SDK 提供了在Android平臺使用java語言進行android 應用程序開發必須的工具和API接口。Android 系統架構除了Linux2.6內核以外,還提供了豐富的lib和適用於java的運行時環境(很重要的一點是Dalvik虛擬機,相似於JVM)、應用程序框架和核心應用。在此基礎之上能夠快速開發應用程序。

  linux內核像是核心技術支持,而google 將其商業化於移動設備上。android上開發應用程序和Windows MFC開發有些相似。

  四、Q:SDK升級了,如何更新SDK?

  A:更新SDK是很是棘手的。當一個新的SDK發佈,必須是plugin也發佈。更新容易出現的錯誤是兩個版本都存在,並且都不正常。最終不得不卸載了它們而且從新安裝最新的一個。而後那個最新的SDK工做正常了。建議任何面對SDK或者plugin升級的人都採用相同的過程。簡單的卸載老版本,而後安裝新版本。不要升級。

  五、Q:如何進入Recovery模式

  A:每部Android設備進入Recovery模式的方法不一樣。以Milestone爲例:若bootloader爲90.78,按住鍵盤的「X」鍵,再按電源鍵開機,看到moto的經典logo便可放開此2鍵。等待出現一個三角形圖標,而後按住音量向上鍵+輕按拍照鍵,會出現四個選項。放開按鍵,能夠用方向鍵選擇一個選項。做用分別爲重啓,應用update.zip,清除全部數據至出廠狀態、清除cache。

  六、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

  七、Q:Android源碼下vendor目錄下文件的做用?

  A:指的是某些公司的產品型號,主要是一些針對硬件配置的東西,好比radio 方面的,如果採用TI 的,這裏面會有TI提供的一些RIL方面的接口等。

  八、Q:編譯Android源碼和編譯Android內核有什麼區別?

  A:其實沒什麼區別,就多了幾個android特有的驅動,最重要的是binder

  九、Q:如何獲取手機和存儲卡上的圖片?

  A:

  

  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);

  }

  複製代碼

  十、Q:如何使用雙緩衝?

  A:系統自身已經實現了雙緩衝,也就是說爲了不重影,必須連續onDraw兩次,或者是對上一次onDraw裏面畫髒的部分進行修復。

  執行Bitmap.createBitmap函數通常要花銷100-300ms的時間,要想提升它的效率,只能祈禱google能把android的代碼寫得更高效一些了。

相關文章
相關標籤/搜索