本文章用于记录在集成aab插件中遇到的问题,能帮助到他人的同时,也能让自己总结经验和经历,避免重复犯错耗时过久:
1,as执行打包时,报错mapping.txt文件无法找到。报错显示在 “
mappingFile = file("mapping.txt").toPath() // 用于增量混淆的 mapping 文件
”这一行上
解决方案:在打包的app目录下创建一个空的mapping.txt文件
2,as执行打包时,如果你的mappingFile = file("build/xx/../mapping.txt").toPath()是设置了打包生成的mapping文件时,会报错且指向你的mapping.txt文件中的第一个混淆映射列表上:如 Unexpected resource dir: com.airbnb.lottie.model.layer.BaseLayer com.airbnb.lottie.model.layer.BaseLayer$$InternalSyntheticLambda$0$8de8db95e85e73fa4ad208291267f612164ecfcd0bc90840382bccb86bd556c0$0.f$0 -> a
解决方案:不要将mapping.txt文件指向build目录中,在打包的app目录下创建一个空的mapping.txt文件 (同问题1)
3,在根目录build.gradle文件中配置了插件库依赖,但是执行同步时出现以下问题:
Type 'com.bytedance.android.plugin.tasks.AabResGuardTask' property 'aabResGuard' is missing an input or output annotation.
Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
解决方案:
buildscript {
repositories {
google()
mavenCentral()
maven { url 'https://jitpack.io' }
maven { url 'https://raw.githubusercontent.com/martinloren/AabResGuard/mvn-repo' } //增加该设置
}
dependencies {
classpath "com.bytedance.android:aabresguard-plugin:0.1.10" //增加该设置
}
}
4,在打包时firebase执行报错:
java.lang.RuntimeException: Unable to get provider com.google.firebase.provider.FirebaseInitProvider: java.lang.IllegalStateException: The Crashlytics build ID is missing. This occurs when Crashlytics tooling is absent from your app's build configuration. Please review Crashlytics onboarding instructions and ensure you have a valid Crashlytics account.
at android.app.ActivityThread.installProvider(ActivityThread.java:7221)
解决方案:在aab的配置白名单中增加如下配置
whiteList = [ // 白名单规则
"*.R.raw.*",
"*.R.string.*",
"*.R.drawable.icon",
"*.R.string.com.crashlytics.android.build_id",
"*.R.string.google_app_id",
//谷歌服务
"*.R.string.default_web_client_id",
"*.R.string.firebase_database_url",
"*.R.string.gcm_defaultSenderId",
"*.R.string.google_api_key",
"*.R.string.google_app_id",
"*.R.string.google_crash_reporting_api_key",
"*.R.string.google_storage_bucket",
"*.R.string.project_id",
"*.R.string.com.crashlytics.android.build_id",
//所有涉及到 getResources().getIdentifier 对应的资源ID
"*.R.array.a1",
"*.R.string.s1",
"*.R.mipmap.m1",
"*.R.dimen.d1",
"*.R.integer.int1",
// for fabric
"*.R.string.com.crashlytics.*",
//Firebase Crashlytics
"*.R.bool.com.crashlytics.useFirebaseAppId",
"*.R.string.com.crashlytics.useFirebaseAppId",
"*.R.string.google_app_id",
"*.R.bool.com.crashlytics.CollectDeviceIdentifiers",
"*.R.string.com.crashlytics.CollectDeviceIdentifiers",
"*.R.bool.com.crashlytics.CollectUserIdentifiers",
"*.R.string.com.crashlytics.CollectUserIdentifiers",
"*.R.string.com.crashlytics.ApiEndpoint",
"*.R.string.io.fabric.android.build_id",
"*.R.string.com.crashlytics.android.build_id",
"*.R.bool.com.crashlytics.RequireBuildId",
"*.R.string.com.crashlytics.RequireBuildId",
"*.R.bool.com.crashlytics.CollectCustomLogs",
"*.R.string.com.crashlytics.CollectCustomLogs",
"*.R.bool.com.crashlytics.Trace",
"*.R.string.com.crashlytics.Trace",
"*.R.string.com.crashlytics.CollectCustomKeys",
]
5,执行 unusedStringPath = file("unused.txt").toPath() // 过滤文案列表路径 默认在mapping同目录查找 这一句时报错无法找到unused.txt文件
解决方案:在打包的app目录下创建一个空的unused.txt文件
参考引用:
1,https://github.com/bytedance/AabResGuard/issues/71
2,https://github.com/bytedance/AabResGuard/issues/75
3,AabResGuard/README.md at develop · bytedance/AabResGuard · GitHub