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

标签 java android gradle jar android-gradle-plugin

我有一个 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 并在 Activity 中引入依赖 Gson 依赖,它有效。

app/build.gradle依赖:

dependencies {
    compile project(':javalib')
}

javalib/build.gradle:

apply plugin: 'java'

dependencies {
    compile files('libs/gson-2.2.4.jar')
}

MainActivityonCreate(在 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/

相关文章:

java - 菜单项加速键仅在菜单项显示后才起作用

java - 如果我在服务器请求正文中有字符串列表并迭代它们,则使正文不断变化

android - 为 fragment 设置约束

android - 如何解决[ fatal error ]:序言中不允许包含内容?

javascript - 使用 Angular 从服务器下载文件

javascript - 在其他文件 Cordova/PhoneGap 中创建 GoogleMap 对象

java - Intent 不起作用,单击按钮2时,应用程序崩溃

android-studio - Gradle:一种基于另一种构建类型

jenkins - 使用Gradle的Artifactory Jenkins集成

java - 在 Netbeans 7.3.1 中解析文件 JSP 或 JAVA 时出错