背景

环境 AOSP 10

当我们经常编译AOSP后有可能需要全量更新我们的修改,全量更新就意味着之前我们手机上面安装的软件都清空了,等同于回复出厂设置,那么我们可不可以提前放入一些我们自己需要用的APP呢,刷机之后APP就不用重复安装了。

无源码内置apk到系统

这一次我们先做一个无源码无so库的APP到系统中。

有so库的下一篇实践。

准备工作

准备好apk安装包,这个包也可以是自己的,也有可能是客户给的,只给成品不给源码。这是前提。

比如我现在就编写了一个简单的无so的apk。

图片描述

图片描述

App名字就是内置App。
编译成功之后先安装到手机看看运行情况,是否会崩溃等等检查。

图片描述

能看到我们的log正常输入,且App没有崩溃。
我们把这个apk复制到这里:
在源码目录下packages/apps下创建一个目录,这个目录就是我们存放apk的目录。
创建MyApp目录,保存上面打包出来的apk文件,命名MyApp.apk。

图片描述

图片描述

创建Android.mk文件,文件内容是这样的。

1
2
3
4
5
6
7
8
9
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := MyApp
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
include $(BUILD_PREBUILT)

图片描述

当我们加入到这个地方之后,是可以进行编译,但是无法加入到系统编译中,还需要修改另一个地方配置。

这里有很多App,我们在build中搜索他们是怎么配置的。

图片描述

比如相机,我们找到了build/make/target/product/handleld_product.mk中有相机的配置,通常这种文件夹配置后面会有一个 \反斜杠。我们模仿他们去配置就行。

图片描述

加入我们的apk的目录。

编译刷机

上面配置完成之后,我们开始编译。

图片描述

接下里是错误的操作,make -j4后我snod重新生成system.img,然后就刷入手机了。

图片描述

这个时候手机重启,直接显示分区坏了。。。

具体原因不明,如果知道的大佬,还望告知。

怎么抢救呢?刷入同代号的官方刷机包就行。这个我很早就准备好了,因为之前已经遇到过这个情况n次,我现在内心毫无波澜了。

找到之前的刷机包,执行flash-all.sh就行了。
抢救回来之后,当然是继续刷,我们还没验证是否内置成功。
这一次就是全量刷入。

图片描述

进入源码目录

1
2
3
4
5
adb reboot bootloader
#重启手机到bl模式
fastboot devices
#看看设备是否链接了,有xxfaf devices就是连接了。开始刷机。
fastboot flashall -w

刷机完成正常开机,查看APP是否内置成功。

图片描述

图片描述

这里没有卸载选项的了

打开App

图片描述

成功了!

欢迎关注公众号:黄大官AOSP