Android系统编译日常记录
记录一下,有时候不常编译的话,有些东西会忘记的。
1.编译的时候,把日志输出到 build.log里面
make -j40 2>&1 | tee build.log
2.输出当前编译环境
printconfig
我们source build/envsetup.sh的时候,其实就是把envsetup.sh里的脚本当成shell命令去执行。所以这一步完成以后,
我们才可以执行上面这些命令。比如说,launch、make、mm、mmm、这些命令都要执行source build/envsetup.sh以后才可以执行!
也就是说,我们如果遇到一些不记得的命令,可以先去看看这个文件envsetup.sh里的shell脚本。
3.如何能让系统编译默认打log和支持adb呢?
修改以下这些项:
build/core/main.mk
#Target is more debuggable and adbd is on by default ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=1
0为false,1为true。也就是说1表示打开adb调试
#Disable debugging in plain user builds. enable_target_debugging := true
这个是表示是否调试,true表示打开调试,false表示关闭调试。
4.调试跟系统相关的app
有些时候,我们开发的应用跟系统的服务有关联,如果没有编译出sdk来,用android studio就没法编译了。所以我们需要放到系统里面进行编译。
按传统的做法:
1、最笨的方法是:全编译,再刷机。虽然是增量编译,但是也要花费不少的时间。编译完成以后还要刷机。
2、单独一个模块编译,再make snod,再进行刷机。
目前比较好的方法是怎么样的呢?
模块编译成apk,使用覆盖的形式,省去了make snod的时间(大概四分钟左右),省去刷机和第一次启动的时间(大概5分钟左右)
这个编译命令是:
mm WITH_DEXPREOPT=false -B
进入到需要编译的目录模块,输入这个命令,就可以编译出对应的apk了,而不是apk+odex。
有了apk之后,再去删除系统的,重启以后直接安装即可。 5.把应用编译成apk
在系统编译里头,默认会把应用编译成apk和odex,其中apk只有java编译出来的类,odex有资源文件 如果要单独编译成一个apk的话,可以在mk文件里添加: WITH_DEXPREOPT := false
打开MTKlog
adb shell am start -n com.mediatek.mtklogger/com.mediatek.mtklogger.MainActivity