Android APK 在启动时崩溃并出现 'Illegal class access' 错误

标签 android kotlin gradle

所以我最近更新到 Android Studio 4.1 并将我的项目更新到 Android 10。从那时起,调试应用程序构建工作正常,但每当我在 Android 设备上启动构建的 APK 时,我都会收到以下错误:

FATAL EXCEPTION: main
Process: com.cookiegames.smartcookie, PID: 12800
java.lang.IllegalAccessError: Illegal class access: 'androidx.appcompat.widget.ContentFrameLayout' attempting to access 'androidx.appcompat.app.w' (declaration of 'androidx.appcompat.widget.ContentFrameLayout' appears in base.apk)
    at androidx.appcompat.widget.ContentFrameLayout.onAttachedToWindow(Unknown Source:7)
    at android.view.View.dispatchAttachedToWindow(View.java:18347)
... and so on
我已回滚到 Android Studio 4.0 并将我的项目移回 SDK 29,但错误仍然存​​在。我不知道接下来要尝试什么。

最佳答案

更新:
@headsvk 答案现在是正确的。 Android Studio 没有自动提示我更新 gradle,所以我必须手动进行。你必须使用 gradle 6.5.1 (在 gradle-wrapper.properties 文件中更改)然后更改 com.android.tools.build:gradle版本为 4.1.1 (在项目根目录下的 build.gradle 文件中)。清理并重建项目,它应该被修复。
旧答案:
我找到了一种临时方法来为自己解决这个问题。我意识到禁用 proguard 可以解决问题。所以我只是添加了一条规则告诉proguard保留androidx.appcompat类(class)。
为此,只需将这行代码添加到 proguard-rules.pro文件:

-keep class androidx.appcompat.** { *; }

关于Android APK 在启动时崩溃并出现 'Illegal class access' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64451106/

相关文章:

class - 安卓状态机

gradle - tar可能已损坏或以意外方式被压缩

android - 在 init block 中使用 postValue 时出现 LiveData 单元测试错误

android - 将Google Analytics(分析)新增至Android(Gradle)项目

android - clean 和 gradlew clean 的区别

java - socket.outputStream 为什么要花这么多时间?

android - Kotlin - 如何分割对象变量

android - 如何获得 Android Touch 事件(运动事件)的开始和结束坐标?

Android导航组件: No NavHostFragments found error

kotlin - Map.Entry 在 Map 中使用 Kotlin 类型别名