安装应用后,发布版本无法识别应用程序类。

3
在调试版本中,应用程序工作正常。但是当我生成签名apk并安装后,打开应用程序后它立即因logcat错误而崩溃。
 Caused by: java.lang.ClassNotFoundException: Didn't find class "com.mypackage.AppClass" on path: DexPathList[[zip file "/data/app/com.mypackage-1/base.apk"],nativeLibraryDirectories=[/vendor/lib64, /system/lib64]].

我使用AppClass扩展MultiDexApplication,并在其中添加了一些功能。我已经在清单文件中正确声明了这个类。

最复杂的是,在调试版本中它可以工作,但只有在发布版本中才会出现这个问题。

如果有人能帮助我解决这个问题,我将不胜感激。

敬礼


(1)首先运行 Build > Clean Project。 (2)Proguard会删除所有未使用的代码,但有时也会出错,请检查您的Proguard设置。 (3)您需要将minifyEnabled属性更改为false,以永久保留未使用的方法。您的build.gradle可能会有所帮助。 - undefined
@JonGoodwin 我已经清理了很多次。minifyEnabled也被设置为false。我会更深入地查看build.gradle文件。 - undefined
查看multidex "在为您的项目设置multidex时,您可能会注意到在运行应用程序时出现java.lang.NoClassDefFoundError。这意味着应用程序启动的类不位于主dex文件中。Android SDK Build Tools 21.1或更高版本的Gradle Android插件支持multidex。" - undefined
2个回答

1

请查看以下选项:

选项1:降低您的Gradle版本

选项2:minifyEnabled false

选项3:使用稳定的支持库和构建工具。

选项4:无效缓存/重新启动,文件->无效缓存/重新启动

选项5:如果您正在使用私有平台库,请确保将非NDK库与您的APK一起使用。


我无法将Gradle从3.0.1降级到2.3.3。我使用的是Android Studio 3.0.1,需要使用最新版本。我已经多次重启但没有任何积极的结果。也许问题出在一些库上,但为什么未签名的APK可以工作(只是构建APK),而签名后却不能工作呢?据我检查,我使用了超过64k个方法,但在之前的版本中它正常工作(上次签名的APK是4个月前)。 - undefined

0
终于,我找到了一个解决办法,帮助我解决了这个问题。我不得不在gradle中添加了这部分代码:
  dexOptions {
      preDexLibraries = false
   }

并将以下内容添加到您应用程序的 build.gradle 文件的通用部分

afterEvaluate {
   tasks.matching {
      it.name.startsWith('dex')
   }.each { dx ->
      if (dx.additionalParameters == null) {
         dx.additionalParameters = ['--multi-dex']
      } else {
         dx.additionalParameters += '--multi-dex'
      }
   }
}

对于其他可能遇到类似问题的人,我参考了一个帖子并找到了解决方案: https://dev59.com/2l8d5IYBdhLWcg3woDUZ#26627133

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接