代码编译
APP或Service代码单编调试
1、在aosp文件目录下在将环境变量加载到内存中,在终端中输入下面命令
source build/envsetup.sh
2、选择平台编译选项
lunch
3、输入后会出现一个选择列表,然后输入你想要的项目的序号即可。如下所示我这里选择的7,也可以直接lunch 7或者lunch test_high-userdebug
You're building on Linux
Lunch menu... pick a combo:
1. aosp_arm-eng
2. aosp_arm64-eng
3. aosp_mips-eng
4. aosp_mips64-eng
5. aosp_x86-eng
6. aosp_x86_64-eng
7. test_high-userdebug
8. test_high_12g-userdebug
9. test_high-userdebug
10. test_low-userdebug
11. test1_high-userdebug
12. test1_low-userdebug
13. aosp_arm-userdebug
Which would you like? [aosp_arm-eng] 7
4、然后就是编译代码,编译代码方式有两种
第一种:
make命令编译
在源码项目中找到你想要编译的模块下的Android.mk文件找到LOCAL_PACKAGE_NAME或者
LOCAL_MODULE字段
然后把对应的参数值加在make命令后执行。例:
make 参数值
第二种:
可以使用mm命令和mmm命令
mm 是编译当前文件夹下的mk文件
mmm /xxx/xx/x 是编译/xxx/xx/x指定目录下的mk文件
第一种和第二种的区别在于第一种make编译会把有关联的模块也都编译了,第二种只是编译当前模块。
建议尽量用第一种,如果你的模块调用了其他模块在其他模块也有改动时编译出的文件会有问题。
5、编译成功后会给你一个文件输出的路径。将路径下的APK push到车机对应的目录中,push成功后需要同步重启下。
adb root
adb remount
adb push out/target/product/xxx/system/app/xx/xx.apk /system/app/xx/xx.apk
adb shell sync
adb reboot
lib模块代码单编调试
lib代码编译和apk编译前面步骤是一样的,只是输出的产物不同。这种情况不能和apk一样只是单独把编译出来的文件做替换。还要将frameworks下的相关的文件一起替换。例如:
adb push out/target/product/xxx/system/framework/xx.jar /system/framework/
adb push out/target/product/xxx/system/framework/boot-xx.vdex /system/framework/
adb push out/target/product/xxx/system/framework/arm/boot-xx.art /system/framework/arm/
adb push out/target/product/xxx/system/framework/arm/boot-xx.art.rel /system/framework/arm/
adb push out/target/product/xxx/system/framework/arm/boot-xx.oat /system/framework/arm/
adb push out/target/product/xxx/system/framework/arm64/boot-xx.art /system/framework/arm64/
adb push out/target/product/xxx/system/framework/arm64/boot-xx.art.rel /system/framework/arm64/
adb push out/target/product/xxx/system/framework/arm64/boot-xx.oat /system/framework/arm64/
xx是你编译模块的名字