react-native 异常处理 task’:app:mergeDebugResources’
1、react-native run-android 失败报错task’:app:mergeDebugResources’
2、可能原因:
(1)不同模块之间或者同一个模块的不同目录下存在不同类型的相同名字的资源,res目录下得资源同名,造成资源合并异常。
3、解决办法:
(1)修改图片名称(删除资源,不建议删除)
(2)在项目目录appdd\android\app下的build.gradle文件中添加如下代码:
android{
aaptOptions.cruncherEnabled = false
aaptOptions.useNewCruncher = false
}
然后修改node_modules/react-native/react.gradle脚本,脚本是移动build文件资源到src对应的包里并且覆盖
在currentBundleTask任务添加以下脚本,以下脚是针对渠道包做变更
doLast {
def moveFunc = { resSuffix, flavors ->
File originalDir = file("$buildDir/generated/res/react/${flavors}/release/drawable-${resSuffix}");
println originalDir;
if (originalDir.exists()) {
File destDir = file("$buildDir/../src/main/res/drawable-${resSuffix}");
println destDir;
ant.move(file: originalDir, tofile: destDir);
}
}
moveFunc.curry("ldpi", "m8").call()
moveFunc.curry("mdpi", "m8").call()
moveFunc.curry("hdpi", "m8").call()
moveFunc.curry("xhdpi", "m8").call()
moveFunc.curry("xxhdpi", "m8").call()
moveFunc.curry("xxxhdpi", "m8").call()
moveFunc.curry("ldpi", "yf").call()
moveFunc.curry("mdpi", "yf").call()
moveFunc.curry("hdpi", "yf").call()
moveFunc.curry("xhdpi", "yf").call()
moveFunc.curry("xxhdpi", "yf").call()
moveFunc.curry("xxxhdpi", "yf").call()
}
不存在渠道包直接使用下面脚本
doLast {
def moveFunc = { resSuffix->
File originalDir = file("$buildDir/generated/res/react/release/drawable-${resSuffix}");
println originalDir;
if (originalDir.exists()) {
File destDir = file("$buildDir/../src/main/res/drawable-${resSuffix}");
println destDir;
ant.move(file: originalDir, tofile: destDir);
}
}
moveFunc.curry("ldpi").call()
moveFunc.curry("mdpi").call()
moveFunc.curry("hdpi").call()
moveFunc.curry("xhdpi").call()
moveFunc.curry("xxhdpi").call()
moveFunc.curry("xxxhdpi").call()
}
自动化脚本替换: