从零开始自定义安卓系统(7) 预装二进制文件和删除预装模块
从零开始自定义安卓系统(7) 预装二进制文件和删除预装模块
预编译二进制文件
操作上类似于预装系统app 不过变成了使用cc_prebuilt_binary
推荐在external/ 目录新建一个文件夹,然后添加一个Android.bp
| |
比起系统app, 二进制文件的一大问题是 预编译的架构不一样是无法运行的, 这个时候可以使用arch参数
| |
为每个不同的架构指定不同的二进制文件.
另一个问题就是未必想要放到/system/bin, 在soong大部分模块都具有以下两个属性
vendor 和product_specific , 设置为true后 会放到/vendor 和 /product 分区, 如果没有将会放入/system/vendor 和 /system/product
删除模块
如何查看目标文件的对应代码路径
很多情况下都是要删除一个系统apk,但是要删除一个文件,首先要知道他对应的源码路径. 在out/target/product/<产品名> 路径下有个module-info.json
里面包含了模块与其对应的路径, 直接搜索对应的文件名, 会看到类似这样的json格式
| |
installled 对应的就是路径, 而module_name 则是对应的名字, path对应源码路径. 之后再根据模块名
去删除.
删除和替换模块
如果要删除的话,需要修改对应产品的Android.mk 或者 系统app定义在/build/make/core.mk .移除对应的PRODUCT_PACKAGES 属性, 就是添加模块的反向操作.
另一种更可维护的方法就是使用替换. aosp 实际上没有编译时删除模块的概念, 实际上使用的是替换
因为版本问题, 以前博客都是使用.mk的形式, 例如 秋少的博客.
不过soong实际上也有类似的功能, 实际上也是填写了LOCAL_OVERRIDES_PACKAGES这个值
在部分模块下, 具有overrides属性, 可以通过这个属性后覆盖替换掉 其他模块.
例子
| |
拥有这个属性的主要集中在android 模块, 在源码中主要用于替换apk