从零开始自定义安卓系统(6) 自定义模块 添加系统app
前言
在之前就知道可以通过PRODUCT_PACKAGES 添加自己的包, 具体操作是 新建一个模块,然后
1
| PRODUCT_PACKAGES += 模块名
|
要定义一个模块 可以使用soong 或者makefile, 在新版本系统推荐使用soong
soong 使用 .bp文件定义模块 参考
从官方例子就可以看到其实格式和json一样简单,
1
2
3
4
5
6
| cc_binary {
name: "gzip",
srcs: ["src/test/minigzip.c"],
shared_libs: ["libz"],
stl: "none",
}
|
主要问题是找到需要的模块和属性 这个时候就需要格式参考
里面主要根据语言分类, 想做一件事的时候查询对应类型,和对应模块名的格式参考
添加预下载apk
查看android/soong/java类型 看名字就知道 前面两个就是.
android_app和android_app_import
查阅文档克制区别在于 前者是需要编译的模块 后者是直接导入apk文件
文档提供了一个例子
1
2
3
4
5
6
7
8
9
10
11
12
13
| android_app_import {
name: "example_import",
apk: "prebuilts/example.apk",
dpi_variants: {
mdpi: {
apk: "prebuilts/example_mdpi.apk",
},
xhdpi: {
apk: "prebuilts/example_xhdpi.apk",
},
},
presigned: true,
}
|
文档里还提供5行的其他选项, 不过基本都是通用选项, 与app有关的不多 , 看旁边注释就能了解作用
如果要导入一个叫vnc.apk的文件
新建一个目录,放入apk文件,和Android.bp
1
2
3
4
5
6
7
8
9
10
| # Android.bp
android_app_import {
name: "vnc_import",
apk: "./vnc.apk",
# 解决可能的签名问题
dex_preopt: {
enabled: false,
},
presigned: true,
}
|
然后在bluebird.mk (产品mk文件)添加
1
| PRODUCT_PACKAGES += vnc_import
|
然后编译即可在 system/app 看到 vnc_import目录
如果遇到 mismatch in the <uses-library> tags between the build system and the manifest:
则按提示在 产品文件添加
1
| PRODUCT_BROKEN_VERIFY_USES_LIBRARIES := true
|
或在bp文件添加提示中对应的lib
1
2
3
4
5
| android_app_import {
# 省略
uses_libs:["lib"],
optional_uses_libs:["可选lib"]
}
|