2015-09-10 33 views
1

我有一个包含一些jar文件(lib.jar)的“java模块”。它们使用fileTree方法包含在我的模块build.gradle文件中。Android Studio:运行时未找到Java模块中包含的Jar文件

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

当我包括主要的应用程序作为一个依赖通过“Java模块”,我总是ClassDefNotFoundException当模块尝试将lib.jar中访问类。

以下是项目层次:

|--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']) 
} 

应用的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') 
} 
+0

只是改变'应用插件:“在你的Gradle模块向com.android.library''添加 –

+0

编译文件(”库/ yourJar.jar')在您的gradle这个依赖 –

+0

对不起,我应该更明确。我希望“Java模块”严格地是java代码,并且具有零个android依赖关系。如果我将插件从'java'更改为'com.android.library',我需要一个Android清单等。 – Tez

回答

1

在任何情况下不知道我解决这个怎么得到,我不得不手动解压JAR依赖成建立罐子。这是非常有趣的,但它的作品。向谷歌提交了一个bug,希望他们能找出一些东西。 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 
} 
相关问题