美文网首页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