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 086fd86a6d8237..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; @@ -38,6 +40,11 @@ exports.projectConfig = function projectConfigAndroid(folder, userConfig) { const manifest = readManifest(manifestPath); const packageName = userConfig.packageName || getPackageName(manifest); + + if (!packageName) { + throw new Error(`Package name not found in ${manifestPath}`); + } + const packageFolder = userConfig.packageFolder || packageName.replace(/\./g, path.sep); @@ -92,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;