开启R8混淆后应用崩溃,报SecurityException权限异常求助
启用R8后开启minifyEnabled导致应用崩溃问题
我们在Gradle配置中启用了R8,当将minifyEnabled设置为true时应用崩溃,抛出如下异常:
Gradle.properties配置
android.enableR8 = true android.enableR8.fullMode=true useProguard = true
build.gradle配置
buildTypes { release { minifyEnabled false debuggable false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } debug{ debuggable false minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } }
异常信息
java.lang.SecurityException: 指定的包com.oplus.internal.telephony属于uid 1001,但实际并非如此 at com.android.server.appop.AppOpsService.verifyAndGetBypass(AppOpsService.java:4791) at com.android.server.appop.AppOpsService.noteOperationUnchecked(AppOpsService.java:3575) at com.android.server.appop.AppOpsService.noteOperationImpl(AppOpsService.java:3563) at com.android.server.appop.AppOpsService.access$4000(AppOpsService.java:223) at com.android.server.appop.AppOpsService$CheckOpsDelegateDispatcher.lambda$noteOperation$4(AppOpsService.java:7769) at com.android.server.appop.AppOpsService$CheckOpsDelegateDispatcher$$ExternalSyntheticLambda5.apply(Unknown Source:33) at com.android.server.policy.AppOpsPolicy.noteOperation(AppOpsPolicy.java:221) at com.android.server.appop.AppOpsService$CheckOpsDelegateDispatcher.noteOperation(AppOpsService.java:7767) at com.android.server.appop.AppOpsService.noteOperation(AppOpsService.java:3547) at com.android.internal.app.IAppOpsService$Stub.onTransact(IAppOpsService.java:476) at com.android.server.appop.OplusAppOpsService.onTransact(OplusAppOpsService.java:38) at android.os.Binder.execTransactInternal(Binder.java:1226) at android.os.Binder.execTransact(Binder.java:1163)
解决方案
1. 添加ProGuard规则保留OPPO内部Telephony相关类
在proguard-rules.pro文件中添加以下规则,避免R8混淆或移除OPPO系统内部的telephony相关类:
-keep class com.oplus.internal.telephony.** { *; } -dontwarn com.oplus.internal.telephony.**
2. 移除Gradle配置中的冲突项
当前配置同时启用了R8和ProGuard,两者存在冲突,建议删除useProguard = true配置,修改后的Gradle.properties如下:
android.enableR8 = true android.enableR8.fullMode=true # useProguard = true 已注释或删除
原因说明
com.oplus.internal.telephony是OPPO系统专属的内部包,应用调用相关接口时,R8的full优化模式可能会误处理该包的引用,导致系统校验包UID时出现不匹配的情况。添加保留规则可确保相关类不被混淆或移除,同时清理冲突的配置项能避免混淆工具的行为异常。
内容的提问来源于stack exchange,提问作者venkat
相关产品推荐
相关产品推荐

