美文网首页gradle
gradle-移除assets中的文件

gradle-移除assets中的文件

作者: cain07 | 来源:发表于2021-08-20 16:23 被阅读0次

    1.移除assets中的文件和文件夹

    由于需要给厂商提供一个aar包,里面有一个json文件在assets中,在他们项目中,这个json配置文件会有影响,因此需要指导对方在集成的时候将这个json文件打包时候移除。
    由于delete的是merge之后的assets文件夹内容,因此在aar包中的也同样会受影响,在最后的apk中可以查看添加这项配置之后,该文件被移除了。

    android.applicationVariants.all { variant ->
    //        if (variant.buildType.name == 'release') {//release版本,可以采用多渠道配置
                variant.mergeAssets.doLast {
                    //删除assets文件夹下的所有zip文件,或者指定文件。(删除文件夹:文件夹名/**/*)
                    delete(fileTree(dir: variant.mergeAssets.outputDir, includes: ['A.json','*.zip','dirs/**/*']))
                }
    //        }
        }
    

    2 使用gradle实现资源自动拷贝

    把下面的代码拷贝到module的gradle.build 文件内

    android.applicationVariants.all{ variant ->
        delete "${buildDir}/intermediates/merged_assets/${variant.dirName}"  // buildDir是app下的build目录
        variant.mergeAssets.doLast{
            def sourceDir = "${buildDir}/../"   // 资源存放目录,这里是app下
            print "${buildDir} \n"  // 打印路径
            copy { // 将from目录下的资源拷贝到into 下目录去
                from "${sourceDir}/fromDir"
                into "${outputDir}/res"
            }
        }
    }
    
    image.png

    设置完成后,执行Make Project,

    image

    可以看到在 log看到打印的buildDir路径。

    之后可以在 工程目录 \app\build\intermediates\merged_assets\debug\mergeDebugAssets\out\res 看到文件已经拷贝过去

    image

    3.拷贝代码

    android.applicationVariants.all { variant ->
        // delete previous files first
        delete "${buildDir}/intermediates/merged_assets/${variant.dirName}"
    
        // 复制 Cocos 资源到 Assets 目录中
        variant.mergeAssets.doLast {
            // ....
            copy {
                from "${sourceDir}/res"
                into "${outputDir}/res"
            }
            copy {
                from "${sourceDir}/subpackages"
                into "${outputDir}/subpackages"
            }
            copy {
                from "${sourceDir}/src"
                into "${outputDir}/src"
            }
            copy {
                from "${sourceDir}/jsb-adapter"
                into "${outputDir}/jsb-adapter"
            }
            copy {
                from "${sourceDir}/main.js"
                from "${sourceDir}/project.json"
                into outputDir
            }
        }
        //....
    }
    

    我们更应该用的是 variant.mergeAssets.outputDir 变量去表示 mergeAssets 的输出路径,而不是某个 Hard Code 的字符串。
    修复起来就很简单了,只需要一个很简单的修改就可以修复:

    -- delete "${buildDir}/intermediates/merged_assets/${variant.dirName}"
    ++ delete variant.mergeAssets.outputDir
    

    相关文章

      网友评论

        本文标题:gradle-移除assets中的文件

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