Android源码编译部分注意事项总结

  1. 静态库生成路径:out/target/product/XXX/obj/STATIC_LIBRARIES/

  2. 静态库生成路径:out/target/product/XXX/obj/SHARED_LIBRARIES/    里面的so文件最终会拷贝到/system/lib 下面。

  3. /system/bin目录下预置可执行文件:项目需求要在该目录下预置一个可执行文件test;我的方法是在脚本中将其拷贝到/system/bin目录,但是编译生成的out目录下,该文件的权限是644,最开始我以为还需要在脚本中另行修改权限。后来烧机后发现该文件的权限是755了。经过查资料得知 源码下system/core/libcutiles/fs_config.c中会配置一些文件的默认权限,其中有这样一句:{ 00755, AID_ROOT,      AID_SHELL,     0, "system/bin/*" }, 会把/system/bin 目录下的文件的权限修改为755.

  4. 如何在mk文件中调用shell脚本:$(info $(shell ($(LOCAL_PATH)/test.sh))) 文件在当前目录,  $(info $(shell (echo_test.sh)))文件在根目录下

  5. apk源码默认不会编译进去系统问题:android源码中apk源码默认是不会被编译进系统的,在build/make/target/product/core.mk中申明过的才会编译进去。否则得在其他地方申明去引用该apk的mk文件,如果不想这么麻烦,可以在apk源码中的mk文件中添加ALL_DEFAULT_INSTALLED_MODULES += $(LOCAL_PACKAGE_NAME) ,这样就会默认把apk编译进系统了。

  6. 修改init.rc (system/core/rootdir/init.rc)后,不能直接push进去,要make bootimage  然后重新刷boot.img。 mtk平台下的/vendor/下的init.***.rc也是如此。

  7. mm命令介绍:mmm packages/providers/MediaProvider: 编译指定目录下的模块,但不编译它所依赖的其它模块; 
    mm: 编译当前目录下的模块,它和mmm一样,不编译依赖模块; 这种编译方式一般需要cd 进入packages/providers/MediaProvider目录,然后执行mm指令;
     mma: 编译当前目录下的模块及其依赖项 。

  8. 编译时去掉ODEX优化,不生成odex文件,在命令中加上
    WITH_DEXPREOPT=false

  9. 代码中引用R.raw.XX 提示资源找不到,使用com.package.XXX.R.raw.XX 即可。  即代码中要指定包名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值