我有一个 Android gradle 项目,它由主模块和一个纯 java 库组成。 java 库依赖于一个 jar 文件(此处显示 Gson 仅用于演示目的):
项目编译正常,但当我尝试运行它时失败并显示 NoClassDefFoundError
:
java.lang.NoClassDefFoundError: com.google.gson.Gson
at com.example.JavaLibClass.javaMethod(JavaLibClass.java:7)
at com.denisk.deptest.MainActivity.onCreate(MainActivity.java:15)
at android.app.Activity.performCreate(Activity.java:5135)
如果我用常规 Maven 依赖项替换 jar
依赖项,它就可以工作。
如果我将 jar
依赖从 javalib
移动到 app
并在 Activity 中引入依赖 Gson
依赖,它有效。
app/build.gradle依赖:
dependencies {
compile project(':javalib')
}
javalib/build.gradle:
apply plugin: 'java'
dependencies {
compile files('libs/gson-2.2.4.jar')
}
MainActivity 的 onCreate
(在 app
内):
@Override
protected void onCreate(Bundle savedInstanceState) {
JavaLibClass javaLibClass = new JavaLibClass();
javaLibClass.javaMethod();
}
JavaLibClass(在 javalib
内):
public class JavaLibClass {
public void javaMethod() {
Gson gson = new Gson();
}
}
带有演示项目的 Github 存储库:
https://github.com/denisk20/android-gradle-dependency-test
我是做错了什么还是错误?
编辑 1: 无论我是使用 Android Studio 还是使用纯 Gradle 进行构建都没有关系。
编辑 2:
我已经用 AOSP 的 android gradle 插件 1.4.0-beta4
试过了 - 同样的错误。
最佳答案
加载失败的类可能缺少它自己的依赖项。令人恼火的是,Android 5.1 中的 VM 并没有告诉您这种依赖性是什么。 我发现当我在装有 Dalvik VM 的较旧的 Android 2.3 设备上运行我的应用程序时,会在日志消息中识别出缺少的依赖项。
关于java - Android java模块 "jar"文件依赖问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32971696/