React Native : Error: Duplicate resources - Android











up vote
1
down vote

favorite












I was trying to create a release apk file from Android but when I create a release apk with PNG image I'm getting Duplicate Resource error. Initially I thought this is happening because I made a mistake in the existing project but when I created a new project with a single Image component itself I'm getting the Duplicate Resource error. Here are the steps I followed




  1. Create a app - react-native init demo

  2. Create a assets folder in the project root folder.

  3. Add a PNG image inside the assets folder.

  4. Now implement the Image component with the above PNG image.


  5. Now bundle it using the cmd



    react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/



  6. Then generate release apk using Generate Signed APK from Android Studio.



This will throw the following error:



[drawable-mdpi-v4/assets_mario] /Users/jeffreyrajan/Tutorials/RN/errorCheck/android/app/src/main/res/drawable-mdpi/assets_mario.png [drawable-mdpi-v4/assets_mario] /Users/jeffreyrajan/Tutorials/RN/errorCheck/android/app/build/generated/res/react/release/drawable-mdpi-v4/assets_mario.png: Error: Duplicate resources
:app:mergeReleaseResources FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:mergeReleaseResources'.
> [drawable-mdpi-v4/assets_mario] /Users/jeffreyrajan/Tutorials/RN/errorCheck/android/app/src/main/res/drawable-mdpi/assets_mario.png [drawable-mdpi-v4/assets_mario] /Users/jeffreyrajan/Tutorials/RN/errorCheck/android/app/build/generated/res/react/release/drawable-mdpi-v4/assets_mario.png: Error: Duplicate resources

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 22s


Note: When you generate a release apk without any PNG image you will not get any error, it will create you the release apk.



Here are the other files code.



App.js



import React, {Component} from 'react';
import {Platform, StyleSheet, Image, View} from 'react-native';

export default class App extends Component {
render() {
return (
<View style={styles.container}>
<Image source={require('./assets/mario.png')} />
</View>
);
}
}

const styles = StyleSheet.create({
container: {
flex: 1
},
welcome: {
fontSize: 20,
textAlign: 'center',
margin: 10,
},
instructions: {
textAlign: 'center',
color: '#333333',
marginBottom: 5,
},
});


package.json



{
"name": "errorCheck",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node node_modules/react-native/local-cli/cli.js start",
"test": "jest"
},
"dependencies": {
"react": "16.6.0-alpha.8af6728",
"react-native": "0.57.4"
},
"devDependencies": {
"babel-jest": "23.6.0",
"jest": "23.6.0",
"metro-react-native-babel-preset": "0.49.0",
"react-test-renderer": "16.6.0-alpha.8af6728"
},
"jest": {
"preset": "react-native"
}
}


Any solution for this?



Update:



Here are the other details



classpath 'com.android.tools.build:gradle:3.1.4'

ext {
buildToolsVersion = "27.0.3"
minSdkVersion = 16
compileSdkVersion = 27
targetSdkVersion = 26
supportLibVersion = "27.1.1"
}

distributionUrl=https://services.gradle.org/distributions/gradle-4.4-all.zip


Tried with Android Studio 3.0, 3.0.1, 3.1, 3.1.4 & 3.2










share|improve this question
























  • did u run application using react-native run-android ?
    – Lucefer
    Nov 10 at 14:16










  • Yes @Lucefer I don't have any problem to run the app directly using react-native run-android only thing is when I generate the release apk I'm getting the above error
    – Jeffrey Rajan
    Nov 10 at 14:39












  • what is the android studio version you are using?
    – K999
    Nov 10 at 15:31










  • Its Android Studio 3.2.1 @FlorinDobre
    – Jeffrey Rajan
    Nov 10 at 16:31










  • Check my answer from here: stackoverflow.com/a/52767101/1979861 Use Android studio 3.1.4 Android 3.2 has problem at building RN 0.57 projects
    – K999
    Nov 10 at 17:44















up vote
1
down vote

favorite












I was trying to create a release apk file from Android but when I create a release apk with PNG image I'm getting Duplicate Resource error. Initially I thought this is happening because I made a mistake in the existing project but when I created a new project with a single Image component itself I'm getting the Duplicate Resource error. Here are the steps I followed




  1. Create a app - react-native init demo

  2. Create a assets folder in the project root folder.

  3. Add a PNG image inside the assets folder.

  4. Now implement the Image component with the above PNG image.


  5. Now bundle it using the cmd



    react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/



  6. Then generate release apk using Generate Signed APK from Android Studio.



This will throw the following error:



[drawable-mdpi-v4/assets_mario] /Users/jeffreyrajan/Tutorials/RN/errorCheck/android/app/src/main/res/drawable-mdpi/assets_mario.png [drawable-mdpi-v4/assets_mario] /Users/jeffreyrajan/Tutorials/RN/errorCheck/android/app/build/generated/res/react/release/drawable-mdpi-v4/assets_mario.png: Error: Duplicate resources
:app:mergeReleaseResources FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:mergeReleaseResources'.
> [drawable-mdpi-v4/assets_mario] /Users/jeffreyrajan/Tutorials/RN/errorCheck/android/app/src/main/res/drawable-mdpi/assets_mario.png [drawable-mdpi-v4/assets_mario] /Users/jeffreyrajan/Tutorials/RN/errorCheck/android/app/build/generated/res/react/release/drawable-mdpi-v4/assets_mario.png: Error: Duplicate resources

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 22s


Note: When you generate a release apk without any PNG image you will not get any error, it will create you the release apk.



Here are the other files code.



App.js



import React, {Component} from 'react';
import {Platform, StyleSheet, Image, View} from 'react-native';

export default class App extends Component {
render() {
return (
<View style={styles.container}>
<Image source={require('./assets/mario.png')} />
</View>
);
}
}

const styles = StyleSheet.create({
container: {
flex: 1
},
welcome: {
fontSize: 20,
textAlign: 'center',
margin: 10,
},
instructions: {
textAlign: 'center',
color: '#333333',
marginBottom: 5,
},
});


package.json



{
"name": "errorCheck",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node node_modules/react-native/local-cli/cli.js start",
"test": "jest"
},
"dependencies": {
"react": "16.6.0-alpha.8af6728",
"react-native": "0.57.4"
},
"devDependencies": {
"babel-jest": "23.6.0",
"jest": "23.6.0",
"metro-react-native-babel-preset": "0.49.0",
"react-test-renderer": "16.6.0-alpha.8af6728"
},
"jest": {
"preset": "react-native"
}
}


Any solution for this?



Update:



Here are the other details



classpath 'com.android.tools.build:gradle:3.1.4'

ext {
buildToolsVersion = "27.0.3"
minSdkVersion = 16
compileSdkVersion = 27
targetSdkVersion = 26
supportLibVersion = "27.1.1"
}

distributionUrl=https://services.gradle.org/distributions/gradle-4.4-all.zip


Tried with Android Studio 3.0, 3.0.1, 3.1, 3.1.4 & 3.2










share|improve this question
























  • did u run application using react-native run-android ?
    – Lucefer
    Nov 10 at 14:16










  • Yes @Lucefer I don't have any problem to run the app directly using react-native run-android only thing is when I generate the release apk I'm getting the above error
    – Jeffrey Rajan
    Nov 10 at 14:39












  • what is the android studio version you are using?
    – K999
    Nov 10 at 15:31










  • Its Android Studio 3.2.1 @FlorinDobre
    – Jeffrey Rajan
    Nov 10 at 16:31










  • Check my answer from here: stackoverflow.com/a/52767101/1979861 Use Android studio 3.1.4 Android 3.2 has problem at building RN 0.57 projects
    – K999
    Nov 10 at 17:44













up vote
1
down vote

favorite









up vote
1
down vote

favorite











I was trying to create a release apk file from Android but when I create a release apk with PNG image I'm getting Duplicate Resource error. Initially I thought this is happening because I made a mistake in the existing project but when I created a new project with a single Image component itself I'm getting the Duplicate Resource error. Here are the steps I followed




  1. Create a app - react-native init demo

  2. Create a assets folder in the project root folder.

  3. Add a PNG image inside the assets folder.

  4. Now implement the Image component with the above PNG image.


  5. Now bundle it using the cmd



    react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/



  6. Then generate release apk using Generate Signed APK from Android Studio.



This will throw the following error:



[drawable-mdpi-v4/assets_mario] /Users/jeffreyrajan/Tutorials/RN/errorCheck/android/app/src/main/res/drawable-mdpi/assets_mario.png [drawable-mdpi-v4/assets_mario] /Users/jeffreyrajan/Tutorials/RN/errorCheck/android/app/build/generated/res/react/release/drawable-mdpi-v4/assets_mario.png: Error: Duplicate resources
:app:mergeReleaseResources FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:mergeReleaseResources'.
> [drawable-mdpi-v4/assets_mario] /Users/jeffreyrajan/Tutorials/RN/errorCheck/android/app/src/main/res/drawable-mdpi/assets_mario.png [drawable-mdpi-v4/assets_mario] /Users/jeffreyrajan/Tutorials/RN/errorCheck/android/app/build/generated/res/react/release/drawable-mdpi-v4/assets_mario.png: Error: Duplicate resources

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 22s


Note: When you generate a release apk without any PNG image you will not get any error, it will create you the release apk.



Here are the other files code.



App.js



import React, {Component} from 'react';
import {Platform, StyleSheet, Image, View} from 'react-native';

export default class App extends Component {
render() {
return (
<View style={styles.container}>
<Image source={require('./assets/mario.png')} />
</View>
);
}
}

const styles = StyleSheet.create({
container: {
flex: 1
},
welcome: {
fontSize: 20,
textAlign: 'center',
margin: 10,
},
instructions: {
textAlign: 'center',
color: '#333333',
marginBottom: 5,
},
});


package.json



{
"name": "errorCheck",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node node_modules/react-native/local-cli/cli.js start",
"test": "jest"
},
"dependencies": {
"react": "16.6.0-alpha.8af6728",
"react-native": "0.57.4"
},
"devDependencies": {
"babel-jest": "23.6.0",
"jest": "23.6.0",
"metro-react-native-babel-preset": "0.49.0",
"react-test-renderer": "16.6.0-alpha.8af6728"
},
"jest": {
"preset": "react-native"
}
}


Any solution for this?



Update:



Here are the other details



classpath 'com.android.tools.build:gradle:3.1.4'

ext {
buildToolsVersion = "27.0.3"
minSdkVersion = 16
compileSdkVersion = 27
targetSdkVersion = 26
supportLibVersion = "27.1.1"
}

distributionUrl=https://services.gradle.org/distributions/gradle-4.4-all.zip


Tried with Android Studio 3.0, 3.0.1, 3.1, 3.1.4 & 3.2










share|improve this question















I was trying to create a release apk file from Android but when I create a release apk with PNG image I'm getting Duplicate Resource error. Initially I thought this is happening because I made a mistake in the existing project but when I created a new project with a single Image component itself I'm getting the Duplicate Resource error. Here are the steps I followed




  1. Create a app - react-native init demo

  2. Create a assets folder in the project root folder.

  3. Add a PNG image inside the assets folder.

  4. Now implement the Image component with the above PNG image.


  5. Now bundle it using the cmd



    react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/



  6. Then generate release apk using Generate Signed APK from Android Studio.



This will throw the following error:



[drawable-mdpi-v4/assets_mario] /Users/jeffreyrajan/Tutorials/RN/errorCheck/android/app/src/main/res/drawable-mdpi/assets_mario.png [drawable-mdpi-v4/assets_mario] /Users/jeffreyrajan/Tutorials/RN/errorCheck/android/app/build/generated/res/react/release/drawable-mdpi-v4/assets_mario.png: Error: Duplicate resources
:app:mergeReleaseResources FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:mergeReleaseResources'.
> [drawable-mdpi-v4/assets_mario] /Users/jeffreyrajan/Tutorials/RN/errorCheck/android/app/src/main/res/drawable-mdpi/assets_mario.png [drawable-mdpi-v4/assets_mario] /Users/jeffreyrajan/Tutorials/RN/errorCheck/android/app/build/generated/res/react/release/drawable-mdpi-v4/assets_mario.png: Error: Duplicate resources

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 22s


Note: When you generate a release apk without any PNG image you will not get any error, it will create you the release apk.



Here are the other files code.



App.js



import React, {Component} from 'react';
import {Platform, StyleSheet, Image, View} from 'react-native';

export default class App extends Component {
render() {
return (
<View style={styles.container}>
<Image source={require('./assets/mario.png')} />
</View>
);
}
}

const styles = StyleSheet.create({
container: {
flex: 1
},
welcome: {
fontSize: 20,
textAlign: 'center',
margin: 10,
},
instructions: {
textAlign: 'center',
color: '#333333',
marginBottom: 5,
},
});


package.json



{
"name": "errorCheck",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node node_modules/react-native/local-cli/cli.js start",
"test": "jest"
},
"dependencies": {
"react": "16.6.0-alpha.8af6728",
"react-native": "0.57.4"
},
"devDependencies": {
"babel-jest": "23.6.0",
"jest": "23.6.0",
"metro-react-native-babel-preset": "0.49.0",
"react-test-renderer": "16.6.0-alpha.8af6728"
},
"jest": {
"preset": "react-native"
}
}


Any solution for this?



Update:



Here are the other details



classpath 'com.android.tools.build:gradle:3.1.4'

ext {
buildToolsVersion = "27.0.3"
minSdkVersion = 16
compileSdkVersion = 27
targetSdkVersion = 26
supportLibVersion = "27.1.1"
}

distributionUrl=https://services.gradle.org/distributions/gradle-4.4-all.zip


Tried with Android Studio 3.0, 3.0.1, 3.1, 3.1.4 & 3.2







react-native android-gradle react-native-android






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 11 at 6:32

























asked Nov 10 at 13:59









Jeffrey Rajan

1,0971926




1,0971926












  • did u run application using react-native run-android ?
    – Lucefer
    Nov 10 at 14:16










  • Yes @Lucefer I don't have any problem to run the app directly using react-native run-android only thing is when I generate the release apk I'm getting the above error
    – Jeffrey Rajan
    Nov 10 at 14:39












  • what is the android studio version you are using?
    – K999
    Nov 10 at 15:31










  • Its Android Studio 3.2.1 @FlorinDobre
    – Jeffrey Rajan
    Nov 10 at 16:31










  • Check my answer from here: stackoverflow.com/a/52767101/1979861 Use Android studio 3.1.4 Android 3.2 has problem at building RN 0.57 projects
    – K999
    Nov 10 at 17:44


















  • did u run application using react-native run-android ?
    – Lucefer
    Nov 10 at 14:16










  • Yes @Lucefer I don't have any problem to run the app directly using react-native run-android only thing is when I generate the release apk I'm getting the above error
    – Jeffrey Rajan
    Nov 10 at 14:39












  • what is the android studio version you are using?
    – K999
    Nov 10 at 15:31










  • Its Android Studio 3.2.1 @FlorinDobre
    – Jeffrey Rajan
    Nov 10 at 16:31










  • Check my answer from here: stackoverflow.com/a/52767101/1979861 Use Android studio 3.1.4 Android 3.2 has problem at building RN 0.57 projects
    – K999
    Nov 10 at 17:44
















did u run application using react-native run-android ?
– Lucefer
Nov 10 at 14:16




did u run application using react-native run-android ?
– Lucefer
Nov 10 at 14:16












Yes @Lucefer I don't have any problem to run the app directly using react-native run-android only thing is when I generate the release apk I'm getting the above error
– Jeffrey Rajan
Nov 10 at 14:39






Yes @Lucefer I don't have any problem to run the app directly using react-native run-android only thing is when I generate the release apk I'm getting the above error
– Jeffrey Rajan
Nov 10 at 14:39














what is the android studio version you are using?
– K999
Nov 10 at 15:31




what is the android studio version you are using?
– K999
Nov 10 at 15:31












Its Android Studio 3.2.1 @FlorinDobre
– Jeffrey Rajan
Nov 10 at 16:31




Its Android Studio 3.2.1 @FlorinDobre
– Jeffrey Rajan
Nov 10 at 16:31












Check my answer from here: stackoverflow.com/a/52767101/1979861 Use Android studio 3.1.4 Android 3.2 has problem at building RN 0.57 projects
– K999
Nov 10 at 17:44




Check my answer from here: stackoverflow.com/a/52767101/1979861 Use Android studio 3.1.4 Android 3.2 has problem at building RN 0.57 projects
– K999
Nov 10 at 17:44












3 Answers
3






active

oldest

votes

















up vote
4
down vote



accepted










After trying a lot of solutions I found only two solution is working. Here they are



Solution 1:



After bundling delete the drawable folder from Android Studio. You could find this in android/app/src/main/res/drawable



Solution 2:



In this solution you no need to delete any drawable folder. Just add the following code in the react.gradle file which you could find under node_modules/react-native/react.gradle path



doLast {
def moveFunc = { resSuffix ->
File originalDir = file("$buildDir/generated/res/react/release/drawable-${resSuffix}");
if (originalDir.exists()) {
File destDir = file("$buildDir/../src/main/res/drawable-${resSuffix}");
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()
}


For reference I will add the full react.gradle file code here



import org.apache.tools.ant.taskdefs.condition.Os

def config = project.hasProperty("react") ? project.react : ;

def cliPath = config.cliPath ?: "node_modules/react-native/local-cli/cli.js"
def bundleAssetName = config.bundleAssetName ?: "index.android.bundle"
def entryFile = config.entryFile ?: "index.android.js"
def bundleCommand = config.bundleCommand ?: "bundle"
def reactRoot = file(config.root ?: "../../")
def inputExcludes = config.inputExcludes ?: ["android/**", "ios/**"]
def bundleConfig = config.bundleConfig ? "${reactRoot}/${config.bundleConfig}" : null ;


afterEvaluate {
android.applicationVariants.all { def variant ->
// Create variant and target names
def targetName = variant.name.capitalize()
def targetPath = variant.dirName

// React js bundle directories
def jsBundleDir = file("$buildDir/generated/assets/react/${targetPath}")
def resourcesDir = file("$buildDir/generated/res/react/${targetPath}")

def jsBundleFile = file("$jsBundleDir/$bundleAssetName")

// Additional node and packager commandline arguments
def nodeExecutableAndArgs = config.nodeExecutableAndArgs ?: ["node"]
def extraPackagerArgs = config.extraPackagerArgs ?:

def currentBundleTask = tasks.create(
name: "bundle${targetName}JsAndAssets",
type: Exec) {
group = "react"
description = "bundle JS and assets for ${targetName}."

// Create dirs if they are not there (e.g. the "clean" task just ran)
doFirst {
jsBundleDir.deleteDir()
jsBundleDir.mkdirs()
resourcesDir.deleteDir()
resourcesDir.mkdirs()
}

doLast {
def moveFunc = { resSuffix ->
File originalDir = file("$buildDir/generated/res/react/release/drawable-${resSuffix}");
if (originalDir.exists()) {
File destDir = file("$buildDir/../src/main/res/drawable-${resSuffix}");
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
inputs.files fileTree(dir: reactRoot, excludes: inputExcludes)
outputs.dir jsBundleDir
outputs.dir resourcesDir

// Set up the call to the react-native cli
workingDir reactRoot

// Set up dev mode
def devEnabled = !(config."devDisabledIn${targetName}"
|| targetName.toLowerCase().contains("release"))

def extraArgs = extraPackagerArgs;

if (bundleConfig) {
extraArgs = extraArgs.clone()
extraArgs.add("--config");
extraArgs.add(bundleConfig);
}

if (Os.isFamily(Os.FAMILY_WINDOWS)) {
commandLine("cmd", "/c", *nodeExecutableAndArgs, cliPath, bundleCommand, "--platform", "android", "--dev", "${devEnabled}",
"--reset-cache", "--entry-file", entryFile, "--bundle-output", jsBundleFile, "--assets-dest", resourcesDir, *extraArgs)
} else {
commandLine(*nodeExecutableAndArgs, cliPath, bundleCommand, "--platform", "android", "--dev", "${devEnabled}",
"--reset-cache", "--entry-file", entryFile, "--bundle-output", jsBundleFile, "--assets-dest", resourcesDir, *extraArgs)
}

enabled config."bundleIn${targetName}" ||
config."bundleIn${variant.buildType.name.capitalize()}" ?:
targetName.toLowerCase().contains("release")
}

// Expose a minimal interface on the application variant and the task itself:
variant.ext.bundleJsAndAssets = currentBundleTask
currentBundleTask.ext.generatedResFolders = files(resourcesDir).builtBy(currentBundleTask)
currentBundleTask.ext.generatedAssetsFolders = files(jsBundleDir).builtBy(currentBundleTask)

// registerGeneratedResFolders for Android plugin 3.x
if (variant.respondsTo("registerGeneratedResFolders")) {
variant.registerGeneratedResFolders(currentBundleTask.generatedResFolders)
} else {
variant.registerResGeneratingTask(currentBundleTask)
}
variant.mergeResources.dependsOn(currentBundleTask)

// packageApplication for Android plugin 3.x
def packageTask = variant.hasProperty("packageApplication")
? variant.packageApplication
: tasks.findByName("package${targetName}")

def resourcesDirConfigValue = config."resourcesDir${targetName}"
if (resourcesDirConfigValue) {
def currentCopyResTask = tasks.create(
name: "copy${targetName}BundledResources",
type: Copy) {
group = "react"
description = "copy bundled resources into custom location for ${targetName}."

from resourcesDir
into file(resourcesDirConfigValue)

dependsOn(currentBundleTask)

enabled currentBundleTask.enabled


}

packageTask.dependsOn(currentCopyResTask)
}

def currentAssetsCopyTask = tasks.create(
name: "copy${targetName}BundledJs",
type: Copy) {
group = "react"
description = "copy bundled JS into ${targetName}."

if (config."jsBundleDir${targetName}") {
from jsBundleDir
into file(config."jsBundleDir${targetName}")
} else {
into ("$buildDir/intermediates")
into ("assets/${targetPath}") {
from jsBundleDir
}

// Workaround for Android Gradle Plugin 3.2+ new asset directory
into ("merged_assets/${targetPath}/merge${targetName}Assets/out") {
from jsBundleDir
}
}

// mergeAssets must run first, as it clears the intermediates directory
dependsOn(variant.mergeAssets)

enabled currentBundleTask.enabled
}

packageTask.dependsOn(currentAssetsCopyTask)
}
}


Credit:
ZeroCool00
mkchx






share|improve this answer






























    up vote
    0
    down vote













    Use com.android.tools.build:gradle:3.1.4 It should work. RN 0.57 has problem with building in 3.2



    This question is a possible duplicate of:



    React Native Error: Duplicate resources, assets coming in some screens and not coming in others in android release APK



    If it still doesn't work try to use RN 0.57.2, I am using it and creating releases works very well with these deps:



       "dependencies": {
    "react": "16.5.0",
    "react-native": "0.57.2",
    .......
    }

    "devDependencies": {
    "@babel/core": "^7.0.0",
    "@babel/plugin-proposal-class-properties": "^7.0.0",
    "@babel/plugin-proposal-decorators": "^7.0.0",
    "@babel/plugin-proposal-do-expressions": "^7.0.0",
    "@babel/plugin-proposal-export-default-from": "^7.0.0",
    "@babel/plugin-proposal-export-namespace-from": "^7.0.0",
    "@babel/plugin-proposal-function-bind": "^7.0.0",
    "@babel/plugin-proposal-function-sent": "^7.0.0",
    "@babel/plugin-proposal-json-strings": "^7.0.0",
    "@babel/plugin-proposal-logical-assignment-operators": "^7.0.0",
    "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0",
    "@babel/plugin-proposal-numeric-separator": "^7.0.0",
    "@babel/plugin-proposal-object-rest-spread": "^7.0.0",
    "@babel/plugin-proposal-optional-chaining": "^7.0.0",
    "@babel/plugin-proposal-pipeline-operator": "^7.0.0",
    "@babel/plugin-proposal-throw-expressions": "^7.0.0",
    "@babel/plugin-syntax-dynamic-import": "^7.0.0",
    "@babel/plugin-syntax-import-meta": "^7.0.0",
    "@babel/plugin-syntax-object-rest-spread": "^7.0.0",
    "@babel/plugin-transform-runtime": "^7.0.0",
    "@babel/preset-env": "^7.0.0",
    "@babel/preset-flow": "^7.0.0",
    "@babel/register": "^7.0.0",
    "babel-core": "^7.0.0-bridge.0",
    "babel-preset-react-native-stage-0": "^1.0.1",
    .....
    }


    Gradle deps:



    classpath 'com.android.tools.build:gradle:3.1.4'
    classpath "io.realm:realm-gradle-plugin:4.0.0"


    App gradle



    compileSdkVersion 27
    buildToolsVersion "27.0.3"

    defaultConfig {
    applicationId "de.burda.buntede"
    minSdkVersion 17
    targetSdkVersion 27


    Gradle wrapper props:



    distributionUrl=https://services.gradle.org/distributions/gradle-4.4-all.zip






    share|improve this answer























    • I tried with Android Studio 3.1 still I'm getting the same problem. Also this is not the duplicate question. I have updated my question with additional details as well.
      – Jeffrey Rajan
      Nov 11 at 5:57




















    up vote
    -3
    down vote













    I encountered the same problem after using 0.57.7,
    Look at the node_modules/react-native/react.gradle file,
    The resource output directory is $buildDir/generated/res/react/${targetPath} .
    Look at the address from the log as app/build/generated/res/react/release,



    Command
    React-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src /main/res/



    The resource output directory is
    android/app/src/main/res/



    The problem is here.



    I solved this:




    1. Delete duplicate files in android/app/res
      (If your resources are imported from React Native, you can directly delete the directory under res).


    2. Delete the App/build folder.


    3. Will react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/ App/src/main/res/



    change into
    react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle



    No longer specify --assets-dest
    Run command




    1. Use Android Studio's Generate Signed APK to package properly.


    the above






    share|improve this answer










    New contributor




    lxmy2012 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
    Check out our Code of Conduct.


















    • You shoudn’t use any language other than English here.
      – Anh Pham
      2 days ago











    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53239705%2freact-native-error-duplicate-resources-android%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    3 Answers
    3






    active

    oldest

    votes








    3 Answers
    3






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    4
    down vote



    accepted










    After trying a lot of solutions I found only two solution is working. Here they are



    Solution 1:



    After bundling delete the drawable folder from Android Studio. You could find this in android/app/src/main/res/drawable



    Solution 2:



    In this solution you no need to delete any drawable folder. Just add the following code in the react.gradle file which you could find under node_modules/react-native/react.gradle path



    doLast {
    def moveFunc = { resSuffix ->
    File originalDir = file("$buildDir/generated/res/react/release/drawable-${resSuffix}");
    if (originalDir.exists()) {
    File destDir = file("$buildDir/../src/main/res/drawable-${resSuffix}");
    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()
    }


    For reference I will add the full react.gradle file code here



    import org.apache.tools.ant.taskdefs.condition.Os

    def config = project.hasProperty("react") ? project.react : ;

    def cliPath = config.cliPath ?: "node_modules/react-native/local-cli/cli.js"
    def bundleAssetName = config.bundleAssetName ?: "index.android.bundle"
    def entryFile = config.entryFile ?: "index.android.js"
    def bundleCommand = config.bundleCommand ?: "bundle"
    def reactRoot = file(config.root ?: "../../")
    def inputExcludes = config.inputExcludes ?: ["android/**", "ios/**"]
    def bundleConfig = config.bundleConfig ? "${reactRoot}/${config.bundleConfig}" : null ;


    afterEvaluate {
    android.applicationVariants.all { def variant ->
    // Create variant and target names
    def targetName = variant.name.capitalize()
    def targetPath = variant.dirName

    // React js bundle directories
    def jsBundleDir = file("$buildDir/generated/assets/react/${targetPath}")
    def resourcesDir = file("$buildDir/generated/res/react/${targetPath}")

    def jsBundleFile = file("$jsBundleDir/$bundleAssetName")

    // Additional node and packager commandline arguments
    def nodeExecutableAndArgs = config.nodeExecutableAndArgs ?: ["node"]
    def extraPackagerArgs = config.extraPackagerArgs ?:

    def currentBundleTask = tasks.create(
    name: "bundle${targetName}JsAndAssets",
    type: Exec) {
    group = "react"
    description = "bundle JS and assets for ${targetName}."

    // Create dirs if they are not there (e.g. the "clean" task just ran)
    doFirst {
    jsBundleDir.deleteDir()
    jsBundleDir.mkdirs()
    resourcesDir.deleteDir()
    resourcesDir.mkdirs()
    }

    doLast {
    def moveFunc = { resSuffix ->
    File originalDir = file("$buildDir/generated/res/react/release/drawable-${resSuffix}");
    if (originalDir.exists()) {
    File destDir = file("$buildDir/../src/main/res/drawable-${resSuffix}");
    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
    inputs.files fileTree(dir: reactRoot, excludes: inputExcludes)
    outputs.dir jsBundleDir
    outputs.dir resourcesDir

    // Set up the call to the react-native cli
    workingDir reactRoot

    // Set up dev mode
    def devEnabled = !(config."devDisabledIn${targetName}"
    || targetName.toLowerCase().contains("release"))

    def extraArgs = extraPackagerArgs;

    if (bundleConfig) {
    extraArgs = extraArgs.clone()
    extraArgs.add("--config");
    extraArgs.add(bundleConfig);
    }

    if (Os.isFamily(Os.FAMILY_WINDOWS)) {
    commandLine("cmd", "/c", *nodeExecutableAndArgs, cliPath, bundleCommand, "--platform", "android", "--dev", "${devEnabled}",
    "--reset-cache", "--entry-file", entryFile, "--bundle-output", jsBundleFile, "--assets-dest", resourcesDir, *extraArgs)
    } else {
    commandLine(*nodeExecutableAndArgs, cliPath, bundleCommand, "--platform", "android", "--dev", "${devEnabled}",
    "--reset-cache", "--entry-file", entryFile, "--bundle-output", jsBundleFile, "--assets-dest", resourcesDir, *extraArgs)
    }

    enabled config."bundleIn${targetName}" ||
    config."bundleIn${variant.buildType.name.capitalize()}" ?:
    targetName.toLowerCase().contains("release")
    }

    // Expose a minimal interface on the application variant and the task itself:
    variant.ext.bundleJsAndAssets = currentBundleTask
    currentBundleTask.ext.generatedResFolders = files(resourcesDir).builtBy(currentBundleTask)
    currentBundleTask.ext.generatedAssetsFolders = files(jsBundleDir).builtBy(currentBundleTask)

    // registerGeneratedResFolders for Android plugin 3.x
    if (variant.respondsTo("registerGeneratedResFolders")) {
    variant.registerGeneratedResFolders(currentBundleTask.generatedResFolders)
    } else {
    variant.registerResGeneratingTask(currentBundleTask)
    }
    variant.mergeResources.dependsOn(currentBundleTask)

    // packageApplication for Android plugin 3.x
    def packageTask = variant.hasProperty("packageApplication")
    ? variant.packageApplication
    : tasks.findByName("package${targetName}")

    def resourcesDirConfigValue = config."resourcesDir${targetName}"
    if (resourcesDirConfigValue) {
    def currentCopyResTask = tasks.create(
    name: "copy${targetName}BundledResources",
    type: Copy) {
    group = "react"
    description = "copy bundled resources into custom location for ${targetName}."

    from resourcesDir
    into file(resourcesDirConfigValue)

    dependsOn(currentBundleTask)

    enabled currentBundleTask.enabled


    }

    packageTask.dependsOn(currentCopyResTask)
    }

    def currentAssetsCopyTask = tasks.create(
    name: "copy${targetName}BundledJs",
    type: Copy) {
    group = "react"
    description = "copy bundled JS into ${targetName}."

    if (config."jsBundleDir${targetName}") {
    from jsBundleDir
    into file(config."jsBundleDir${targetName}")
    } else {
    into ("$buildDir/intermediates")
    into ("assets/${targetPath}") {
    from jsBundleDir
    }

    // Workaround for Android Gradle Plugin 3.2+ new asset directory
    into ("merged_assets/${targetPath}/merge${targetName}Assets/out") {
    from jsBundleDir
    }
    }

    // mergeAssets must run first, as it clears the intermediates directory
    dependsOn(variant.mergeAssets)

    enabled currentBundleTask.enabled
    }

    packageTask.dependsOn(currentAssetsCopyTask)
    }
    }


    Credit:
    ZeroCool00
    mkchx






    share|improve this answer



























      up vote
      4
      down vote



      accepted










      After trying a lot of solutions I found only two solution is working. Here they are



      Solution 1:



      After bundling delete the drawable folder from Android Studio. You could find this in android/app/src/main/res/drawable



      Solution 2:



      In this solution you no need to delete any drawable folder. Just add the following code in the react.gradle file which you could find under node_modules/react-native/react.gradle path



      doLast {
      def moveFunc = { resSuffix ->
      File originalDir = file("$buildDir/generated/res/react/release/drawable-${resSuffix}");
      if (originalDir.exists()) {
      File destDir = file("$buildDir/../src/main/res/drawable-${resSuffix}");
      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()
      }


      For reference I will add the full react.gradle file code here



      import org.apache.tools.ant.taskdefs.condition.Os

      def config = project.hasProperty("react") ? project.react : ;

      def cliPath = config.cliPath ?: "node_modules/react-native/local-cli/cli.js"
      def bundleAssetName = config.bundleAssetName ?: "index.android.bundle"
      def entryFile = config.entryFile ?: "index.android.js"
      def bundleCommand = config.bundleCommand ?: "bundle"
      def reactRoot = file(config.root ?: "../../")
      def inputExcludes = config.inputExcludes ?: ["android/**", "ios/**"]
      def bundleConfig = config.bundleConfig ? "${reactRoot}/${config.bundleConfig}" : null ;


      afterEvaluate {
      android.applicationVariants.all { def variant ->
      // Create variant and target names
      def targetName = variant.name.capitalize()
      def targetPath = variant.dirName

      // React js bundle directories
      def jsBundleDir = file("$buildDir/generated/assets/react/${targetPath}")
      def resourcesDir = file("$buildDir/generated/res/react/${targetPath}")

      def jsBundleFile = file("$jsBundleDir/$bundleAssetName")

      // Additional node and packager commandline arguments
      def nodeExecutableAndArgs = config.nodeExecutableAndArgs ?: ["node"]
      def extraPackagerArgs = config.extraPackagerArgs ?:

      def currentBundleTask = tasks.create(
      name: "bundle${targetName}JsAndAssets",
      type: Exec) {
      group = "react"
      description = "bundle JS and assets for ${targetName}."

      // Create dirs if they are not there (e.g. the "clean" task just ran)
      doFirst {
      jsBundleDir.deleteDir()
      jsBundleDir.mkdirs()
      resourcesDir.deleteDir()
      resourcesDir.mkdirs()
      }

      doLast {
      def moveFunc = { resSuffix ->
      File originalDir = file("$buildDir/generated/res/react/release/drawable-${resSuffix}");
      if (originalDir.exists()) {
      File destDir = file("$buildDir/../src/main/res/drawable-${resSuffix}");
      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
      inputs.files fileTree(dir: reactRoot, excludes: inputExcludes)
      outputs.dir jsBundleDir
      outputs.dir resourcesDir

      // Set up the call to the react-native cli
      workingDir reactRoot

      // Set up dev mode
      def devEnabled = !(config."devDisabledIn${targetName}"
      || targetName.toLowerCase().contains("release"))

      def extraArgs = extraPackagerArgs;

      if (bundleConfig) {
      extraArgs = extraArgs.clone()
      extraArgs.add("--config");
      extraArgs.add(bundleConfig);
      }

      if (Os.isFamily(Os.FAMILY_WINDOWS)) {
      commandLine("cmd", "/c", *nodeExecutableAndArgs, cliPath, bundleCommand, "--platform", "android", "--dev", "${devEnabled}",
      "--reset-cache", "--entry-file", entryFile, "--bundle-output", jsBundleFile, "--assets-dest", resourcesDir, *extraArgs)
      } else {
      commandLine(*nodeExecutableAndArgs, cliPath, bundleCommand, "--platform", "android", "--dev", "${devEnabled}",
      "--reset-cache", "--entry-file", entryFile, "--bundle-output", jsBundleFile, "--assets-dest", resourcesDir, *extraArgs)
      }

      enabled config."bundleIn${targetName}" ||
      config."bundleIn${variant.buildType.name.capitalize()}" ?:
      targetName.toLowerCase().contains("release")
      }

      // Expose a minimal interface on the application variant and the task itself:
      variant.ext.bundleJsAndAssets = currentBundleTask
      currentBundleTask.ext.generatedResFolders = files(resourcesDir).builtBy(currentBundleTask)
      currentBundleTask.ext.generatedAssetsFolders = files(jsBundleDir).builtBy(currentBundleTask)

      // registerGeneratedResFolders for Android plugin 3.x
      if (variant.respondsTo("registerGeneratedResFolders")) {
      variant.registerGeneratedResFolders(currentBundleTask.generatedResFolders)
      } else {
      variant.registerResGeneratingTask(currentBundleTask)
      }
      variant.mergeResources.dependsOn(currentBundleTask)

      // packageApplication for Android plugin 3.x
      def packageTask = variant.hasProperty("packageApplication")
      ? variant.packageApplication
      : tasks.findByName("package${targetName}")

      def resourcesDirConfigValue = config."resourcesDir${targetName}"
      if (resourcesDirConfigValue) {
      def currentCopyResTask = tasks.create(
      name: "copy${targetName}BundledResources",
      type: Copy) {
      group = "react"
      description = "copy bundled resources into custom location for ${targetName}."

      from resourcesDir
      into file(resourcesDirConfigValue)

      dependsOn(currentBundleTask)

      enabled currentBundleTask.enabled


      }

      packageTask.dependsOn(currentCopyResTask)
      }

      def currentAssetsCopyTask = tasks.create(
      name: "copy${targetName}BundledJs",
      type: Copy) {
      group = "react"
      description = "copy bundled JS into ${targetName}."

      if (config."jsBundleDir${targetName}") {
      from jsBundleDir
      into file(config."jsBundleDir${targetName}")
      } else {
      into ("$buildDir/intermediates")
      into ("assets/${targetPath}") {
      from jsBundleDir
      }

      // Workaround for Android Gradle Plugin 3.2+ new asset directory
      into ("merged_assets/${targetPath}/merge${targetName}Assets/out") {
      from jsBundleDir
      }
      }

      // mergeAssets must run first, as it clears the intermediates directory
      dependsOn(variant.mergeAssets)

      enabled currentBundleTask.enabled
      }

      packageTask.dependsOn(currentAssetsCopyTask)
      }
      }


      Credit:
      ZeroCool00
      mkchx






      share|improve this answer

























        up vote
        4
        down vote



        accepted







        up vote
        4
        down vote



        accepted






        After trying a lot of solutions I found only two solution is working. Here they are



        Solution 1:



        After bundling delete the drawable folder from Android Studio. You could find this in android/app/src/main/res/drawable



        Solution 2:



        In this solution you no need to delete any drawable folder. Just add the following code in the react.gradle file which you could find under node_modules/react-native/react.gradle path



        doLast {
        def moveFunc = { resSuffix ->
        File originalDir = file("$buildDir/generated/res/react/release/drawable-${resSuffix}");
        if (originalDir.exists()) {
        File destDir = file("$buildDir/../src/main/res/drawable-${resSuffix}");
        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()
        }


        For reference I will add the full react.gradle file code here



        import org.apache.tools.ant.taskdefs.condition.Os

        def config = project.hasProperty("react") ? project.react : ;

        def cliPath = config.cliPath ?: "node_modules/react-native/local-cli/cli.js"
        def bundleAssetName = config.bundleAssetName ?: "index.android.bundle"
        def entryFile = config.entryFile ?: "index.android.js"
        def bundleCommand = config.bundleCommand ?: "bundle"
        def reactRoot = file(config.root ?: "../../")
        def inputExcludes = config.inputExcludes ?: ["android/**", "ios/**"]
        def bundleConfig = config.bundleConfig ? "${reactRoot}/${config.bundleConfig}" : null ;


        afterEvaluate {
        android.applicationVariants.all { def variant ->
        // Create variant and target names
        def targetName = variant.name.capitalize()
        def targetPath = variant.dirName

        // React js bundle directories
        def jsBundleDir = file("$buildDir/generated/assets/react/${targetPath}")
        def resourcesDir = file("$buildDir/generated/res/react/${targetPath}")

        def jsBundleFile = file("$jsBundleDir/$bundleAssetName")

        // Additional node and packager commandline arguments
        def nodeExecutableAndArgs = config.nodeExecutableAndArgs ?: ["node"]
        def extraPackagerArgs = config.extraPackagerArgs ?:

        def currentBundleTask = tasks.create(
        name: "bundle${targetName}JsAndAssets",
        type: Exec) {
        group = "react"
        description = "bundle JS and assets for ${targetName}."

        // Create dirs if they are not there (e.g. the "clean" task just ran)
        doFirst {
        jsBundleDir.deleteDir()
        jsBundleDir.mkdirs()
        resourcesDir.deleteDir()
        resourcesDir.mkdirs()
        }

        doLast {
        def moveFunc = { resSuffix ->
        File originalDir = file("$buildDir/generated/res/react/release/drawable-${resSuffix}");
        if (originalDir.exists()) {
        File destDir = file("$buildDir/../src/main/res/drawable-${resSuffix}");
        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
        inputs.files fileTree(dir: reactRoot, excludes: inputExcludes)
        outputs.dir jsBundleDir
        outputs.dir resourcesDir

        // Set up the call to the react-native cli
        workingDir reactRoot

        // Set up dev mode
        def devEnabled = !(config."devDisabledIn${targetName}"
        || targetName.toLowerCase().contains("release"))

        def extraArgs = extraPackagerArgs;

        if (bundleConfig) {
        extraArgs = extraArgs.clone()
        extraArgs.add("--config");
        extraArgs.add(bundleConfig);
        }

        if (Os.isFamily(Os.FAMILY_WINDOWS)) {
        commandLine("cmd", "/c", *nodeExecutableAndArgs, cliPath, bundleCommand, "--platform", "android", "--dev", "${devEnabled}",
        "--reset-cache", "--entry-file", entryFile, "--bundle-output", jsBundleFile, "--assets-dest", resourcesDir, *extraArgs)
        } else {
        commandLine(*nodeExecutableAndArgs, cliPath, bundleCommand, "--platform", "android", "--dev", "${devEnabled}",
        "--reset-cache", "--entry-file", entryFile, "--bundle-output", jsBundleFile, "--assets-dest", resourcesDir, *extraArgs)
        }

        enabled config."bundleIn${targetName}" ||
        config."bundleIn${variant.buildType.name.capitalize()}" ?:
        targetName.toLowerCase().contains("release")
        }

        // Expose a minimal interface on the application variant and the task itself:
        variant.ext.bundleJsAndAssets = currentBundleTask
        currentBundleTask.ext.generatedResFolders = files(resourcesDir).builtBy(currentBundleTask)
        currentBundleTask.ext.generatedAssetsFolders = files(jsBundleDir).builtBy(currentBundleTask)

        // registerGeneratedResFolders for Android plugin 3.x
        if (variant.respondsTo("registerGeneratedResFolders")) {
        variant.registerGeneratedResFolders(currentBundleTask.generatedResFolders)
        } else {
        variant.registerResGeneratingTask(currentBundleTask)
        }
        variant.mergeResources.dependsOn(currentBundleTask)

        // packageApplication for Android plugin 3.x
        def packageTask = variant.hasProperty("packageApplication")
        ? variant.packageApplication
        : tasks.findByName("package${targetName}")

        def resourcesDirConfigValue = config."resourcesDir${targetName}"
        if (resourcesDirConfigValue) {
        def currentCopyResTask = tasks.create(
        name: "copy${targetName}BundledResources",
        type: Copy) {
        group = "react"
        description = "copy bundled resources into custom location for ${targetName}."

        from resourcesDir
        into file(resourcesDirConfigValue)

        dependsOn(currentBundleTask)

        enabled currentBundleTask.enabled


        }

        packageTask.dependsOn(currentCopyResTask)
        }

        def currentAssetsCopyTask = tasks.create(
        name: "copy${targetName}BundledJs",
        type: Copy) {
        group = "react"
        description = "copy bundled JS into ${targetName}."

        if (config."jsBundleDir${targetName}") {
        from jsBundleDir
        into file(config."jsBundleDir${targetName}")
        } else {
        into ("$buildDir/intermediates")
        into ("assets/${targetPath}") {
        from jsBundleDir
        }

        // Workaround for Android Gradle Plugin 3.2+ new asset directory
        into ("merged_assets/${targetPath}/merge${targetName}Assets/out") {
        from jsBundleDir
        }
        }

        // mergeAssets must run first, as it clears the intermediates directory
        dependsOn(variant.mergeAssets)

        enabled currentBundleTask.enabled
        }

        packageTask.dependsOn(currentAssetsCopyTask)
        }
        }


        Credit:
        ZeroCool00
        mkchx






        share|improve this answer














        After trying a lot of solutions I found only two solution is working. Here they are



        Solution 1:



        After bundling delete the drawable folder from Android Studio. You could find this in android/app/src/main/res/drawable



        Solution 2:



        In this solution you no need to delete any drawable folder. Just add the following code in the react.gradle file which you could find under node_modules/react-native/react.gradle path



        doLast {
        def moveFunc = { resSuffix ->
        File originalDir = file("$buildDir/generated/res/react/release/drawable-${resSuffix}");
        if (originalDir.exists()) {
        File destDir = file("$buildDir/../src/main/res/drawable-${resSuffix}");
        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()
        }


        For reference I will add the full react.gradle file code here



        import org.apache.tools.ant.taskdefs.condition.Os

        def config = project.hasProperty("react") ? project.react : ;

        def cliPath = config.cliPath ?: "node_modules/react-native/local-cli/cli.js"
        def bundleAssetName = config.bundleAssetName ?: "index.android.bundle"
        def entryFile = config.entryFile ?: "index.android.js"
        def bundleCommand = config.bundleCommand ?: "bundle"
        def reactRoot = file(config.root ?: "../../")
        def inputExcludes = config.inputExcludes ?: ["android/**", "ios/**"]
        def bundleConfig = config.bundleConfig ? "${reactRoot}/${config.bundleConfig}" : null ;


        afterEvaluate {
        android.applicationVariants.all { def variant ->
        // Create variant and target names
        def targetName = variant.name.capitalize()
        def targetPath = variant.dirName

        // React js bundle directories
        def jsBundleDir = file("$buildDir/generated/assets/react/${targetPath}")
        def resourcesDir = file("$buildDir/generated/res/react/${targetPath}")

        def jsBundleFile = file("$jsBundleDir/$bundleAssetName")

        // Additional node and packager commandline arguments
        def nodeExecutableAndArgs = config.nodeExecutableAndArgs ?: ["node"]
        def extraPackagerArgs = config.extraPackagerArgs ?:

        def currentBundleTask = tasks.create(
        name: "bundle${targetName}JsAndAssets",
        type: Exec) {
        group = "react"
        description = "bundle JS and assets for ${targetName}."

        // Create dirs if they are not there (e.g. the "clean" task just ran)
        doFirst {
        jsBundleDir.deleteDir()
        jsBundleDir.mkdirs()
        resourcesDir.deleteDir()
        resourcesDir.mkdirs()
        }

        doLast {
        def moveFunc = { resSuffix ->
        File originalDir = file("$buildDir/generated/res/react/release/drawable-${resSuffix}");
        if (originalDir.exists()) {
        File destDir = file("$buildDir/../src/main/res/drawable-${resSuffix}");
        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
        inputs.files fileTree(dir: reactRoot, excludes: inputExcludes)
        outputs.dir jsBundleDir
        outputs.dir resourcesDir

        // Set up the call to the react-native cli
        workingDir reactRoot

        // Set up dev mode
        def devEnabled = !(config."devDisabledIn${targetName}"
        || targetName.toLowerCase().contains("release"))

        def extraArgs = extraPackagerArgs;

        if (bundleConfig) {
        extraArgs = extraArgs.clone()
        extraArgs.add("--config");
        extraArgs.add(bundleConfig);
        }

        if (Os.isFamily(Os.FAMILY_WINDOWS)) {
        commandLine("cmd", "/c", *nodeExecutableAndArgs, cliPath, bundleCommand, "--platform", "android", "--dev", "${devEnabled}",
        "--reset-cache", "--entry-file", entryFile, "--bundle-output", jsBundleFile, "--assets-dest", resourcesDir, *extraArgs)
        } else {
        commandLine(*nodeExecutableAndArgs, cliPath, bundleCommand, "--platform", "android", "--dev", "${devEnabled}",
        "--reset-cache", "--entry-file", entryFile, "--bundle-output", jsBundleFile, "--assets-dest", resourcesDir, *extraArgs)
        }

        enabled config."bundleIn${targetName}" ||
        config."bundleIn${variant.buildType.name.capitalize()}" ?:
        targetName.toLowerCase().contains("release")
        }

        // Expose a minimal interface on the application variant and the task itself:
        variant.ext.bundleJsAndAssets = currentBundleTask
        currentBundleTask.ext.generatedResFolders = files(resourcesDir).builtBy(currentBundleTask)
        currentBundleTask.ext.generatedAssetsFolders = files(jsBundleDir).builtBy(currentBundleTask)

        // registerGeneratedResFolders for Android plugin 3.x
        if (variant.respondsTo("registerGeneratedResFolders")) {
        variant.registerGeneratedResFolders(currentBundleTask.generatedResFolders)
        } else {
        variant.registerResGeneratingTask(currentBundleTask)
        }
        variant.mergeResources.dependsOn(currentBundleTask)

        // packageApplication for Android plugin 3.x
        def packageTask = variant.hasProperty("packageApplication")
        ? variant.packageApplication
        : tasks.findByName("package${targetName}")

        def resourcesDirConfigValue = config."resourcesDir${targetName}"
        if (resourcesDirConfigValue) {
        def currentCopyResTask = tasks.create(
        name: "copy${targetName}BundledResources",
        type: Copy) {
        group = "react"
        description = "copy bundled resources into custom location for ${targetName}."

        from resourcesDir
        into file(resourcesDirConfigValue)

        dependsOn(currentBundleTask)

        enabled currentBundleTask.enabled


        }

        packageTask.dependsOn(currentCopyResTask)
        }

        def currentAssetsCopyTask = tasks.create(
        name: "copy${targetName}BundledJs",
        type: Copy) {
        group = "react"
        description = "copy bundled JS into ${targetName}."

        if (config."jsBundleDir${targetName}") {
        from jsBundleDir
        into file(config."jsBundleDir${targetName}")
        } else {
        into ("$buildDir/intermediates")
        into ("assets/${targetPath}") {
        from jsBundleDir
        }

        // Workaround for Android Gradle Plugin 3.2+ new asset directory
        into ("merged_assets/${targetPath}/merge${targetName}Assets/out") {
        from jsBundleDir
        }
        }

        // mergeAssets must run first, as it clears the intermediates directory
        dependsOn(variant.mergeAssets)

        enabled currentBundleTask.enabled
        }

        packageTask.dependsOn(currentAssetsCopyTask)
        }
        }


        Credit:
        ZeroCool00
        mkchx







        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Nov 12 at 14:53

























        answered Nov 12 at 10:46









        Jeffrey Rajan

        1,0971926




        1,0971926
























            up vote
            0
            down vote













            Use com.android.tools.build:gradle:3.1.4 It should work. RN 0.57 has problem with building in 3.2



            This question is a possible duplicate of:



            React Native Error: Duplicate resources, assets coming in some screens and not coming in others in android release APK



            If it still doesn't work try to use RN 0.57.2, I am using it and creating releases works very well with these deps:



               "dependencies": {
            "react": "16.5.0",
            "react-native": "0.57.2",
            .......
            }

            "devDependencies": {
            "@babel/core": "^7.0.0",
            "@babel/plugin-proposal-class-properties": "^7.0.0",
            "@babel/plugin-proposal-decorators": "^7.0.0",
            "@babel/plugin-proposal-do-expressions": "^7.0.0",
            "@babel/plugin-proposal-export-default-from": "^7.0.0",
            "@babel/plugin-proposal-export-namespace-from": "^7.0.0",
            "@babel/plugin-proposal-function-bind": "^7.0.0",
            "@babel/plugin-proposal-function-sent": "^7.0.0",
            "@babel/plugin-proposal-json-strings": "^7.0.0",
            "@babel/plugin-proposal-logical-assignment-operators": "^7.0.0",
            "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0",
            "@babel/plugin-proposal-numeric-separator": "^7.0.0",
            "@babel/plugin-proposal-object-rest-spread": "^7.0.0",
            "@babel/plugin-proposal-optional-chaining": "^7.0.0",
            "@babel/plugin-proposal-pipeline-operator": "^7.0.0",
            "@babel/plugin-proposal-throw-expressions": "^7.0.0",
            "@babel/plugin-syntax-dynamic-import": "^7.0.0",
            "@babel/plugin-syntax-import-meta": "^7.0.0",
            "@babel/plugin-syntax-object-rest-spread": "^7.0.0",
            "@babel/plugin-transform-runtime": "^7.0.0",
            "@babel/preset-env": "^7.0.0",
            "@babel/preset-flow": "^7.0.0",
            "@babel/register": "^7.0.0",
            "babel-core": "^7.0.0-bridge.0",
            "babel-preset-react-native-stage-0": "^1.0.1",
            .....
            }


            Gradle deps:



            classpath 'com.android.tools.build:gradle:3.1.4'
            classpath "io.realm:realm-gradle-plugin:4.0.0"


            App gradle



            compileSdkVersion 27
            buildToolsVersion "27.0.3"

            defaultConfig {
            applicationId "de.burda.buntede"
            minSdkVersion 17
            targetSdkVersion 27


            Gradle wrapper props:



            distributionUrl=https://services.gradle.org/distributions/gradle-4.4-all.zip






            share|improve this answer























            • I tried with Android Studio 3.1 still I'm getting the same problem. Also this is not the duplicate question. I have updated my question with additional details as well.
              – Jeffrey Rajan
              Nov 11 at 5:57

















            up vote
            0
            down vote













            Use com.android.tools.build:gradle:3.1.4 It should work. RN 0.57 has problem with building in 3.2



            This question is a possible duplicate of:



            React Native Error: Duplicate resources, assets coming in some screens and not coming in others in android release APK



            If it still doesn't work try to use RN 0.57.2, I am using it and creating releases works very well with these deps:



               "dependencies": {
            "react": "16.5.0",
            "react-native": "0.57.2",
            .......
            }

            "devDependencies": {
            "@babel/core": "^7.0.0",
            "@babel/plugin-proposal-class-properties": "^7.0.0",
            "@babel/plugin-proposal-decorators": "^7.0.0",
            "@babel/plugin-proposal-do-expressions": "^7.0.0",
            "@babel/plugin-proposal-export-default-from": "^7.0.0",
            "@babel/plugin-proposal-export-namespace-from": "^7.0.0",
            "@babel/plugin-proposal-function-bind": "^7.0.0",
            "@babel/plugin-proposal-function-sent": "^7.0.0",
            "@babel/plugin-proposal-json-strings": "^7.0.0",
            "@babel/plugin-proposal-logical-assignment-operators": "^7.0.0",
            "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0",
            "@babel/plugin-proposal-numeric-separator": "^7.0.0",
            "@babel/plugin-proposal-object-rest-spread": "^7.0.0",
            "@babel/plugin-proposal-optional-chaining": "^7.0.0",
            "@babel/plugin-proposal-pipeline-operator": "^7.0.0",
            "@babel/plugin-proposal-throw-expressions": "^7.0.0",
            "@babel/plugin-syntax-dynamic-import": "^7.0.0",
            "@babel/plugin-syntax-import-meta": "^7.0.0",
            "@babel/plugin-syntax-object-rest-spread": "^7.0.0",
            "@babel/plugin-transform-runtime": "^7.0.0",
            "@babel/preset-env": "^7.0.0",
            "@babel/preset-flow": "^7.0.0",
            "@babel/register": "^7.0.0",
            "babel-core": "^7.0.0-bridge.0",
            "babel-preset-react-native-stage-0": "^1.0.1",
            .....
            }


            Gradle deps:



            classpath 'com.android.tools.build:gradle:3.1.4'
            classpath "io.realm:realm-gradle-plugin:4.0.0"


            App gradle



            compileSdkVersion 27
            buildToolsVersion "27.0.3"

            defaultConfig {
            applicationId "de.burda.buntede"
            minSdkVersion 17
            targetSdkVersion 27


            Gradle wrapper props:



            distributionUrl=https://services.gradle.org/distributions/gradle-4.4-all.zip






            share|improve this answer























            • I tried with Android Studio 3.1 still I'm getting the same problem. Also this is not the duplicate question. I have updated my question with additional details as well.
              – Jeffrey Rajan
              Nov 11 at 5:57















            up vote
            0
            down vote










            up vote
            0
            down vote









            Use com.android.tools.build:gradle:3.1.4 It should work. RN 0.57 has problem with building in 3.2



            This question is a possible duplicate of:



            React Native Error: Duplicate resources, assets coming in some screens and not coming in others in android release APK



            If it still doesn't work try to use RN 0.57.2, I am using it and creating releases works very well with these deps:



               "dependencies": {
            "react": "16.5.0",
            "react-native": "0.57.2",
            .......
            }

            "devDependencies": {
            "@babel/core": "^7.0.0",
            "@babel/plugin-proposal-class-properties": "^7.0.0",
            "@babel/plugin-proposal-decorators": "^7.0.0",
            "@babel/plugin-proposal-do-expressions": "^7.0.0",
            "@babel/plugin-proposal-export-default-from": "^7.0.0",
            "@babel/plugin-proposal-export-namespace-from": "^7.0.0",
            "@babel/plugin-proposal-function-bind": "^7.0.0",
            "@babel/plugin-proposal-function-sent": "^7.0.0",
            "@babel/plugin-proposal-json-strings": "^7.0.0",
            "@babel/plugin-proposal-logical-assignment-operators": "^7.0.0",
            "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0",
            "@babel/plugin-proposal-numeric-separator": "^7.0.0",
            "@babel/plugin-proposal-object-rest-spread": "^7.0.0",
            "@babel/plugin-proposal-optional-chaining": "^7.0.0",
            "@babel/plugin-proposal-pipeline-operator": "^7.0.0",
            "@babel/plugin-proposal-throw-expressions": "^7.0.0",
            "@babel/plugin-syntax-dynamic-import": "^7.0.0",
            "@babel/plugin-syntax-import-meta": "^7.0.0",
            "@babel/plugin-syntax-object-rest-spread": "^7.0.0",
            "@babel/plugin-transform-runtime": "^7.0.0",
            "@babel/preset-env": "^7.0.0",
            "@babel/preset-flow": "^7.0.0",
            "@babel/register": "^7.0.0",
            "babel-core": "^7.0.0-bridge.0",
            "babel-preset-react-native-stage-0": "^1.0.1",
            .....
            }


            Gradle deps:



            classpath 'com.android.tools.build:gradle:3.1.4'
            classpath "io.realm:realm-gradle-plugin:4.0.0"


            App gradle



            compileSdkVersion 27
            buildToolsVersion "27.0.3"

            defaultConfig {
            applicationId "de.burda.buntede"
            minSdkVersion 17
            targetSdkVersion 27


            Gradle wrapper props:



            distributionUrl=https://services.gradle.org/distributions/gradle-4.4-all.zip






            share|improve this answer














            Use com.android.tools.build:gradle:3.1.4 It should work. RN 0.57 has problem with building in 3.2



            This question is a possible duplicate of:



            React Native Error: Duplicate resources, assets coming in some screens and not coming in others in android release APK



            If it still doesn't work try to use RN 0.57.2, I am using it and creating releases works very well with these deps:



               "dependencies": {
            "react": "16.5.0",
            "react-native": "0.57.2",
            .......
            }

            "devDependencies": {
            "@babel/core": "^7.0.0",
            "@babel/plugin-proposal-class-properties": "^7.0.0",
            "@babel/plugin-proposal-decorators": "^7.0.0",
            "@babel/plugin-proposal-do-expressions": "^7.0.0",
            "@babel/plugin-proposal-export-default-from": "^7.0.0",
            "@babel/plugin-proposal-export-namespace-from": "^7.0.0",
            "@babel/plugin-proposal-function-bind": "^7.0.0",
            "@babel/plugin-proposal-function-sent": "^7.0.0",
            "@babel/plugin-proposal-json-strings": "^7.0.0",
            "@babel/plugin-proposal-logical-assignment-operators": "^7.0.0",
            "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0",
            "@babel/plugin-proposal-numeric-separator": "^7.0.0",
            "@babel/plugin-proposal-object-rest-spread": "^7.0.0",
            "@babel/plugin-proposal-optional-chaining": "^7.0.0",
            "@babel/plugin-proposal-pipeline-operator": "^7.0.0",
            "@babel/plugin-proposal-throw-expressions": "^7.0.0",
            "@babel/plugin-syntax-dynamic-import": "^7.0.0",
            "@babel/plugin-syntax-import-meta": "^7.0.0",
            "@babel/plugin-syntax-object-rest-spread": "^7.0.0",
            "@babel/plugin-transform-runtime": "^7.0.0",
            "@babel/preset-env": "^7.0.0",
            "@babel/preset-flow": "^7.0.0",
            "@babel/register": "^7.0.0",
            "babel-core": "^7.0.0-bridge.0",
            "babel-preset-react-native-stage-0": "^1.0.1",
            .....
            }


            Gradle deps:



            classpath 'com.android.tools.build:gradle:3.1.4'
            classpath "io.realm:realm-gradle-plugin:4.0.0"


            App gradle



            compileSdkVersion 27
            buildToolsVersion "27.0.3"

            defaultConfig {
            applicationId "de.burda.buntede"
            minSdkVersion 17
            targetSdkVersion 27


            Gradle wrapper props:



            distributionUrl=https://services.gradle.org/distributions/gradle-4.4-all.zip







            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited Nov 11 at 11:09

























            answered Nov 10 at 17:47









            K999

            3,70912541




            3,70912541












            • I tried with Android Studio 3.1 still I'm getting the same problem. Also this is not the duplicate question. I have updated my question with additional details as well.
              – Jeffrey Rajan
              Nov 11 at 5:57




















            • I tried with Android Studio 3.1 still I'm getting the same problem. Also this is not the duplicate question. I have updated my question with additional details as well.
              – Jeffrey Rajan
              Nov 11 at 5:57


















            I tried with Android Studio 3.1 still I'm getting the same problem. Also this is not the duplicate question. I have updated my question with additional details as well.
            – Jeffrey Rajan
            Nov 11 at 5:57






            I tried with Android Studio 3.1 still I'm getting the same problem. Also this is not the duplicate question. I have updated my question with additional details as well.
            – Jeffrey Rajan
            Nov 11 at 5:57












            up vote
            -3
            down vote













            I encountered the same problem after using 0.57.7,
            Look at the node_modules/react-native/react.gradle file,
            The resource output directory is $buildDir/generated/res/react/${targetPath} .
            Look at the address from the log as app/build/generated/res/react/release,



            Command
            React-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src /main/res/



            The resource output directory is
            android/app/src/main/res/



            The problem is here.



            I solved this:




            1. Delete duplicate files in android/app/res
              (If your resources are imported from React Native, you can directly delete the directory under res).


            2. Delete the App/build folder.


            3. Will react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/ App/src/main/res/



            change into
            react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle



            No longer specify --assets-dest
            Run command




            1. Use Android Studio's Generate Signed APK to package properly.


            the above






            share|improve this answer










            New contributor




            lxmy2012 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
            Check out our Code of Conduct.


















            • You shoudn’t use any language other than English here.
              – Anh Pham
              2 days ago















            up vote
            -3
            down vote













            I encountered the same problem after using 0.57.7,
            Look at the node_modules/react-native/react.gradle file,
            The resource output directory is $buildDir/generated/res/react/${targetPath} .
            Look at the address from the log as app/build/generated/res/react/release,



            Command
            React-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src /main/res/



            The resource output directory is
            android/app/src/main/res/



            The problem is here.



            I solved this:




            1. Delete duplicate files in android/app/res
              (If your resources are imported from React Native, you can directly delete the directory under res).


            2. Delete the App/build folder.


            3. Will react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/ App/src/main/res/



            change into
            react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle



            No longer specify --assets-dest
            Run command




            1. Use Android Studio's Generate Signed APK to package properly.


            the above






            share|improve this answer










            New contributor




            lxmy2012 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
            Check out our Code of Conduct.


















            • You shoudn’t use any language other than English here.
              – Anh Pham
              2 days ago













            up vote
            -3
            down vote










            up vote
            -3
            down vote









            I encountered the same problem after using 0.57.7,
            Look at the node_modules/react-native/react.gradle file,
            The resource output directory is $buildDir/generated/res/react/${targetPath} .
            Look at the address from the log as app/build/generated/res/react/release,



            Command
            React-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src /main/res/



            The resource output directory is
            android/app/src/main/res/



            The problem is here.



            I solved this:




            1. Delete duplicate files in android/app/res
              (If your resources are imported from React Native, you can directly delete the directory under res).


            2. Delete the App/build folder.


            3. Will react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/ App/src/main/res/



            change into
            react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle



            No longer specify --assets-dest
            Run command




            1. Use Android Studio's Generate Signed APK to package properly.


            the above






            share|improve this answer










            New contributor




            lxmy2012 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
            Check out our Code of Conduct.









            I encountered the same problem after using 0.57.7,
            Look at the node_modules/react-native/react.gradle file,
            The resource output directory is $buildDir/generated/res/react/${targetPath} .
            Look at the address from the log as app/build/generated/res/react/release,



            Command
            React-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src /main/res/



            The resource output directory is
            android/app/src/main/res/



            The problem is here.



            I solved this:




            1. Delete duplicate files in android/app/res
              (If your resources are imported from React Native, you can directly delete the directory under res).


            2. Delete the App/build folder.


            3. Will react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/ App/src/main/res/



            change into
            react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle



            No longer specify --assets-dest
            Run command




            1. Use Android Studio's Generate Signed APK to package properly.


            the above







            share|improve this answer










            New contributor




            lxmy2012 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
            Check out our Code of Conduct.









            share|improve this answer



            share|improve this answer








            edited 2 days ago









            JJJ

            29k147591




            29k147591






            New contributor




            lxmy2012 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
            Check out our Code of Conduct.









            answered 2 days ago









            lxmy2012

            13




            13




            New contributor




            lxmy2012 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
            Check out our Code of Conduct.





            New contributor





            lxmy2012 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
            Check out our Code of Conduct.






            lxmy2012 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
            Check out our Code of Conduct.












            • You shoudn’t use any language other than English here.
              – Anh Pham
              2 days ago


















            • You shoudn’t use any language other than English here.
              – Anh Pham
              2 days ago
















            You shoudn’t use any language other than English here.
            – Anh Pham
            2 days ago




            You shoudn’t use any language other than English here.
            – Anh Pham
            2 days ago


















            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.





            Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


            Please pay close attention to the following guidance:


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53239705%2freact-native-error-duplicate-resources-android%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            這個網誌中的熱門文章

            Tangent Lines Diagram Along Smooth Curve

            Yusuf al-Mu'taman ibn Hud

            Zucchini