Android 使用Gradle插件v4.10.1重命名Apk

Android 使用Gradle插件v4.10.1重命名Apk,android,gradle,gradle-plugin,android-studio-3.3,Android,Gradle,Gradle Plugin,Android Studio 3.3,今天我将Android Studio更新为3.3版本,Gradle插件版本为4.10.1 以前,my 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 ->

今天我将Android Studio更新为3.3版本,Gradle插件版本为4.10.1

以前,my 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年底拆除。 有关详细信息,请参阅。 要确定调用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", "")
    }
}
有什么想法吗

=======================================================

更新

我在这件事上重做了一次,我尝试了下面的代码片段,但在检索该变体的味道时遇到了问题

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

outputs: app--release-1.0.4-88.apk

谢谢

您可以这样做:

defaultConfig {
    ...

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

}

要重命名发行版,您可以这样做

  defaultConfig { 
    project.ext.set("archivesBaseName", 'yourappname' + "_V" + defaultConfig.versionCode  );

}
你能试试下面吗

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

使用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' ))

    }
}

我希望这能有所帮助。我不能说这是最好的方法,但它是有效的

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)
    }
  }
下面的代码将生成apk文件名为

AppName1.2.0_buildType.apk

试试这个:

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。如注释中所述,正确的方法是使用
${variant.getFlavorName()}.apk
variant.baseName

谢谢,这可能是一个选项,但我也希望在我的apk名称上有自己的风格。希望保持以前的apk名称结构。可能相关:您尝试过
${variant.getFlavorName()}.apk
variant.baseName
?variant.baseName与variant.buildType.name相同,它打印“release”。但是variant.getFlavorName()完成了任务。另外,variant.flavorName也可以工作,但gradle文件的另一部分有点问题,无法工作,现在可以了。谢谢。@GensaGames如果你发布答案,我会很乐意给你答案bounty@axierjhtjz抱歉忙于工作场所更改)很高兴您已经解决了问题)使用
output.o时出现警告提示utputFile
所以你的答案会导致同样的警告。效果很好
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"
    }
}