Как переименовать и сгенерировать все APK & Bundle из Gradle со вкусом продукта и разделением APK - PullRequest
5 голосов
/ 08 января 2020

Как я попробовал эти 2 способа (используя по одному) переименовать APK

Option - One

// To Change the APK and Bundle Name
archivesBaseName = "${name}-v${versionCode}_${versionName}-${new Date().format('ddMMMyyyy_HH-mm')}"

Option - Два

(для этого также пытались изменить - variant.outputs.all на variant.outputs.each)

android.applicationVariants.all { variant ->
    variant.outputs.all { output ->
        output.outputFileName = "${variant.buildType.name}-v${versionCode}_${versionName}-${new Date().format('ddMMMyyyy_HH-mm')}.apk"
    }
}

Когда я использую опцию Один ,

Проблема - он генерирует все разбиения, но он переопределяет конфигурацию с последним ароматом, написанным в Gradle.

Также попробуйте опция put One только один раз в defaultConfig, но после записи productFlavours после этого возвращается значение null в versionCode и versionName.

productFlavors {
    aFlavor {
        applicationId "com.a"


        versionCode 5
        versionName "1.0.5"

        signingConfig signingConfigs.signingA

        // To Change the APK and Bundle Name
        archivesBaseName = "${name}-v${versionCode}_${versionName}-${new Date().format('ddMMMyyyy_HH-mm')}"
    }
    bFlavor {
        applicationId "com.b"

        versionCode 5
        versionName "1.0.5"

        signingConfig signingConfigs.signingB

        // To Change the APK and Bundle Name
        archivesBaseName = "${name}-v${versionCode}_${versionName}-${new Date().format('ddMMMyyyy_HH-mm')}"
    }
    cFlavor {
        applicationId "com.c"

        versionCode 3
        versionName "1.0.3"

        signingConfig signingConfigs.signingC

        // To Change the APK and Bundle Name
        archivesBaseName = "${name}-v${versionCode}_${versionName}-${new Date().format('ddMMMyyyy_HH-mm')}"
    }
}

Когда Я использую опцию Два ,

Issue - он генерирует правильное имя, но генерирует один файл APK.

splits {
    abi {
        enable true
        reset()
        include 'arm64-v8a', 'x86', 'x86_64'
        universalApk false
    }
}

android.applicationVariants.all { variant ->
    variant.outputs.all { output ->
        output.outputFileName = "${variant.buildType.name}-v${versionCode}_${versionName}-${new Date().format('ddMMMyyyy_HH-mm')}.apk"
    }
}

Проблема для пакета - невозможно переименовать пакет с помощью параметра Два .

Ответы [ 4 ]

2 голосов
/ 16 января 2020

Согласно Этот ответ, вы можете go с Option - Two с незначительными изменениями, как указано ниже

splits {
    abi {
        enable true
        reset()
        include 'arm64-v8a', 'x86', 'x86_64'
        universalApk false
    }
}

android.applicationVariants.all { variant ->
    variant.outputs.all { output ->
        // New one or Updated one
        output.outputFileName = "${variant.getFlavorName()}-${variant.buildType.name}-v${versionCode}_${versionName}-${new Date().format('ddMMMyyyy_HH-mm')}-${output.getFilter(com.android.build.OutputFile.ABI)}.apk"
        // Old one
        // output.outputFileName = "${variant.buildType.name}-v${versionCode}_${versionName}-${new Date().format('ddMMMyyyy_HH-mm')}.apk"
    }
}

Кроме того, удалите строку из каждого блока Аромата

// To Change the APK and Bundle Name
archivesBaseName = "${name}-v${versionCode}_${versionName}-${new Date().format('ddMMMyyyy_HH-mm')}"

Таким образом, вы получите имя выходного файла, подобное этому

Для aFlvour

  • Выпуск

aFlavor-release-v5_1.0.5-16Jan2020_21-26-arm64-v8a.apk

aFlavor-release-v5_1.0.5-16Jan2020_21-26-x86_64.apk

aFlavor-release-v5_1.0.5-16Jan2020_21-26-x86.apk

  • Отладка

aFlavor-debug-v5_1.0.5-16Jan2020_21-26-arm64-v8a.apk

aFlavor-debug-v5_1.0.5-16Jan2020_21-26-x86_64.apk

aFlavor-debug-v5_1.0.5-16Jan2020_21-26-x86.apk

Для bFlavor

То же имя, что и выше, просто измените префикс aFlavor с bFlavor как

bFlavor-release-v5_1.0.5-16Jan2020_21-26-arm64-v8a.apk

Для cFlavor

То же имя, что и выше, просто измените префикс aFlavor с cFlavor и, versionCode и versionName по уважению

cFlavor-release-v3_1.0.3-16Jan2020_21-26-arm64-v8a.apk

1 голос
/ 17 января 2020

Удалить app_name из string.xml файла

apply plugin: 'com.android.application'
android {
    signingConfigs {
        release {
            keyAlias 'your key alias'
            keyPassword 'your password'
            storeFile file('path of your keystore')
            storePassword 'your password'
        }
    }
    compileSdkVersion 28
    flavorDimensions "default"
    project.archivesBaseName = "ProjectName";
    defaultConfig {
        applicationId "Your package name"
        minSdkVersion 16
        targetSdkVersion 28
        multiDexEnabled true
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        vectorDrawables.useSupportLibrary = true
        signingConfig signingConfigs.release
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            applicationVariants.all { variant ->
                variant.outputs.all { //output ->

                    outputFileName = "YourAppName-${variant.baseName}-${variant.versionName}.apk"
                }
            }
        }
        debug {

        }
    }
    productFlavors {
        dev {
            versionCode 778899 // your versioncode
            versionName "v.1.1.BUILD_NUM"  // your version name
            applicationIdPrefix ".dev" // your application package name like as com.a
            resValue "string", "app_name", "Your App Name"

        }
        live {
            versionCode 778899 // your versioncode
            versionName "v.1.1.BUILD_NUM"  // your version name
            applicationIdPrefix ".dev" // your application package name like as com.a
            resValue "string", "app_name", "Your App Name"

        }
    }
    compileOptions {
        targetCompatibility 1.8
        sourceCompatibility 1.8
    }
}

dependencies {
   // Here your application gradle
}
1 голос
/ 15 января 2020

Поскольку вы используете universalApk false, Gradle генерирует разные выходные apk для каждого ABI. Таким образом, вы должны добавить имя ABI к вашему выходному имени файла. Выражение output.getFilter(com.android.build.OutputFile.ABI) возвращает текущее имя ABI. Пожалуйста, посмотрите на следующий пример:

android.applicationVariants.all { variant ->
    variant.outputs.all { output ->
        output.outputFileName = "${variant.buildType.name}-${output.getFilter(com.android.build.OutputFile.ABI)}-v${versionCode}_${versionName}-${new Date().format('ddMMMyyyy_HH-mm')}.apk"
    }
}
0 голосов
/ 15 января 2020

Вы должны установить разные вкусы, если хотите иметь разные выходные apks.

...