从具有依赖关系的Android库生成JAR,NoClassDefFound

时间:2014-11-03 14:53:10

标签: android maven gradle android-studio

我有一个Android库模块,我需要作为JAR发布。该库没有资源,因此我认为从生成的aar文件中提取classes.jar是有效的。但是,我的库中的类具有远程依赖项,因此当我尝试导入classes.jar并实例化那里定义的类时,我会遇到NoClassDefFound问题。

我已经阅读了有关使用传递关键字(How do I ship an Android Library (aar) with remote dependencies (gradle)?)的内容,但我想让用户只是放入JAR以容纳那些不使用gradle的人,所以我的问题略有不同。

我可以浏览我的本地gradle缓存并找到我所有库的依赖项(作为JAR),所以我可以拉出所有这些并让用户放入它们,但它似乎不优雅。有没有办法我可以a)在库编译时将远程依赖项的jar输出到我的构建目录中的文件夹或b)让gradle将所有传递依赖项导出到我的aar中?

我的gradle.build:

apply plugin: 'android-library'
apply plugin: 'maven'

android {
    compileSdkVersion 19
    buildToolsVersion "20.0.0"

    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 16
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

repositories {
    mavenLocal()
    mavenCentral()
}

dependencies {
    compile 'com.android.support:support-v4:19.0.0'
    compile 'com.android.support:appcompat-v7:20.0.0'

    // my two cloud endpoints libraries
    compile ([group: 'com.appspot.super_endpoint_999', name: 'hello', version: 'v1-1.18.0-rc-SNAPSHOT'])
    compile files('libs/advancedhello-v1-1.19.0-SNAPSHOT.jar')

    compile 'com.google.android.gms:play-services:4.2.+'
    compile('com.google.api-client:google-api-client:1.17.0-rc') {
        exclude(group: 'xpp3', module: 'xpp3')
        exclude(group: 'org.apache.httpcomponents', module: 'httpclient')
        exclude(group: 'junit', module: 'junit')
        exclude(group: 'com.google.android', module: 'android')
    }
    compile('com.google.api-client:google-api-client-android:1.17.0-rc') {
        exclude(group: 'com.google.android.google-play-services', module: 'google-play-services')
    }
    compile('com.google.http-client:google-http-client-android:1.17.0-rc') {
        exclude(group: 'com.google.android', module: 'android')
    }
    compile 'com.google.guava:guava:14.0.+'
    compile fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
}

0 个答案:

没有答案