【问题标题】:How to specify android assembled library file name on gradle 5.1如何在 gradle 5.1 上指定 android 组装库文件名
【发布时间】:2019-01-24 11:58:58
【问题描述】:

当我从 5.0 更新到 5.1 时,Gradle 改变了它的行为。

假设我们有一个 android 项目,其中包含一个名为 library 的模块。 在 Gradle 5.0(和以前的版本)上,当我执行 ./gradlew assembleRelease./gradlew assembleDebug 时,生成的输出分别为 library-release.aarlibrary-debug.aar

在我更新到 Gradle 5.1(我也尝试过 5.1.1)后,它只会为任何构建类型生成 library.aar,而输出文件名中没有任何构建类型分类器。

所以我的问题是:如何强制 Gradle 5.1 像以前一样为不同的构建类型设置正确的输出文件命名?下面是我的库模块的build.gradle.kts,不过我不认为有什么问题:

import org.jetbrains.kotlin.config.KotlinCompilerVersion

plugins {
    id("com.android.library")
    id("kotlin-android")
    id("maven-publish")
}

val libraryVersion = "1.5.0"

android {
    compileSdkVersion(28)

    defaultConfig {
        minSdkVersion(16)
        targetSdkVersion(28)
        versionCode = 1
        versionName = libraryVersion
    }

    lintOptions {
        isAbortOnError = false
    }

    buildTypes {
        getByName("release") {
            isMinifyEnabled = false
            proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
        }
    }
}

dependencies {
    implementation(fileTree(mapOf("include" to listOf("*.jar"), "dir" to "libs")))
    implementation(kotlin("stdlib-jdk7", KotlinCompilerVersion.VERSION))
}

更新:

如果我在 build.gradle.kts 中添加以下代码:

afterEvaluate {
    android.libraryVariants.forEach { libraryVariant ->
        libraryVariant.outputs.forEach { output ->
            println(output.outputFile.name)
        }
    }
}

它将打印:

library-debug.aar
library-release.aar

现在它开始看起来像 gradle 5.1 中的一个错误

【问题讨论】:

标签: android gradle android-library


【解决方案1】:

正如我们在https://github.com/gradle/gradle/issues/8328 中看到的,这是一个已在 Android Gradle 插件 3.4 中修复的错误。

【讨论】:

  • 这将在 3.4 中修复,也许在 3.3.x 中。两者都还没有发布。
  • 该问题现在已标记为已解决,但我将 3.5.0-alpha09 与 Gradle 5.3.1 一起使用,并且重命名 AAR 文件不起作用。使用 Android Gradle 插件命名最终工件并不容易,这一直很烦人!
【解决方案2】:
libraryVariants.all { variant ->
    variant.outputs.all { output ->
        def filePrefix = "$buildDir/outputs/aar/$archivesBaseName"
        outputFileName = "${archivesBaseName}-${version}.aar"
        def fileSuffix = "aar"
        def originalFile = file("$filePrefix-${variant.buildType.name}.$fileSuffix")
        def renamedFile = "$filePrefix-${variant.buildType.name}-$version.$fileSuffix"
        tasks.named("assemble").configure {
            doLast {
                originalFile.renameTo(renamedFile)
            }
        }
    }
}

archivesBaseNameversion 可以在库 build.gradle 的默认块中定义

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-04
    • 2013-08-29
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    • 1970-01-01
    相关资源
    最近更新 更多