背景:
经常在企业做一个设备产品时候,都会有需要对原生的aosp进行相关的定制,定制中有一个很重要功能就是裁剪掉系统的很多没有用的模块,只留下自己最核心的一些模块。具体如下图:
正常原生代码有很多个模块都集成的情况
要求裁剪一些不重要的减少体积等
当然也有一些需求在可能是针对客户定制的,同一套代码但是要求有一些机型删除某些应用模块等,所以针对系统裁剪这块就属于一个需要经常修改的部分。
那么具体如何实现呢?下面来介绍2种方案,一个常规方案,一个高效改进后方案
常规方案
核心思路就是确定要删除的目标名字,去相关的devices或者build目录进行grep名字,然后找到对应的PRODUCT_PACKAGES列表,从列表中删除对应的目标。
这个方法虽然简单直接,但是也有较大问题
缺点:
a.原生耦合太大,因为很多时候是多个机型共用一套Product,一旦删除可能多个机型都删除
b.有时候比较难找到目标的mk
那么有啥更好方案可以解决该问题吗?
高效改进方案
准备好一个专门用于删除模块的txt,具体编写格式如下:
有了这个txt后,后续要删除任何模块只需要添加既可以
接下来的核心部分就是在mk中读取txt中这些要删除的目标,然后把这些目标赋值给一个全局PRODUCT_DEL_PACKAGES变量的变量。
接下来就是怎么在系统集成目标时候,过滤掉这个PRODUCT_DEL_PACKAGES中所有的目标,这里其实主要是参考了系统的Override机制。
实际是在main.mk中最后的
product-installed-files方法中参考override方式过滤掉PRODUCT_DEL_PACKAGES对应的值。
具体成果展示看如下链接的最后3分钟:
https://www.bilibili.com/video/BV1nKL6zvEPj/
详细源码实现请vip学员qun联系马哥哈。
更多framework实战开发,请关注下面“千里马学框架”