Android Framework開發筆記
一、前言
在framework區域性編譯之前,程式碼必須整體編譯過,形成完整的依賴(Android.mk)體系,才能區域性編譯。
二、編譯
1.make編譯,會重新產生依賴,實現依賴不完整不會導致無法編譯。比較消耗記憶體和時間
[email protected]:~/mnt/workspace/3128_android_rom$ make SystemUI
2.mmm編譯,不會重新產生依賴,實現依賴不完整會導致無法編譯。
[email protected]:~/mnt/workspace/3128_android_rom$ mmm frameworks/base/packages/SystemUI/
[email protected]:~/mnt/workspace/3128_android_rom$ mmm frameworks/base/core/res/
3.此外還有m和mm,感興趣的自己去查詢。
#編譯成功
Install: out/target/product/Tagus_C68/system/priv-app/SystemUI.apk
make: Leaving directory `/home/fzw/mnt/workspace/3128_android_rom'
三、安裝
#push之前必須進行adb remount
[email protected] :~/mnt/workspace/3128_android_rom$ adb remount
#把安卓系統被修改重新編譯的部分重新安裝到指定目錄
[email protected]:~/mnt/workspace/3128_android_rom$ adb push out/target/product/Tagus_C68/system/framework/framework.jar /system/framework/
[email protected]:~/mnt/workspace/3128_android_rom$ adb push out/target/product/Tagus_C68/system/framework/framework-res.apk /system/framework/
[email protected]:~/mnt/workspace/3128_android_rom$ adb push out/target/product/Tagus_C68/system/priv-app/SystemUI.apk /system/priv-app/
#顯示adb日誌資訊
[email protected]:~/mnt/workspace/3128_android_rom$ adb shell logcat
#檢視當前輸出支援的裝置(注意:每更換一款裝置,都可能導致依賴缺失,需要重新make,加進依賴)
[email protected]:~/mnt/workspace/3128_android_rom$ ls out/target/product/
C68 generic Tagus_C68 Tagus_Poke Tagus_PokeP
#切換到adb模式
[email protected]:~/mnt/workspace/3128_android_rom/apps$ adb shell
#刪除data/data/com.onyx 應用資料
[email protected]_C68:/ # rm -r data/data/co
#重新整理
[email protected]_C68:/ # sync
#重啟
[email protected]_C68:/ # reboot
四、一些查詢方法
1.通過find找指定在kepler目錄下的名字為RK3026Device.java的類。
[email protected]:~/mnt/workspace/3128_android_rom$ find kepler/ -name RK3026Device.java
2.通過grep查詢指定目錄apps/AndroidSDK的特定字元“openFrontLight(”
[email protected]:~/mnt/workspace/3128_android_rom$ grep -nr "openFrontLight(" apps/AndroidSDK
3.通過hierarchyviewer快速查詢當前介面的元素,根據adb連結的裝置,開啟要找的介面,即可看到介面佈局元素
[email protected]:~/mnt/workspace/3128_android_rom/frameworks$ hierarchyviewer
五、常見錯誤
1.錯誤:
make: Entering directory `/home/fzw/mnt/workspace/3128_android_rom'
make: *** No rule to make target `out/target/product/Tagus_Poke/system/framework/framework-res.apk', needed by `out/target/product/Tagus_Poke/system/framework/framework.jar'. Stop.
#報make ....by....這個問題一般是依賴沒有編進去,比如說編譯framework的時候,當Res檔案有改動的時候,要先編譯Res檔案。再編譯framework主體,最後生成的framework-res.apk和framework.apk都需要push到裝置中。
2.錯誤:
No command 'mmm' found, did you mean:
Command 'mgm' from package 'mgm' (universe)
Command 'vmm' from package 'vmm' (universe)
Command 'mmd' from package 'mtools' (main)
Command 'mmv' from package 'mmv' (universe)
#在 mmm packages/apps/RKUpdateService/中出現如下,因為 mmm指令之前,需要source程式碼。
3.錯誤:
make: Entering directory `/home/fzw/mnt/workspace/3128_android_rom'
make: Nothing to be done for `all_modules'.
make: Leaving directory `/home/fzw/mnt/workspace/3128_android_rom'
#出現下面的情況是因為前一次編譯的程式碼跟現在編譯的沒有變化,修改一下再編譯就行。