Android java模块" jar"文件依赖问题

时间:2015-10-06 13:47:29

标签: java android gradle jar android-gradle

我有Android gradle项目,它由主模块和纯java库组成。 java库依赖于jar文件(此处显示Gson仅用于演示目的):

tree structure

该项目编译得很好,但是当我尝试运行它时,它失败了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 ' onCreateapp内):

@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 - 同样的错误。

2 个答案:

答案 0 :(得分:1)

无法加载的类可能缺少自己的依赖项。令人讨厌的是,Android 5.1中的VM并没有告诉您依赖是什么。 我发现当我在使用Dalvik VM的较旧的Android 2.3设备上运行我的应用程序时,在日志消息中发现了缺少的依赖项。

答案 1 :(得分:0)

好吧,它实际上不是一个bug,而是你需要将jar文件作为项目中的依赖项导入。我相信你只是把那个Jar文件放在项目的lib文件夹中,但是没有在项目中作为依赖项导入。这就是为什么maven依赖工作正常,因为它自动导入它。因此,转到文件>项目结构,在模块部分和依赖选项卡下选择项目,通过浏览到您的lib文件夹将您的jar文件添加为文件依赖项。现在,重建你的项目,它应该工作正常。