美文网首页
Android Studio 3.5.3升级后的问题:INFO:

Android Studio 3.5.3升级后的问题:INFO:

作者: 全球顶尖伪极客 | 来源:发表于2019-12-12 16:15 被阅读0次

错误一

更新android studio至3.5.3错误提示

更新android studio至3.5.3版本后,在多渠道打包发现错误,因为忙别的事所以是直接从3.3.x升级到3.5.3,错误提示如下:

INFO: API 'variantOutput.getPackageApplication()' is obsolete and has been replaced with 'variant.getPackageApplicationProvider()'.
It will be removed at the end of 2019.
For more information, see https://d.android.com/r/tools/task-configuration-avoidance.
To determine what is calling variantOutput.getPackageApplication(), use -Pandroid.debug.obsoleteApi=true on the command line to display more information.
Affected Modules: wanDa_SGQMS
image.png

build.gradle配置:

if("Jenkins".equals(BuildChannel)){
        android.applicationVariants.all {
            variant ->
                variant.getPackageApplication().outputDirectory = new File(BuildOutputDir)
                variant.outputs.all {
                    output ->
                        if (output.outputFile != null && output.outputFile.name.endsWith('.apk')) {
                            // APK输出文件名规则
                            def releaseApkName = "WDSG_${defaultConfig.versionName}_" + variant.flavorName + "_" + variant.buildType.name + "_" + releaseTime() + "_" + "From"+BuildChannel+".apk"
                            outputFileName = releaseApkName
                        }
                }
        }
    }else{
        android.applicationVariants.all {
            variant ->
                variant.outputs.all {
                    output ->
                        def outputFile = output.outputFile
                        if (outputFile != null && outputFile.name.endsWith('.apk')) {
                            // 输出apk名称为WDSG__pro/dev_version_time.apk
                            def fileName = "WDSG_${variant.productFlavors[0].name}_V${defaultConfig.versionName}_${releaseTime()}.apk"
                            outputFileName = fileName
                        }
                }
        }
    }

根据提示将修改并没有生效如下:

variantOutput.getPackageApplication()
替换成
variant.getPackageApplicationProvider()
发现并没有生效

查阅后得知:

output.outputFile具体实现里应该调用了variantOutput.getPackageApplication() 避开会调用output相关方法.

两个最重要的点:

  • 更换输出安装包名称由设置output.outputFile改成设置outputFileName,或者避免调用output相关的api
  • 将输出apk复制到指定目录,即由原来的复制output.outputFile,改成复制variant.getPackageApplicationProvider().get().outputDirectory
    第二点非常重要,这一点是上面警告的根源,更改代码之后,警告就消失了

更改后的build.gradle配置

if("Jenkins".equals(BuildChannel)){
        android.applicationVariants.all {
            variant ->
                variant.getPackageApplicationProvider().get().outputDirectory = new File(BuildOutputDir)
                def outputFile=variant.getPackageApplicationProvider().get().outputDirectory
                variant.outputs.all {
                    output ->
                        if (outputFile != null && outputFile.name.endsWith('.apk')) {
                            // APK输出文件名规则
                            def releaseApkName = "WDSG_${defaultConfig.versionName}_" + variant.flavorName + "_" + variant.buildType.name + "_" + releaseTime() + "_" + "From"+BuildChannel+".apk"
                            outputFileName = releaseApkName
                        }
                }
        }
    }else{
        android.applicationVariants.all {
            variant ->
                variant.outputs.all {
                    output ->
                        //def outputFile = output.outputFile //重点 ,将该行替换成新的api,如下
                        def outputFile = variant.getPackageApplicationProvider().get().outputDirectory
                        if (outputFile != null && outputFile.name.endsWith('.apk')) {
                            // 输出apk名称为WDSG__pro/dev_version_time.apk
                            def fileName = "WDSG_${variant.productFlavors[0].name}_V${defaultConfig.versionName}_${releaseTime()}.apk"
                            outputFileName = fileName
                        }
                }
        }
    }

错误二

按照以上修改后打包会出现以下错误:

Cause: buildOutput.apkData must not be null

image.png

删除build下面的output目录即可,重要

  • clean project

  • 删除主module下面的build/outputs文件,或者直接删除整个build目录,如果不生效看第三点

  • 后面将打包生成的目录文件也即release文件夹下的output.json删除,重新打包,终于正常。

image.png
image.png

主要更改

  • output.outputFile改成为variant.getPackageApplicationProvider().get().outputDirectory,或者避免调用output相关的api
  • variant.getPackageApplication().outputDirectory,改成为variant.getPackageApplicationProvider().get().outputDirectory

参考文章1
参考文章2

相关文章

网友评论

      本文标题:Android Studio 3.5.3升级后的问题:INFO:

      本文链接:https://www.haomeiwen.com/subject/sbvgvctx.html