Android Studio:在运行时找不到Java模块中包含的Jar文件

时间:2015-09-10 07:26:24

标签: java android android-studio gradle

我有一个“java模块”,其中包含一些jar文件(lib.jar)。它们使用fileTree方法包含在我的模块build.gradle文件中。

compile fileTree(dir: 'libs', include: ['*.jar'])

当我在主应用程序中包含“java模块”作为依赖项时,当模块尝试访问lib.jar中的类时,我总是得到ClassDefNotFoundException。

以下是项目层次结构:

|--mylibrary (java module)
   |
   --libs/
     |
     --lib.jar
   --build.gradle
|--app
   |
   --src/
   --libs/
   --build.gradle

仅当模块是“java模块”时才会出现此问题。我已尝试使用“android库模块”作为依赖项,并且罐子包含在内。我错过了什么?

Java模块build.gradle:

apply plugin: 'java'

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

App build.gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    defaultConfig {
        applicationId "com.macolighting.mncp.myapplication"
        minSdkVersion 21
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile project(':mylibrary')
}

1 个答案:

答案 0 :(得分:1)

如果有人想知道我是如何解决这个问题的,我不得不手动将jar依赖项提取到构建jar中。它非常适合hacky,但它确实有效。向谷歌提交了一个错误,希望他们能够解决问题。 https://code.google.com/p/android/issues/detail?id=186012

apply plugin: 'java'

configurations {
    libDependency
}

jar {
    from {
        configurations.libDependency.collect {
            it.isDirectory() ? it : zipTree(it)
        }
    }
}

dependencies {
    FileTree libs = fileTree(dir: 'libs', include: '*.jar')
    libDependency libs
    compile libs
}