2015-09-10 1 views
1

У меня есть «Java-модуль», который содержит некоторые файлы jar (lib.jar). Они включены в мой файл build.gradle модуля, используя метод fileTree.Android Studio: файлы Jar, входящие в состав модуля Java, не найдены во время выполнения

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

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

просто изменить 'применить плагин:«com.android.library'' в вашем модуле Gradle –

+0

добавить компилировать файлы (»ЛИЭС/yourJar.jar ') в вашем Gradle зависимости –

+0

К сожалению, я должен быть более Чисто. Я хочу, чтобы «Java-модуль» строго был java-кодом и имел нулевые зависимости от android. Если я изменю плагин с «java» на «com.android.library», мне понадобится манифест android. – Tez

ответ

1

В случае какой-либо задавался вопросом, как я получил вокруг этого, мне пришлось вручную извлечь банку зависимость в построить банку. Это довольно абсурдно, но это работает. Предъявлена ​​ошибка для google и, надеюсь, они что-то придумают. 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 
} 
Смежные вопросы