gradle复制文件到你的build文件夹下

接到需求是,复制一个apk到build文件夹的assets文件夹下,我们都知道当我们点击clean的时候,build文件夹就会被清理,而且build文件夹下的assets文件夹并不存在,这个里面会根据application和library不同assets文件夹也会不同,具体看如下分析

application下,build文件夹的assets文件夹名称叫做 merged_assets
library下,build文件夹的assets文件夹名称叫做library_assets
全路径是在build/intermediates下的merged_assets或library_assets

好了,接下来我们需要想,怎么样才能在创建build文件夹之后再执行任务来做复制呢?
根据这篇文章即可

操作task

这里我贴出两种写法,第一种是在application下

// application,注意,要放到你的app下的build.gradle文件里面的android{}下
    android.applicationVariants.all { variant ->
        variant.outputs.each { variantOutput ->
            println("applicationVariants.name=----------------${variant.name}")
            println("applicationVariants.description=----------------${variant.description}")
            println("applicationVariants.mergeAssets=----------------${variant.mergeAssets}")
            println("applicationVariants.name----------------${variant.mergeAssets.name}")

            variant.mergeAssets.doLast {
                println("applicationVariants doLast")
                def fromFile = rootProject.file("plugindemo1").path + "\\src\\main\\assets\\plugindemo1-debug.apk"
                println("applicationVariants fromFile = " + fromFile)
                def intoFile = rootProject.file("app").path + "\\build\\intermediates\\merged_assets\\debug\\out\\"
                println("applicationVariants targetFile = " + intoFile)
                def targetFile = new File(intoFile)
                if(!targetFile.exists()) {
                    targetFile.mkdirs()
                }
                copy {
                    from fromFile
                    into intoFile
                    rename("plugindemo1-debug.apk","plugin.apk")
                    println("applicationVariants copy success")
                }
            }

        }
    }

第二种写到library下就是

// 也是放到你的library下的build.gradle下的android{}里面
    android.libraryVariants.all { variant ->
        variant.outputs.each { variantOutput ->
            def tag = "DL applicationVariants"
            println("${tag}.name=----------------${variant.name}")
            println("${tag}.description=----------------${variant.description}")
            println("${tag}.mergeAssets=----------------${variant.mergeAssets}")
            println("${tag}.name----------------${variant.mergeAssets.name}")

            variant.mergeAssets.doLast {
                println("applicationVariants doLast ${rootProject.path}")
                def fromFile = rootProject.file("plugindemo1").path + "\\src\\main\\assets\\plugindemo1-debug.apk"
                println("${tag} fromFile = " + fromFile)
                def intoFile = rootProject.file("DL").path + "\\build\\intermediates\\library_assets\\debug\\out\\"
                println("${tag} targetFile = " + intoFile)
                def targetFile = new File(intoFile)
                if(!targetFile.exists()) {
                    targetFile.mkdirs()
                }
                copy {
                    from fromFile
                    into intoFile
                    rename("plugindemo1-debug.apk","plugin.apk")
                    println("${tag} copy success")
                }
            }

        }
    }
// gradle执行linux命令
task('deletejustDir') {
    doLast {
        def path = this.rootProject.projectDir.path + '/justDir'
        def command = "rm -r ${path}"
        println("command:" + command)
        exec {
            try {
                executable 'bash'
                args '-c', command
                println("the command is execute success")
            } catch (GradleException e) {
                println("the command is execute failed")
            }

        }
    }
}

参考文档
复制文件
task调用另外一个task
使用tasks.xxxxxxxx.execute()即可
gradle复制图片
gradle基础

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值