使用mergeAssets对Android的assets文件在构建的时候进行修改处理

需求背景

  • 最近有个需求,在AS中构建APK的时候可以根据配置来决定assets文件夹下面的某个文件是否进行加密,但是这个文件是经常会被修改的,所以必须一致保持明文,且可以随时编辑,只有在build生成apk的时候才需要进行加密

如何实现

  • 这个问题我们解决的最好办法就是写一个gradle脚本来实现了
    /**
     * 在每次构建apk时,对assets下的文件进行加密或其他处理
     */
    android.applicationVariants.all { variant ->
        //def mergeAssetsDir = variant.mergeAssets.outputDir //gradle 4.x版本以下
        def mergeAssetsDir = variant.mergeAssetsProvider.get().outputDir.get() //gradle 5.x版本以上
        def file = new File([mergeAssetsDir, "my_assets_config.txt"].join(File.separator))
        if (file.exists()) file.delete() //每次构建的时候都将需要处理的问题件删除,这样下面的mergeAssets每次才会触发
    
        variant.mergeAssets.doLast {
            if (file.exists()) {
                println("encrpty json")
                //这里可以编写自己的加密脚本,然后将内容重新写入文件
                file.write("我是加密后的内容哦")
            }
        }
    }
  • 脚本其实很简单,就是利用了gradle 的构建变体,在mergeAssets任务执行时加入自己的逻辑处理如果每次构建都需要进行处理,则可以每次都将要处理的文件给删除了,这样可以出发mergeAssets的任务执行

  • mergeAssets 这个task 在不同的gradle版本下是不一样的,gradle5.X以上已经变了,所以你需要根据你gradle的版本来确定合并后的assets目录在哪里,这是gradle4.x以下的build构建目录,assets的相对目录获取方式为:variant.mergeAssets.outputDir

     gradle5.X以上的build构建目录是这样的,assets的相对目录获取方式为:variant.mergeAssetsProvider.get().outputDir.get()

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值