美文网首页
Android Gradle3.0以后多渠道打包报错问题解决

Android Gradle3.0以后多渠道打包报错问题解决

作者: Jaesoon | 来源:发表于2019-05-31 11:35 被阅读0次

    从gradle2.x升级到4.x之后,会收到这样一个警告。虽然不影响使用,但是看起来确实挺糟心的。

    WARNING: 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 a stack trace.
    Affected Modules: app

    之前是这样的

    android.applicationVariants.all { variant ->
        if (variant.buildType.name == "sit") {
            variant.outputs.each { output ->
                if (output.outputFile != null && output.outputFile.name.endsWith('.apk')) {
                    def task = project.tasks.create("copyAndRename${variant.name}Apk", Copy)
                    def fileName = output.outputFile.name
                    fileName = fileName.replace("-sit", "")
                    output.outputFile = new File(output.outputFile.parent + '/sit/', fileName)
                    task.doFirst {
                        println "Copying ${fileName}" + " to apk directory..."
                    }
                    task.doLast {
                        println "Done with sit"
                    }
                    task.from(output.outputFile)
                    task.into("deploy-sit")
    
                    task.dependsOn "assemble${variant.name.capitalize()}"
                    doSitTask.dependsOn task
                }
            }
        }
    }
    

    改造之后是这样的

    android.applicationVariants.all { variant ->
        if (variant.buildType.name == "sit") {
            variant.outputs.all {
                outputFileName = outputFileName.replace("-sit", "")
                def task = project.tasks.create("copyAndRename${variant.name}Apk", Copy)
                task.doFirst {
                    println "Copying ${outputFileName}" + " to apk directory..."
                }
                task.doLast {
                    println "Done with sit"
                }
                task.from(variant.getPackageApplicationProvider().get().outputDirectory)
                task.into("deploy-sit")
    
                task.dependsOn "assemble${variant.name.capitalize()}"
                doSitTask.dependsOn task
            }
        }
    }
    

    两个最重要的点:

    • 更换输出安装包名称由设置output.outputFile改成设置outputFileName
    • 将输出apk复制到指定目录,由原来的复制output.outputFile,改成复制variant.getPackageApplicationProvider().get().outputDirectory

    第二点非常重要,这一点是上面警告的根源,更改代码之后,警告就消失了。

    相关文章

      网友评论

          本文标题:Android Gradle3.0以后多渠道打包报错问题解决

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