【问题标题】:Using .aar NoClassDefFoundError But Class Exists and is Dexed使用 .aar NoClassDefFoundError 但类存在并且已被 Dexed
【发布时间】:2015-04-24 20:45:21
【问题描述】:

我构建了几个项目来创建 .aar。然后我将此.aar 导入到/libs 下的Android Studio 中。此依赖项的 build.gradle 文件如下所示:

repositories{
    flatDir{
        dirs 'libs'
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.0.0'
    compile 'com.google.android.gms:play-services:7.0.0'
    compile 'com.android.support:multidex:+'
    compile(name: 'customApi-debug', ext:'aar')
}

由于库很大,我设置了 multiDexEnabled = true。 Android Studio 找到库并自动完成工作。构建也可以正常工作,但运行应用程序会出现以下错误:

java.lang.NoClassDefFoundError: com.companyx.android.api.ui.vision.metaio.MetaIoView
            at com.companyx.android.api.ui.vision.metaio.MetaIoView$$InjectAdapter.<init>(MetaIoView$$InjectAdapter.java:29)

我分别解压缩和反汇编了 .aar 和 dex 文件,并验证了它所抱怨的类确实存在。我已经尝试了现有的方法来处理这个问题,但没有一个奏效。

还有其他人经历过吗?提前致谢。

【问题讨论】:

  • 类可能存在验证错误。安装应用程序后查看 logcat 中的日志,同时查看该类是否存在验证错误。
  • 安装过程中似乎没有错误。我注意到的是,当我点击转到使用此源的活动时,我得到了 I/art:Rejecting re-init on previous-failed class java.lang.Class 在我得到异常之前几次。
  • 是的,这意味着在安装时存在一些验证错误。在安装过程中再看一下 logcat :)
  • 我似乎找不到任何与这个特定类相关的验证错误。我发现了一些看起来可疑的东西,但我不确定它们是否与这个问题有关: W/PackageParser: 下的未知元素:/data/local/tmp/com.companyx.pilot 的元数据.noclassdefffoundtest.app 二进制 XML 文件第 22 行和 下的未知元素:/data/app/vmdl58152644.tmp/base.apk 二进制 XML 文件第 22 行的元数据。我应该在 logcat 中寻找什么关键字?
  • 我现在遇到了同样的问题。很遗憾仍然没有答案。

标签: android android-studio android-gradle-plugin dex aar


【解决方案1】:

我遇到了同样的问题。解决方法是首先将 AAR 文件部署到本地 maven(我使用了 https://github.com/dcendents/android-maven-gradle-plugin 的插件)。然后我参考了https://stackoverflow.com/a/23045791/2563009 中描述的本地 maven。最终我用传递选项声明了依赖关系,如下所示:

dependencies {
  compile('com.myapp.awesomelib:awesomelib:0.0.1@aar') {
    transitive = true
  }
}

错误就会消失。

【讨论】:

  • @thuy-trinh 是的,我也很好奇为什么
  • 哦,伙计!因为这个,我浪费了我的 1 天,谢谢! :)
【解决方案2】:

仅供参考,您可以使用更简单的语法,这也是有效的

 compile 'com.myapp.awesomelib:awesomelib:0.0.1'

不要忘记在库名称末尾省略 @aar 东西

【讨论】:

    猜你喜欢
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 2014-03-12
    • 1970-01-01
    • 2015-04-06
    相关资源
    最近更新 更多