开启minifyEnabled后生成签名APK报safedkInstrumentationRelease错误如何解决
任务':app:safedkInstrumentationRelease'(类型为'InstrumentationTask')的配置存在问题。类型为'com.safedk.gradleplugin.tasks.InstrumentationTask'的属性'$9'指定的文件'C:\Users\Junaid\AndroidStudioProjects\SampleApp\app\build\outputs\mapping\release\missing_rules.txt'不存在。
问题原因
该错误是AGP 7.0+版本与旧版SafeDK插件的兼容问题导致:Android Gradle Plugin 7.0及以上版本默认关闭了missing_rules.txt的自动生成逻辑,但旧版SafeDK的混淆插桩任务仍强制读取该固定路径的文件,开启minifyEnabled后触发该任务校验就会报错,关闭混淆后该任务不会执行所以不会触发错误。
修复方案
方案1:手动配置R8生成missing_rules.txt文件(推荐,无需修改依赖版本)
- 打开app模块下的
proguard-rules.pro文件,添加如下配置:
-printmissingrules build/outputs/mapping/release/missing_rules.txt如果你有多个构建变体,需要对应修改路径中的
release为对应变体名(如debug、customRelease等)。
2. (可选)如果执行后仍提示文件不存在,可在app模块的build.gradle文件中添加如下配置,确保混淆任务执行完成后再运行SafeDK插桩任务:android { // 原有配置保持不变 tasks.whenTaskAdded { task -> if (task.name.contains('safedkInstrumentation')) { def variantName = task.name.replace('safedkInstrumentation', '').toLowerCase() task.dependsOn "minify${variantName.capitalize()}WithR8" } } }配置完成后重新执行打包流程即可。
- 打开app模块下的
方案2:升级SafeDK插件到最新版本
旧版本SafeDK未适配AGP7.0+的混淆输出规则,将项目依赖的SafeDK gradle插件升级到官方最新适配版本,即可原生修复该路径校验问题。临时验证方案:手动创建空文件
如果需要快速验证打包流程,可以先手动在报错提示的路径下创建空白的missing_rules.txt文件,即可绕过校验。注意该方案仅用于临时测试,项目执行clean操作后文件会被清除,需要重新创建。
内容的提问来源于stack exchange,提问作者Jamshed Ali

