archiveBaseName применяется ко всем типам сборки

У меня есть следующее приложение 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 для определенных типов сборки или это ошибка?

Спасибо,

2 ответа

Решение

Как вы можете заметить, этот вопрос - беспорядок вокруг SO.

Связанный ответ здесь и здесь.

Вот что сработало для меня. Я хотел сохранить простое archiveBaseName но это кажется устаревшим и что это относится ко всем buildTypes.

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'
        }
    }
}

Я знаю, что это очень старый, но несколькоarchivesBaseNameпо-прежнему кажется, что они перезаписывают друг друга даже в последней версии Gradle (7.5).

Начиная с Gradle 3.0outputсвойство, которое необходимо изменить, теперь называетсяoutputFileNameи больше не является абсолютным путем:

      applicationVariants.all { variant ->
    variant.outputs.each { output ->
        if (variant.buildType.name == "release") {
            output.outputFileName = 'your-release-name.apk'
        }
    }
}
Другие вопросы по тегам