Android 系统编译之裁剪Apk

  • Post author:
  • Post category:其他




一、为什么要裁剪APK?

Android系统在编译过程中,会自带一些我们没必要的软件。每次系统编译打包时,都会默认将这些软件打包到image里面,升级的时候就会有这些软件。并且暂用内存。

然而,大部分的系统默认软件我们是用不到的,那就需要将他们裁剪掉。使其不包含在image中打包升级。



二、APP的源码文件的位置


1、android自带的app的源码位置


android的自带的apk源码位置在

“android4.4\packages\apps”

的文件夹下面。

在这里插入图片描述


2、厂家自带的app源码位置


我买的是芯灵思的开发板,厂家有出厂绑定apk在开发板里。厂家自带的apk源码位置在“\android4.4\device\softwinner\astar-sinlinx”的文件夹下面(astar-sinlinx不同厂家不同)

在这里插入图片描述



三、编译配置文件的位置


配置文件为

.mk

结尾的文件。

1.android自带的app的源码的配置文件主要在 build/target/product目录下

在这里插入图片描述

2.厂家自带的app的源码的配置文件主要在 \device\softwinner\astar-sinlinx目录下.

在这里插入图片描述

3.通过修改上面的配置文件,来决定是否编译那些app源码,从而得到对应的安装包apk。

例如:\build\target\product\generic_no_telephony.mk 这个配置文件,在这个配置文件下删除不要的项目,就可以使在编译的时候,不编译这个项目。(注意:如果之前有编译过,需要把已经生成了的的apk删除,才能确保不被打包到image中)。具体APK作用, 参看网址

Android系统裁剪 apk作用

在这里插入图片描述

大概的代码路径:

build/make/target/product/core.mk

build/make/target/product/generic_no_telephony.mk

build/make/target/product/core_minimal.mk

build/make/target/product/sdk_base.mk

device/fsl/imx8q/ProductConfigCommon.mk

packages\services\Car\car_product\build\car.mk

4.使用find+grep组合, 查找

.mk

文件

如:

root@virtual-machine:/home/root/CQA83TAndroid_v2.1.0_bv3/android# find . -type f -name \*.mk | xargs grep Dialer -in
./external/srec/config/en.us/config.mk:19:        VoiceDialer.g2g \
./external/srec/config/en.us/Android.mk:50:# ALL_PREBUILT += $(G2G_INSTALL_PATH)/VoiceDialer.g2g \
./device/softwinner/octopus-f1/ril_modem/huawei/mu509/huawei_mu509.mk:8:	Dialer \
./device/softwinner/octopus-f1/ril_modem/Oviphone/em55/oviphone_em55.mk:11:	device/softwinner/fiber-3g/ril_modem/Oviphone/em55/wcdma-ppp-on-dialer:system/etc/ppp/wcdma-ppp-on-dialer
./packages/services/Telephony/Android.mk:3:# Build the Phone app which includes the emergency dialer. See Contacts
./packages/services/Telephony/Android.mk:4:# for the 'other' dialer.
./packages/apps/Dialer/tests/Android.mk:15:LOCAL_PACKAGE_NAME := DialerTests
./packages/apps/Dialer/tests/Android.mk:17:LOCAL_INSTRUMENTATION_FOR := Dialer
./packages/apps/Dialer/Android.mk:43:LOCAL_PACKAGE_NAME := Dialer
./packages/apps/VoiceDialer/tests/Android.mk:12:LOCAL_PACKAGE_NAME := VoiceDialerTests
./packages/apps/VoiceDialer/tests/Android.mk:14:LOCAL_INSTRUMENTATION_FOR := VoiceDialer
./packages/apps/VoiceDialer/Android.mk:8:# LOCAL_PACKAGE_NAME := VoiceDialer
./packages/apps/VoiceDialer/Android.mk:16:# Install the srec data files if VoiceDialer.apk is installed to system image.
./build/target/product/full_base_telephony.mk:23:# VoiceDialer
./build/target/product/sdk_base.mk:32:#	Dialer 



四、预装APK的分类和位置


APK是Android Package的缩写,即Android安装包(apk)。

预装APK可以分为四种priv-app, preinstall, precopy, app,它们分别的位置在:如下


系统默认APP

out\target\product\astar-sinlinx\system\priv-app 


用户APP

out\target\product\astar-sinlinx\system\app  


第一次启动Launcher之前安装到/data目录, 可卸载

out\target\product\astar-sinlinx\system\precopy:  


第一次系统启动安装到/data目录, 可卸载

out\target\product\astar-sinlinx\system\preinstall: 



五、如何裁剪APK?

首先在配置文件(.mk),中删除不要的项目,这样编译的时候就不会编译这部分项目。然后在out\文件中找到已经编译好的APK,将其删除,这样APK就不会打包到image中。如果想彻底删除,可以在源码目录下,把对应的源码也删除了。



版权声明:本文为u014583317原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。