使用 .aar 文件时出现 NoClassDefFoundError 错误,但该类已存在且已经进行过 dex 处理。

10
我有几个项目,我构建这些项目以创建一个 .aar 文件。然后我将此 .aar 文件导入到 Android Studio 的 /libs 目录下。该依赖项的 build.gradle 文件如下所示:

我有几个项目,我构建这些项目以创建一个 .aar 文件。然后我将此 .aar 文件导入到 Android Studio 的 /libs 目录下。该依赖项的 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 文件进行了解压和反汇编,并验证了其所抱怨的类确实存在。我尝试过现有的处理此问题的方法,但它们都没有起作用。

还有其他人遇到过这个问题吗?提前感谢。


可能存在类验证错误。在安装应用程序时,当它正在进行odexed/oated操作时,请查看logcat中的日志,看看该类是否存在任何验证错误。 - JesusFreke
安装过程中似乎没有出现任何错误。但我注意到当我点击进入使用此源的活动时,我会在异常之前多次看到“ I/art﹕ Rejecting re-init on previously-failed class java.lang.Class<com.companyx.android.api.ui.vision.metaio.MetaIoView> ”。 - Przemek Lach
是的,这意味着在安装时出现了一些验证错误。在安装期间再次查看logcat :) - JesusFreke
我似乎找不到与这个特定类相关的任何验证错误。我发现了一些看起来可疑的东西,但我不确定它们是否与此问题有关:W/PackageParser:在/data/local/tmp/com.companyx.pilot.noclassdefffoundtest.app二进制XML文件第22行下<manifest>之下未知元素:meta-data和在/data/app/vmdl58152644.tmp/base.apk 二进制XML文件第22行下<manifest>之下未知元素:meta-data。我应该在logcat中查找什么关键字? - Przemek Lach
我现在遇到了同样的问题。很遗憾还没有答案。 - Thuy Trinh
可能是重复问题:https://dev59.com/uIjca4cB1Zd3GeqPsSb1 - tir38
2个回答

8

1
@thuy-trinh 是的,我也很好奇为什么。 - draksia
哦,天啊!!!因为这个问题我浪费了一整天的时间,谢谢!! :) - Adi

-1

顺便提一下,你可以使用更简单的语法,也是有效的

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

别忘了在库名称末尾省略 @aar 这个东西


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