android 系统 裁剪APK和SO库
Android 系统的裁剪
接触android Framework 层开发没多久,最近学习了一下系统的裁剪的工作,一般系统裁剪分为 APK、so、jar 库和服务的裁剪,目前只学习了APK和so库的裁剪,这里做一下学习记录
APK裁剪
因为安卓系统里内置了很多的APK,包括一些平台也会内置一些APK在系统里面,有些不需要的我们就可以把它不编译到系统里来,至于那些APK可以不用,这个可以根据自己项目的需求来,刚开始学的可以用adb 在system/app 或者 system/priv-app 目录下找
-
想要把app编译到系统,都需要在.mk文件中添加,而PRODUCT_PACKAGES 就是添加APK的变量,我用RK自己的一个APP(RKUpdateService)做为例子,先找到APK在哪里添加的,因为RK的应用都在vendor/rockchip/common/apps/目录下,可以使用grep -nr “RKUpdateService” vendor/rockchip/common/apps/ 搜索:
在app.mk就可以看到添加APK的代码
正常来说把RKUpdateService 这行注释掉就可以完成裁剪的操作,但是不好统一管理,如果删除了多个需要恢复的时候又得一个一个去找很不方便,在网上参考了这篇文章,把APK进行了统一的管理 -
首先先找到系统在哪里添加所有的APK,使用grep 搜索 PRODUCT_PACKAGES 在build/core/main.mk文件中
ifdef FULL_BUILD
# The base list of modules to build for this product is specified
# by the appropriate product definition file, which was included
# by product_config.mk.
product_MODULES := $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES)
# Filter out the overridden packages before doing expansion
product_MODULES := $(filter-out $(foreach p, $(product_MODULES), \
$(PACKAGES.$(p).OVERRIDES)), $(product_MODULES))
# Filter out executables as well
product_MODULES := $(filter-out $(foreach m, $(product_MODULES), \
$(EXECUTABLES.$(m).OVERRIDES)), $(product_MODULES))
在这里把所有的使用PRODUCT_PACKAGES 添加的APK 都找统一找出来,可以根据这个添加一个宏,把要删除的APK统一起来
- 新建一个.mk文件,在项目目录下新建了一个evb_del.mk文件
如果是新建的需要添加到编译文件中,不然不会编译,可以随便找一个能编译的.mk文件,我在项目目录下的.mk文件中添加:
然后在build/core/product.mk文件中添加PRODUCT_DEL_PACKAGES宏
在新建的evb_del.mk文件中把要删除的APK添加进来
最后需要在main.mk把PRODUCT_DEL_PACKAGES的APK移除出去
ifdef FULL_BUILD
# The base list of modules to build for this product is specified
# by the appropriate product definition file, which was included
# by product_config.mk.
product_MODULES := $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES)
# Filter out the overridden packages before doing expansion
product_MODULES := $(filter-out $(foreach p, $(product_MODULES), \
$(PACKAGES