我有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
并在活动中引入依赖项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
- 同样的错误。
答案 0 :(得分:1)
无法加载的类可能缺少自己的依赖项。令人讨厌的是,Android 5.1中的VM并没有告诉您依赖是什么。 我发现当我在使用Dalvik VM的较旧的Android 2.3设备上运行我的应用程序时,在日志消息中发现了缺少的依赖项。
答案 1 :(得分:0)
好吧,它实际上不是一个bug,而是你需要将jar文件作为项目中的依赖项导入。我相信你只是把那个Jar文件放在项目的lib文件夹中,但是没有在项目中作为依赖项导入。这就是为什么maven依赖工作正常,因为它自动导入它。因此,转到文件>项目结构,在模块部分和依赖选项卡下选择项目,通过浏览到您的lib文件夹将您的jar文件添加为文件依赖项。现在,重建你的项目,它应该工作正常。