发布版本上出现“未定义类”错误?

10 浏览
0 Comments

发布版本上出现“未定义类”错误?

我似乎遇到了一个问题,只有发布版本会崩溃,并显示错误信息java.lang.NoClassDefFoundError: Failed resolution of: Lretrofit2/Retrofit$Builder;。这个类是无关紧要的,因为在发布版本中它没有解析其他类。然而,在调试版本中却没有出现这个问题,这一点毫无道理。我发现当我包括以下两个依赖项时:

implementation 'com.google.android.gms:play-services-ads:12.0.0'
implementation 'com.google.ads.interactivemedia.v3:interactivemedia:3.8.5'

应用程序会崩溃。然而,当我排除其中一个依赖项时,发布版本就能正常工作。有人遇到过这个问题吗?

构建配置如下:

compileSdkVersion 26
buildToolsVersion 26.0.1
defaultConfig {
    applicationId "xxxx"
    minSdkVersion 21
    targetSdkVersion 27
    versionName project.rootProject.version.toString()
    multiDexEnabled true
    vectorDrawables.useSupportLibrary = true
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig xxxx
    }
}

0
0 Comments

问题:发布版上出现“没有定义类错误(No Class defined error on release builds)”的原因和解决方法

在发布版上出现“没有定义类错误(No Class defined error on release builds)”的问题,可能是由于以下原因导致的:

1. Gradle版本不兼容。解决方法是更新Gradle,将targetSdkVersioncompileSdkVersionbuildtoolsVersion都设置为27.0.1,或者将其移除(保持默认设置,Gradle会自动寻找该版本中的最新版本)。

2. 是否使用了multiDexEnabled true。如果已经包含了Google Play服务库,则可以尝试移除multiDexEnabled true并重新构建Gradle。

3. 如果你的类继承Application类,则可以使用multiDexEnable true。在attachBaseContext方法中添加以下代码:

protected void attachBaseContext(Context context) {
    super.attachBaseContext(context);
    MultiDex.install(this);
}

4. 可以参考这个问题中的解决方法,更新支持库。

希望以上解决方法能够帮助你解决“没有定义类错误(No Class defined error on release builds)”的问题。

0