12

我今天将我的 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

应用程序发布产品 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 以显示堆栈跟踪。受影响的模块:app

问题出在 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

谢谢

4

7 回答 7

14

试试这个:

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。

于 2019-10-15T10:44:29.870 回答
4

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

    }
}
于 2019-10-08T08:46:48.033 回答
2

你可以这样做:

defaultConfig {
    ...

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

}
于 2019-01-15T14:44:21.480 回答
1

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

于 2019-10-16T16:13:41.767 回答
0

你可以试试下面。

applicationVariants.all { variant ->
    variant.outputs.all { output ->
        outputFileName = outputFileName.replace(".apk", "-${variant.versionName}-${variant.versionCode}.apk").replace("-unsigned", "")
    }
}
于 2019-01-29T06:41:35.573 回答
0

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

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)
    }
  }
于 2019-10-14T05:11:10.183 回答
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

于 2019-10-14T08:47:49.980 回答