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

axi*_*tjz 9 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", "")
    }
}
Run Code Online (Sandbox Code Playgroud)

但是更新后出现了这个错误。

警告: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", "")
    }
}
Run Code Online (Sandbox Code Playgroud)

任何的想法?

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

更新

我在这个问题上重试了,我尝试了以下代码段,但是在检索该变体的样式时遇到了问题。

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
Run Code Online (Sandbox Code Playgroud)

谢谢

小智 12

尝试这个:

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"
    }
}
Run Code Online (Sandbox Code Playgroud)

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