diff --git a/packages/cli-platform-android/src/config/__fixtures__/android.ts b/packages/cli-platform-android/src/config/__fixtures__/android.ts index c187e0a62..44c2b8f39 100644 --- a/packages/cli-platform-android/src/config/__fixtures__/android.ts +++ b/packages/cli-platform-android/src/config/__fixtures__/android.ts @@ -30,6 +30,14 @@ const classNameManifest = fs.readFileSync( path.join(__dirname, './files/AndroidManifest-className.xml'), ); +const customFlavorManifest = fs.readFileSync( + path.join(__dirname, './files/AndroidManifest-custom-flavor.xml'), +); + +const mainManifest = fs.readFileSync( + path.join(__dirname, './files/AndroidManifest.xml'), +); + function generateValidFileStructureForLib(classFileName: string) { return { 'build.gradle': buildGradle, @@ -298,3 +306,14 @@ export const className = { 'AndroidManifest.xml': classNameManifest, }, }; + +export const customFlavor = { + src: { + e2e: { + 'AndroidManifest.xml': customFlavorManifest, + }, + main: { + 'AndroidManifest.xml': mainManifest, + }, + }, +}; diff --git a/packages/cli-platform-android/src/config/__fixtures__/files/AndroidManifest-custom-flavor.xml b/packages/cli-platform-android/src/config/__fixtures__/files/AndroidManifest-custom-flavor.xml new file mode 100644 index 000000000..0c29eab67 --- /dev/null +++ b/packages/cli-platform-android/src/config/__fixtures__/files/AndroidManifest-custom-flavor.xml @@ -0,0 +1,3 @@ + + diff --git a/packages/cli-platform-android/src/config/__tests__/getMainActivity.test.ts b/packages/cli-platform-android/src/config/__tests__/getMainActivity.test.ts index 9b7bc190a..a1acfed78 100644 --- a/packages/cli-platform-android/src/config/__tests__/getMainActivity.test.ts +++ b/packages/cli-platform-android/src/config/__tests__/getMainActivity.test.ts @@ -26,6 +26,11 @@ describe('android::getMainActivity', () => { app: mocks.fewActivities, }, }, + customFlavor: { + android: { + app: mocks.customFlavor, + }, + }, }); }); @@ -53,6 +58,14 @@ describe('android::getMainActivity', () => { expect(mainActivity).toBe('com.example.ExampleAppActivity'); }); + it('returns main activity from main manifest when custom flavors are defined', () => { + const manifestPath = findManifest('/customFlavor'); + const mainActivity = getMainActivity(manifestPath || ''); + expect(mainActivity).not.toBeNull(); + expect(typeof mainActivity).toBe('string'); + expect(mainActivity).toBe('.MainActivity'); + }); + it('returns null if file do not exist', () => { const fakeManifestPath = findManifest('/empty'); expect(getMainActivity(fakeManifestPath || '')).toBeNull(); diff --git a/packages/cli-platform-android/src/config/findManifest.ts b/packages/cli-platform-android/src/config/findManifest.ts index 68292fe2e..9955d47d0 100644 --- a/packages/cli-platform-android/src/config/findManifest.ts +++ b/packages/cli-platform-android/src/config/findManifest.ts @@ -10,7 +10,7 @@ import glob from 'glob'; import path from 'path'; export default function findManifest(folder: string) { - const manifestPath = glob.sync(path.join('**', 'AndroidManifest.xml'), { + let manifestPaths = glob.sync(path.join('**', 'AndroidManifest.xml'), { cwd: folder, ignore: [ 'node_modules/**', @@ -23,7 +23,16 @@ export default function findManifest(folder: string) { '**/src/androidTest/**', '**/src/test/**', ], - })[0]; + }); + if (manifestPaths.length > 1) { + // if we have more than one manifest, pick the one in the main folder if present + const mainManifest = manifestPaths.filter((manifestPath) => + manifestPath.includes('src/main/'), + ); + if (mainManifest.length === 1) { + manifestPaths = mainManifest; + } + } - return manifestPath ? path.join(folder, manifestPath) : null; + return manifestPaths[0] ? path.join(folder, manifestPaths[0]) : null; }