【问题标题】:How to Rename and Generate all APK & Bundle from Gradle with Product flavour and APK Splits如何使用产品风味和 APK 拆分从 Gradle 重命名和生成所有 APK 和 Bundle
【发布时间】:2020-01-08 17:18:39
【问题描述】:

因为我尝试了这两种方法(一次使用一个)来重命名 APK

选项 - 一个

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

选项 - 两个

(为此还尝试将 - 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 编写的最后一种风味。

此外,尝试在 defaultConfig 中仅放置一次选项 One,但正如 productFlavours 之后编写的那样,它会在 versionCodeversionName 中返回 null 值。

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

当我使用选项两个时,

问题 - 它生成正确的名称但生成单个 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"
    }
}

捆绑包问题 - 无法使用选项 Two 重命名捆绑包。

【问题讨论】:

标签: android android-studio gradle groovy build.gradle


【解决方案1】:

根据 This 的回答,您可以使用 Option - Two 进行细微更改,因为下面提到的仅适用于 APK ,而不是Bundle / AAB files

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

另外,从每个 Flavor 的块中删除该行

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

通过这个,你得到这样的输出文件名

调味

  • 发布

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 并且,versionCodeversionName 受到尊重

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

【讨论】:

    【解决方案2】:

    因为您使用的是universalApk false,Gradle 会为每个 ABI 生成不同的输出 apk。因此,您必须将 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"
        }
    }
    

    【讨论】:

    • 如果我还想在输出文件中添加风味名称怎么办?那么bundle的输出文件名呢?
    • 获得风味名称的解决方案:variant.getFlavorName() 参考:stackoverflow.com/a/52536094/1684864
    【解决方案3】:

    string.xml 文件中删除app_name

    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
    }
    

    【讨论】:

      【解决方案4】:

      如果你想有不同的输出 apk,你必须设置不同的风格。

      【讨论】:

        猜你喜欢
        • 2014-09-26
        • 1970-01-01
        • 2020-11-17
        • 1970-01-01
        • 1970-01-01
        • 2017-05-31
        • 1970-01-01
        • 1970-01-01
        • 2018-01-27
        相关资源
        最近更新 更多