【问题标题】:Apk rename with the Gradle plugin v4.10.1使用 Gradle 插件 v4.10.1 重命名 Apk
【发布时间】:2019-06-09 08:13:21
【问题描述】:

我今天将我的 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 以显示堆栈跟踪。 受影响的模块:app

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

到目前为止,我已经尝试过这种方法,但没有成功。

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

有什么想法吗?

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

更新

我重新考虑了这个问题,我尝试了以下 sn-p,但我在检索该变体的味道时遇到了问题。

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

谢谢

【问题讨论】:

  • 你试过${variant.getFlavorName()}.apkvariant.baseName吗?
  • variant.baseName 与 variant.buildType.name 相同,打印“release”。但是 variant.getFlavorName() 完成了这项工作。此外, variant.flavorName 也可以工作,但是 gradle 文件的其他部分有一点问题并且没有工作,现在可以了。谢谢。
  • @GensaGames 如果你发布答案,我很乐意给你赏金
  • @axierjhtjz 很抱歉忙于工作场所变动)很高兴您解决了问题)

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    试试这个:

    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。

    【讨论】:

      【解决方案3】:
      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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

            你可以这样做:

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

            【讨论】:

            • 谢谢,可以选择,但我也喜欢我的 apk 名称。想保持以前的 apk 名称结构。
            【解决方案7】:

            你可以试试下面吗。

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-05-23
              • 1970-01-01
              • 1970-01-01
              • 2017-05-31
              • 1970-01-01
              • 2018-04-30
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多