一、前言
在framework局部編譯之前,代碼必須整體編譯過,形成完整的依賴(Android.mk)體系,才能局部編譯。
二、編譯
1.make編譯,會重新產生依賴,實現依賴不完整不會導致無法編譯。比較消耗內存和時間
fzw@onyx:~/mnt/workspace/3128_android_rom$ make SystemUI
2.mmm編譯,不會重新產生依賴,實現依賴不完整會導致無法編譯。
fzw@onyx:~/mnt/workspace/3128_android_rom$ mmm frameworks/base/packages/SystemUI/
fzw@onyx:~/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
fzw@onyx:~/mnt/workspace/3128_android_rom$ adb remount
#把安卓系統被修改重新編譯的部分重新安裝到指定目錄
fzw@onyx:~/mnt/workspace/3128_android_rom$ adb push out/target/product/Tagus_C68/system/framework/framework.jar /system/framework/
fzw@onyx:~/mnt/workspace/3128_android_rom$ adb push out/target/product/Tagus_C68/system/framework/framework-res.apk /system/framework/
fzw@onyx:~/mnt/workspace/3128_android_rom$ adb push out/target/product/Tagus_C68/system/priv-app/SystemUI.apk /system/priv-app/
#顯示adb日誌信息
fzw@onyx:~/mnt/workspace/3128_android_rom$ adb shell logcat
#查看當前輸出支持的設備(注意:每更換一款設備,都可能導致依賴缺失,需要重新make,加進依賴)
fzw@onyx:~/mnt/workspace/3128_android_rom$ ls out/target/product/
C68 generic Tagus_C68 Tagus_Poke Tagus_PokeP
#切換到adb模式
fzw@onyx:~/mnt/workspace/3128_android_rom/apps$ adb shell
#刪除data/data/com.onyx 應用數據
root@Tagus_C68:/ # rm -r data/data/co
#刷新
root@Tagus_C68:/ # sync
#重啓
root@Tagus_C68:/ # reboot
四、一些查找方法
1.通過find找指定在kepler目錄下的名字爲RK3026Device.java的類。
fzw@onyx:~/mnt/workspace/3128_android_rom$ find kepler/ -name RK3026Device.java
2.通過grep查找指定目錄apps/AndroidSDK的特定字符“openFrontLight(”
fzw@onyx:~/mnt/workspace/3128_android_rom$ grep -nr "openFrontLight(" apps/AndroidSDK
3.通過hierarchyviewer快速查找當前界面的元素,根據adb鏈接的設備,打開要找的界面,即可看到界面佈局元素
fzw@onyx:~/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'
#出現下面的情況是因爲前一次編譯的代碼跟現在編譯的沒有變化,修改一下再編譯就行。