From 5ccb88297493d9f122cd0fb2dff92d906a3781b0 Mon Sep 17 00:00:00 2001 From: Daniel Friesen Date: Thu, 6 Apr 2017 23:34:45 -0700 Subject: [PATCH] Add `manifestPath` userConfig. `react-native link` often fails due to the wrong manifest being used when you use a debug manifest. --- local-cli/core/__fixtures__/android.js | 19 +++++++++++++++++++ .../files/AndroidManifest-debug.xml | 3 +++ .../android/getProjectConfig.spec.js | 13 +++++++++++++ local-cli/core/android/index.js | 8 ++++++-- 4 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 local-cli/core/__fixtures__/files/AndroidManifest-debug.xml diff --git a/local-cli/core/__fixtures__/android.js b/local-cli/core/__fixtures__/android.js index ebecf9b8c9029f..d7779709845f68 100644 --- a/local-cli/core/__fixtures__/android.js +++ b/local-cli/core/__fixtures__/android.js @@ -20,6 +20,25 @@ exports.valid = { }, }; +exports.userConfigManifest = { + src: { + main: { + 'AndroidManifest.xml': manifest, + com: { + some: { + example: { + 'Main.java': mainJavaClass, + 'ReactPackage.java': fs.readFileSync(path.join(__dirname, './files/ReactPackage.java')), + }, + }, + }, + }, + debug: { + 'AndroidManifest.xml': fs.readFileSync(path.join(__dirname, './files/AndroidManifest-debug.xml')), + }, + }, +}; + exports.corrupted = { src: { 'AndroidManifest.xml': manifest, diff --git a/local-cli/core/__fixtures__/files/AndroidManifest-debug.xml b/local-cli/core/__fixtures__/files/AndroidManifest-debug.xml new file mode 100644 index 00000000000000..0c29eab6721a39 --- /dev/null +++ b/local-cli/core/__fixtures__/files/AndroidManifest-debug.xml @@ -0,0 +1,3 @@ + + diff --git a/local-cli/core/__tests__/android/getProjectConfig.spec.js b/local-cli/core/__tests__/android/getProjectConfig.spec.js index 3c0b2f79d2c2ef..6a5d3d449a557c 100644 --- a/local-cli/core/__tests__/android/getProjectConfig.spec.js +++ b/local-cli/core/__tests__/android/getProjectConfig.spec.js @@ -15,6 +15,9 @@ describe('android::getProjectConfig', () => { flat: { android: mocks.valid, }, + multiple: { + android: mocks.userConfigManifest, + }, noManifest: { android: {}, }, @@ -43,6 +46,16 @@ describe('android::getProjectConfig', () => { expect(getProjectConfig(folder, userConfig)).not.toBe(null); expect(typeof getProjectConfig(folder, userConfig)).toBe('object'); }); + + it('multiple', () => { + const userConfig = { + manifestPath: 'src/main/AndroidManifest.xml' + }; + const folder = 'multiple'; + + expect(getProjectConfig(folder, userConfig)).not.toBe(null); + expect(typeof getProjectConfig(folder, userConfig)).toBe('object'); + }); }); it('should return `null` if android project was not found', () => { diff --git a/local-cli/core/android/index.js b/local-cli/core/android/index.js index 49bbe7d9abfd2b..cc229d298f4fd9 100644 --- a/local-cli/core/android/index.js +++ b/local-cli/core/android/index.js @@ -29,7 +29,9 @@ exports.projectConfig = function projectConfigAndroid(folder, userConfig) { const sourceDir = path.join(folder, src); const isFlat = sourceDir.indexOf('app') === -1; - const manifestPath = findManifest(sourceDir); + const manifestPath = userConfig.manifestPath + ? path.join(sourceDir, userConfig.manifestPath) + : findManifest(sourceDir); if (!manifestPath) { return null; @@ -97,7 +99,9 @@ exports.dependencyConfig = function dependencyConfigAndroid(folder, userConfig) } const sourceDir = path.join(folder, src); - const manifestPath = findManifest(sourceDir); + const manifestPath = userConfig.manifestPath + ? path.join(sourceDir, userConfig.manifestPath) + : findManifest(sourceDir); if (!manifestPath) { return null;