【问题标题】:How to include .jar dependencies into final .aar library file? (Android Studio 1.5)如何将 .jar 依赖项包含到最终的 .aar 库文件中? (安卓工作室 1.5)
【发布时间】:2016-03-13 11:16:25
【问题描述】:

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

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: 这是我的应用项目中 build.gradle 脚本的一部分,它使用之前生成的库作为 .aar 文件。

3 个版本,它们都不起作用(它们都不会从库中自动下载依赖项)

(注意,我将此 .aar 文件添加到我的应用项目的 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
}

【问题讨论】:

  • 你在使用 proguard 吗?
  • 我用完整的 build.gradle 文件编辑了我的问题。它说那里“缩小”-> false。
  • 好吧,我不知道是什么原因造成的,但你可以给它一个机会给我写的这个 gradle。 github.com/emreaktrk/ContextualView/blob/master/library/…
  • 另一种解决方案是根据需要编写您的库,并让 jitpacks.io 有机会为您提供 aar,以便自动化可以更好地工作:D Jitpacks.io 仅适用于 github :(
  • 没有一些直接的解决方案吗?我是 Android 新手(我来自 iOS 世界)。

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


【解决方案1】:

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

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

这种类型的存储库不支持任何元数据格式,例如 Ivy XML 或 Maven POM 文件。相反,Gradle 会动态生成 基于 存在人工制品。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 仅构建 .aar 文件时,这是否适用于 assemble 任务?
    猜你喜欢
    • 2016-01-31
    • 2016-01-06
    • 2018-11-09
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    • 2019-06-04
    • 2018-04-02
    • 2015-11-26
    相关资源
    最近更新 更多