Android gradle task任务打包

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

目录

自定义打包apk的文件名

android {
...
    // 自定义打包apk的文件名
    android.applicationVariants.all { variant ->
        variant.outputs.all { output ->
            if (outputFileName != null && outputFileName.endsWith('.apk')) {
                outputFileName = "${applicationId}" +
                        "_${versionCode}" +
                        "(${versionName})" +
                        "_${variant.buildType.name}" +
                        ".apk"
            }
            //这样指定打包地址会报错
            //def outputFileDir = "${project.projectDir.absolutePath}/${variant.buildType.name}/${variant.flavorName}/${variant.versionName}"
            //variant.getPackageApplicationProvider().get().outputDirectory = new File(outputFileDir)
        }
...
}

主要是修改outputFileName的值

注意只能修改一次

创建任务

task hello {
    println 'Hello world!1111111'
    doLast {
        println 'Hello world!222222'
    }
}

doLast的理解

doLast {}之外的内容无论如何都会执行而且是在configuration阶段执行。而doLast内的内容只会在task名作为参数传入的时候才会执行而且是在execute阶段执行。

task hello1 {
    println 'Hello world!1111111'
    doLast {
        println 'Hello world!222222'
    }
}
task hello2 {
    println 'Hello world!333333'
    doLast {
        println 'Hello world!444444'
    }
}

执行task hello1任务 结果为

Executing tasks: [hello1] 

Hello world!1111111
Hello world!333333
Hello world!222222

打包命令 gradle assemble

正确理解gradle assemble、assembleDebug、assembleRelease

gradle assemble  //仅仅执行项目打包所必须的任务集
gradle build     //执行项目打包所必须的任务集,以及执行自动化测试,所以会较慢

//如果当前Project包含多个Module,在Project根目录执行gradle assemble会编译所有的Module
//编译指定productFlavor及buildType的apk

gradle assemble[productFlavor][buildType]  
//如果缺失某参数,则会把该参数的所有配置都进行编译,即如果运行gradle assembleflavor,
//则会编译出flavor所有buildType的apk

gradle assemble
gradle assembleflavorRelease
gradle assembleflavorDebug
//注意gradle支持命令缩写上面两个命令也可以写成如下格式
$gradle a
$gradle ass
$gradle aR
$gradle assflavorR
$gradle aD
$gradle assflavorD

怎么在通过gradle task执行以上任务

dependsOn表示在自己之前先执行这个方法

    dependsOn 'assembleRelease'

完整代码

task executeAssembleRelease {
    //先执行打包任务
    dependsOn 'assembleRelease'
    //在操作apk包
    doLast {
        android.applicationVariants.all { variant ->
            if ('release'.equalsIgnoreCase(variant.buildType.name)) {
                println '------------------------------>release包'
                // 打包完成后复制到的目录
                def outputFileDir = "${project.projectDir.absolutePath}/${variant.buildType.name}/${variant.flavorName}/"

                //方法1
                variant.assembleProvider.configure {
                    File out = new File(outputFileDir)
                    variant.outputs.forEach { file ->
                        copy {
                            from file.outputFile
                            into out
                        }
                        println '------------------------------>打包完成'
                        println "------------------------------>地址${out}"
                    }
                }
            }
            //方法2 
//            variant.assemble.doLast {
//                File out = new File(outputFileDir)
//                variant.outputs.forEach { file ->
//                    copy {
//                        from file.outputFile
//                        into out
//                    }
//                    println '------------------------------>打包完成'
//                }
//            }
        }
    }
}
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: android