React-native android release error: duplicate resource

Nguyen Loc
1 min readOct 25, 2018
  1. Create file android-gradle-fix:
doLast {
def moveFunc = { resSuffix ->
File originalDir = file("${resourcesDir}/drawable-${resSuffix}")
if (originalDir.exists()) {
File destDir = file("${resourcesDir}/drawable-${resSuffix}-v4")
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()
}

// Set up inputs and outputs so gradle can cache the result

2. Create file android-release-fix.js:

const fs = require('fs')

try {
var curDir = __dirname
var rootDir = process.cwd()

var file = `${rootDir}/node_modules/react-native/react.gradle`
var
dataFix = fs.readFileSync(`${curDir}/android-gradle-fix`, 'utf8')
var data = fs.readFileSync(file, 'utf8')

var doLast = "doLast \{"
if
(data.indexOf(doLast) !== -1) {
throw "Already fixed."
}

var result = data.replace(/\/\/ Set up inputs and outputs so gradle can cache the result/g, dataFix);
fs.writeFileSync(file, result, 'utf8')
console.log('Android Gradle Fixed!')
} catch (error) {
console.error(error)
}

3. Add script to package json:

"postinstall": "node ./fixAndroid/android-release-fix.js"

This will find and insert content of “android-gradle-fix” file into node_modules/react-native/react.gradle.

4. Run npm install.

5. Run rm -rf android/app/src/main/res/drawable-*

6. Then open folder android in Android Studio and build project.

7. Select Build/Generate signed APK to build release.

--

--