我有几个项目是为了创建一个.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文件进行了解压缩和反汇编,并验证了它抱怨的类实际存在。我已经尝试过处理这个问题的现有方法,但没有一个能够解决问题。
其他人有过这种经历吗?提前致谢。
答案 0 :(得分:7)
我遇到了同样的问题。修复首先是将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
}
}
错误将会消失。
答案 1 :(得分:0)
只需fyi,您可以使用更简单的语法,这也是有效的
compile 'com.myapp.awesomelib:awesomelib:0.0.1'
不要忘记在库名称的末尾省略@aar的东西