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"
}
}
}

设置完成后,执行Make Project,

可以看到在 log看到打印的buildDir路径。
之后可以在 工程目录 \app\build\intermediates\merged_assets\debug\mergeDebugAssets\out\res 看到文件已经拷贝过去

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
网友评论