一、前言
在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'
#出现下面的情况是因为前一次编译的代码跟现在编译的没有变化,修改一下再编译就行。