如何将.jar依赖项包含到最终的.aar库文件中? (Android Studio 1.5)

时间:2015-12-08 13:46:33

标签: java android android-studio android-library aar

我有Android Studio库项目,它拥有自己的Gradle依赖项:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.squareup.retrofit:retrofit:2.0.0-beta2'
    compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2'
}

问题在于这两个外部库(retrofit& converter-gson)。 该库项目的结果是.aar文件。但是当我在一个单独的项目中使用这个.aar文件时,我得到了未解决的类错误:

java.lang.NoClassDefFoundError: Failed resolution of: Lretrofit/Retrofit$Builder;

有没有办法将我的库项目中的gradle依赖项包含到最终的.aar文件中?

我试过了this answer,但它对我没用。

编辑: 我的整个build.gradle文件来自库项目。

apply plugin: 'com.android.library'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        minSdkVersion 15
        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'])
    testCompile 'junit:junit:4.12'
    compile 'com.squareup.retrofit:retrofit:2.0.0-beta2'
    compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2'
}

编辑2: 这是我的app项目中build.gradle脚本的一部分,它使用之前生成的库作为.aar文件。

3个版本,但没有一个工作(它们都不会自动从库中下载依赖项)

(注意,我将这个.aar文件添加到我的app项目的lib文件夹中,并将 flatDir 指令添加到它的gradle.build中)。我没有File->New->NewModule->ImportExistingJAR/AAR

repositories {
    flatDir {
        dirs 'libs'
    }
}

1

compile(name:'mylibrary-release', ext:'aar')

2

compile(name:'mylibrary-release', ext:'aar') {
    transitive = true
}

3

compile(':mylibrary-release@aar') {
    transitive = true
}

2 个答案:

答案 0 :(得分:0)

来自How to include JAR dependency into an AAR library的已接受答案有效。您需要添加评估侦听器,如下所示:

afterEvaluate {project -> project.tasks.preBuild.dependsOn copyLibs}

答案 1 :(得分:0)

您的AAR库不是问题。库不应包含它们的依赖项,因为它可能导致版本冲突进一步降低。

您的应用程序项目未以可传递方式加载库的依赖项的原因是flatdir。这是文档(https://docs.gradle.org/current/userguide/declaring_repositories.html#sub:flat_dir_resolver)中的相关部分:

  

这种类型的存储库不支持任何元数据格式,例如   常春藤XML或Maven POM文件。相反,Gradle将动态生成   基于以下内容的模块描述符(无任何依赖项信息)   工件的存在。

正确的方法是将您的库托管在公共或私有Maven存储库中。