系统应用编译问题总结

目录
目录 1
一、 背景 2
二、 系统部分移植总结 2
2.1、缺库 2
2.2、混淆 4
2.3、资源文件包含 4
三、 应用部分移植总结 5

  1. 语法报错 5
  2. BuildConfig文件缺失问题 7
  3. 切面编程问题 7
  4. DataBinding问题 7
    四、 遗留问题 8
    1、外部so库没有编入到apk中 8
    2、 混淆问题 8
    五、 问题总结 8
    4.1系统部分 8

一、背景
为了更好的对app进行版本管理,跟随基线版本走。将系统以往独立开发的app集成到系统中统一管理。
二、系统部分移植总结
本次重点任务基本都是在编译报错修改。大多数涉及库的引用,库引用主要分两种:
1、静态编译,编译脚本以static_libs: 开头,以源码形式编译到应用或者其他库包中,包含对应字节码,优点是不会报运行时的错误;缺点是使打包出来的新应用容量变大(有时会增加几十兆不等),且每个依赖此库的应用都会重复包含,同时库更新后,所有依赖此库的应用要重新编译生成。
2、动态编译,编译脚本以libs: 开头,只参与编译,打包新应用不包含对应字节码,优点新应用容量不大,运行时,对应手机环境必须包含依赖对应的库,否则会运行报错。
3、个人建议:根据依赖库的大小与复用程度,灵活选择不同编译方式。例如:依赖库容量过大,且每个应用都是相同复用,则以动态形式编译,系统装载一份依赖库,节约手机空间。
2.1、缺库
1、内部库
首先确认系统中是否有用到该库,查询系统内部库的定义库名路径:
androidx库—/prebuilts/sdk/current/androidx/Android.bp
Support库—/prebuilts/sdk/current/support/Android.bp
编译类型库(如kotlin)—/prebuilts/tools/common/m2/Android.bp
参考系统使用方法:
android_app {
… …
static_libs: [
… …
“android-support-v4”,
],
… …
}

2、外部aar库
定义与使用方法:如外部common-ui-1.1.5.aar库
(1)下载导入库到lib目录
(2)Android.bp文件先定义库
android_library_import {
name: “calendar2-lib1”,
aars: [“common-ui-1.1.5.aar”,],
static_libs: [
“androidx.core_core”,
“androidx-constraintlayout_constraintlayout”,
“com.google.android.material_material”,
“calendar2-lib2”,
],
sdk_version: “current”,
}

(3)使用方法与内部库一致,静态或者动态引用定义好的库别名,如:calendar2-lib1
android_app {
… …
static_libs: [
… …
“calendar2-lib1”,
],
… …
}

3、外部jar库
定义方法:如外部tinypinyin-2.0.3.jar库
1、下载导入库到lib目录
2、Android.bp文件先定义库后使用
java_import {
name: “calendar2-lib14”,
jars: [“tinypinyin-2.0.3.jar”],
sdk_version: “current”,
}

4、外部so库
定义方法:如外部libmmkv.so库
1、下载导入库到lib目录
2、Android.bp文件先定义库后使用
cc_prebuilt_library_shared {
name: “libmmkv”,
arch: {
arm64: {
srcs: [“jnilibs/libmmkv.so”],
},
},
shared_libs: [“libc”,“libdl”,“liblog”,“libm”,“libstdc++”,“libz”,],
system_ext_specific: true,
}

5、注意:外部库使用时,只能定义一份,否则编译不通过,报以下错误。因为Android.bp是局递归搜索的,但可以重复引用。
-o out/soong/build.ninja Android.bp
error:vendor/bn/app/CalendarApp/libs/Android.bp:133:1:module"prebuilt_lib_databinding-common" already defined vendor/bn/app/CommonUI/libs/Android.bp:1:1 <-- previous definition here

2.2、混淆
Android.bp编译默认是被压缩的和混淆。
解决方案:
去除压缩和混淆。
android_app {
… …
optimize: {
enabled: false,
obfuscate: false,
},
… …
certificate: “platform”,
system_ext_specific: true,
}
说明:
Optimize :压缩配置
Enabled :是否开启
obfuscate :是否开启混淆
proguard_flags_files :混淆规则配置文件
2.3、资源文件包含
1、assets
asset_dirs: [
“app/src/main/assets”,
],
2、Res
resource_dirs: [
“app/src/main/res”,
],
3、代码
srcs: [
“app/src//*.java",
"app/src/
/*.kt”,
],
4、manifest
manifest: “app/src/main/AndroidManifest.xml”,
三、应用部分移植总结
1.语法报错
Q1,修改前:
@Parcelize
class ReminderEnti

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值