使用Gradle插件v4.10.1重新命名的APK

时间:2019-01-15 10:14:57

标签: android gradle gradle-plugin android-studio-3.3

我今天已将我的Android Studio更新为Gradle插件版本4.10.1附带的3.3版本。

以前,我的build.gradle将此代码重命名为以下结构的apk:

app-{buildType[release|debug]}-{flavor[prod|stage]}-{versionName[1.2.4]-{versionCode[43]}.apk

app-release-prod-1.1.4-45.apk

applicationVariants.all { variant ->
    variant.outputs.all { output ->
        outputFileName = output.outputFile.name.replace(".apk", "-${variant.versionName}-${variant.versionCode}.apk").replace("-unsigned", "")
    }
}

但是更新后出现了此错误。

  

警告:API'variantOutput.getPackageApplication()'已过时,并已替换为'variant.getPackageApplicationProvider()'。   它将在2019年底删除。   有关更多信息,请参见https://d.android.com/r/tools/task-configuration-avoidance。   要确定调用variantOutput.getPackageApplication()的内容,请在命令行上使用-Pandroid.debug.obsoleteApi = true来显示堆栈跟踪。   受影响的模块:应用

问题出在output.outputFile.name上,因为您无法访问此插件版本上的输出数据。

到目前为止,我尝试这种方法都没有成功。

applicationVariants.all { variant ->
    variant.flavors*.name.all { flavor ->
        outputFileName = "${flavor}-${variant.buildType.name}-${variant.versionName}-${variant.versionCode}.apk".replace("-unsigned", "")
    }
}

有什么主意吗?

谢谢

8 个答案:

答案 0 :(得分:3)

使用 setProperty 方法,您可以重命名.apk名称。

您可以执行此操作。

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.expertBrains.abc"
        minSdkVersion 17
        targetSdkVersion 28
        versionCode 75
        versionName "2.6.15"
        multiDexEnabled true
        setProperty("archivesBaseName", "(" + versionName + ") "+ new Date().format( 'yyyy-MM-dd HH:mm' ))

    }
}

答案 1 :(得分:2)

您可以这样做:

defaultConfig {
    ...

    project.ext.set("archivesBaseName", applicationId + "_V" + versionName + "("+versionCode+")_" + new Date().format('dd-MM mm'));

}

答案 2 :(得分:1)

我希望这会有所帮助。我不能说这是最好的方法,但是它可以工作。

productFlavour{
    uat {
        versionName "2.8.74"
        buildConfigField("String", "ENVIRONMENT", '"uat"')
        setProperty("archivesBaseName", "iotg-uat-v" + versionName)
    }

    staging {
        versionName "2.9.4"
        buildConfigField("String", "ENVIRONMENT", '"staging"')
        setProperty("archivesBaseName", "iotg-staging-v" + versionName)
    }
  }

答案 3 :(得分:1)

尝试一下:

android.applicationVariants.all { variant ->
    variant.outputs.all { output ->
        def builtType = variant.buildType.name
        def versionName = variant.versionName
        def versionCode = variant.versionCode
        def flavor = variant.flavorName
        outputFileName = "app-${flavor}-${builtType}-${versionName}-${versionCode}.apk"
    }
}

这将输出以下apk名称: app-release-myFlavor-0.0.1-1.apk。

答案 4 :(得分:1)

如评论中所述,正确的方法是使用${variant.getFlavorName()}.apkvariant.baseName

答案 5 :(得分:0)

要重命名口味,您可以这样做

  productFlavors {
        production {
            applicationId "com.example.production"
        }

        staging {
            applicationId "com.example.production.staging"

        }

        applicationVariants.all { variant ->
            variant.outputs.each { output ->
                if(variant.productFlavors[0].name.equals("staging")){
                    output.outputFile = new File(output.outputFile.parent,
                            output.outputFile.name.replace("app-staging-release",  "test"));

                }else{
                    output.outputFile = new File(output.outputFile.parent,
                            output.outputFile.name.replace("app-production-release",  "production"));
                }

            }
        }
    }

答案 6 :(得分:0)

您可以尝试以下吗?

applicationVariants.all { variant ->
    variant.outputs.all { output ->
        outputFileName = outputFileName.replace(".apk", "-${variant.versionName}-${variant.versionCode}.apk").replace("-unsigned", "")
    }
}

答案 7 :(得分:0)

applicationVariants.all { variant ->
        variant.outputs.all {
            def appName = "AppName"
            def buildType = variant.variantData.variantConfiguration.buildType.name
            def newName = "${appName}${defaultConfig.versionName}_${buildType}.apk"
            outputFileName = newName
        }
    }

下面的代码将生成apk文件名为

  

AppName1.2.0_buildType.apk

相关问题