使用 .aar NoClassDefFoundError 但是 Class 存在并且被删除

Using .aar NoClassDefFoundError But Class Exists and is Dexed

我构建了几个项目来创建 .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 文件,并验证了它抱怨的类 确实存在。我尝试过现有的方法来处理这个问题,但 none 有效。

还有其他人遇到过这种情况吗?提前致谢。

我运行遇到了同样的问题。解决方法是首先将 AAR 文件部署到本地 Maven(我在 https://github.com/dcendents/android-maven-gradle-plugin). Then I referenced to the local maven as described at 处使用了插件。最后我用传递选项声明了依赖关系,如下所示:

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

然后错误就消失了。

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

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

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