gradle 应用于所有生成类型的archiveBaseName

epggiuax  于 2023-02-04  发布在  Hive
关注(0)|答案(2)|浏览(320)

我有以下应用程序build.gradle

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    defaultConfig {
        applicationId "io.gresse.hugo.anecdote"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 12
        versionName "1.0.0"
    }

    buildTypes {
        release {
            archivesBaseName = "anecdote-" + defaultConfig.versionName
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

        }
        debug {
            archivesBaseName = "anecdote-DEBUGDEBUGDEBUG-"
        }
    }
}

执行./gradlew assembleRelease assembleDebug
输出. apk为:

  • anecdote-DEBUGDEBUGDEBUG-debug-unaligned.apk
  • anecdote-DEBUGDEBUGDEBUG-debug.apk
  • anecdote-DEBUGDEBUGDEBUG-release-unaligned.apk
  • anecdote-DEBUGDEBUGDEBUG-release.apk
    我想要的:
  • anecdote-DEBUGDEBUGDEBUG-debug-unaligned.apk
  • anecdote-DEBUGDEBUGDEBUG-debug.apk
  • anecdote-1.0.0-release-unaligned.apk
  • anecdote-1.0.0-release.apk
    是否有任何方法可以将archiveBaseName应用于特定的构建类型,或者这是一个错误?
    谢谢你,
qyzbxkaa

qyzbxkaa1#

正如您可能注意到的,这个问题围绕SO是一团乱麻。
相关答案herehere
我想保留简单的archiveBaseName,但它似乎已经过时,而且它适用于所有的buildType。

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    defaultConfig {
        applicationId "io.gresse.hugo.anecdote"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 12
        versionName "1.0.0"
    }

    project.ext.set("archivesBaseName", "Anecdote");

    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            if(variant.buildType.name == "release"){
                output.outputFile = new File(
                        output.outputFile.parent,
                        output.outputFile.name.replace(".apk", "-"+variant.versionName + ".apk"))
            }
        }
    }

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
cwtwac6a

cwtwac6a2#

我知道这是非常古老的,但多个archivesBaseName似乎仍然覆盖对方,即使在最新的Gradle版本(7.5)。
我发现可以稍微简化一下公认的答案,以便使用archivesBaseName(它似乎并没有被弃用)。

applicationVariants.all { variant ->
    variant.outputs.each { output ->
        if (variant.buildType.name == "release") {
            archivesBaseName = 'your-release-only-name'
        }
    }
}

相关问题