成爲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模仿器或手機
3Android源代碼開發環境搭建與源碼結構分析
           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. valuesstrings.xmlcolors.xmlstyle.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. ButtonTextView的交互。
           14. Typeface對象應用。
           15. Gallery對象。
           16. 多按鈕利用。
           17. Menu功效菜單程序設計。
           18. ProgressDialog與線程利用。
           19. 動態產生按鈕並最大化。
           20. 選擇功效的對話框。
           21. Android主題(Theme)實現。
           22. 支撐多種分手率的屏幕。
6】 Android利用程序界面(二)
           1. EditTextsetOnKeyListener事件。
           2.ImageButton的焦點及事件處理。
           3. Toast對象的應用。
           4. CheckBoxisChecked屬性。
           5. 多選項CheckBox的利用。
           6. RadioGroup組與onCheckedChanged事件。
           7. ImageView的堆棧利用。
           8. SpinnersetDropDownViewResource
           9. ArrayListWidget的依附性。
           10. Gallery與衍生BaseAdapter容器。
           11. JavaI/O的利用。
           12.ImageButton選擇特效。
           13. AutoCompleteTextView與數組。
           14. AnalogClockDigitalClock的原理。
           15. DatePickerTimePicker利用。
           16. ImageView點擊事件與透明度處理。
           17. ProgressBarHandler的整合利用。
           18. GridViewArrayAdapter設計。
           19. ListView的佈局。
           20. ListActivityMenu整合技術。
           21. JavaI/OListActivity的聯合。
           22. 應用decodeFile法子。
           23. 運用Matrix對象來縮放圖文件。
           24. BitmapMatrix旋轉ImageView
           25. RadioButtonID
           26. 對話窗口上的ICON圖標。
7Android 利用交互與手機模塊把持
           1. PendingIntentAlarmManager
           2. PendingIntent 與 SmsManager 
           3. Intent 與 Email
           4. 數據存儲法子。
           5. NotificationManagerNotification
           6. Adapter對象與Cursor
           7. TelephonyManager的利用。
           8. RunningTaskInfo的利用。
           9. Provider.Contact的應用。
           10.Provider.Calendar的應用。
           11. ServiceRunnable整合並用。
           12.BroadcastReceiverIntent 。
           13. receiverintent-filter
           14. Android網絡編程。
           15. HTTP懇求與連接
           16. WebView.loadUrl
           17. Webkit 與 WebCore
           18. HttpURLConnectionURLConnection和運行線程。
           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 flashMMC/SD卡驅動移植。
           2.4Framebuffer移植。
           2.5 Touchscreen移植 。
           2.6 Open Binder IPC移植。
       【案例】
               2.7ARM處理器上移植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.移植busyboxtoolbox
       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 s3c2440I2S的操作。
              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 kernelld-sript分析 。
              19.5 u-bootARM-Linux的跳轉代碼分析 。
              19.6應用mkimage製作啓動鏡像文件。
       20. ARM-Linux原理與移植
              20.1ARM-Linux的配置、編譯。
              20.2ARM-Linux啓動代碼分析。
              20.3ARM-Linux 地址映射的關係。
              20.4 Busybox的配置、編譯 。

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

1Q:如何成爲高手?

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

2QJNI是什麼?

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

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

3QAndroidLinux的區別?

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

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

4QSDK升級了,如何更新SDK?

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

5Q:如何進入Recovery模式

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

6QAndroid 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

7QAndroid源碼下vendor目錄下文件的作用?

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

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

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

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

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

  }

  複製代碼

10Q:如何使用雙緩衝?

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

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




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章