前言
预置apk必学内容,带有源码的app工程在安卓源码下如何编译
一、文件目录及层次结构
packages\apps\MyApp
res
src
Android.bp
AndroidManifest.xml
比如我的app源码
只需将app下的res目录、src目录和AndroidManifest.xml文件拷贝下来即可
二、Android.bp编写
在参考同目录下其他app的bp书写方式下,修改依赖,最终编写如下
android_app { //构建apk
name: “MyApp”, //模块名称
srcs: [“src/**/*.java”], /源码路径
resource_dirs: [“res”], //资源文件的目录路径
platform_apis: true, //设置该标记后会使用sdk的hide的api來编译。编译的APK中使用了系统级API,必须设定该值
certificate: “platform”, //指定签名证书
privileged: true, //指定模块是否是特权模块。特权模块具有更高的权限和访问级别
static_libs: [ //静态库依赖
“androidx-constraintlayout_constraintlayout”,
“androidx.navigation_navigation-fragment”,
“androidx.navigation_navigation-ui”,
“com.google.android.material_material”,
],
optimize: { //压缩配置
enabled: false, //enabled 是否开启,obfuscate 是否开启混淆,proguard_flags_files 混淆规则配置文件
},
dex_preopt: { //指定是否对 DEX 文件进行预优化
enabled: false,
},
product_variables: { //用于定义产品变量,可以在构建过程中根据不同的产品进行配置
pdk: { //在给定的示例中,定义了一个名为 pdk 的产品变量,其中包含了一个名为 enabled 的布/尔类型的属性。
enabled: false, //这个示例中,pdk 变量的 enabled 属性被设置为 false,表示在这种产品的情况下,pdk 变量是被禁用的
},
},
}
其中,static_libs的依赖库十分重要
app源码下的依赖都为安卓原生已有的库
添加到static_libs时还需要做版本号等去掉微操作
“androidx-constraintlayout_constraintlayout”,
“androidx.navigation_navigation-fragment”,
“androidx.navigation_navigation-ui”,
“com.google.android.material_material”,
如果有其他的非安卓原生库还需要将库编译出来加进去嵌套即可。
三、编译测试
source build/envsetup.sh
lunch
make MyApp
预置到对应的版本,找到对应版本的mk文件添加:
PRODUCT_PACKAGES += MyApp
全编时,会自动将自己的app进行预置