1*3d6e487dSEvan Baconimport { AndroidConfig } from '@expo/config-plugins'; 2*3d6e487dSEvan Bacon 3*3d6e487dSEvan Baconimport { AndroidAppIdResolver } from '../../start/platforms/android/AndroidAppIdResolver'; 4*3d6e487dSEvan Baconimport { CommandError } from '../../utils/errors'; 5*3d6e487dSEvan Bacon 6*3d6e487dSEvan Baconexport interface LaunchProps { 7*3d6e487dSEvan Bacon packageName: string; 8*3d6e487dSEvan Bacon mainActivity: string; 9*3d6e487dSEvan Bacon launchActivity: string; 10*3d6e487dSEvan Bacon} 11*3d6e487dSEvan Bacon 12*3d6e487dSEvan Baconasync function getMainActivityAsync(projectRoot: string): Promise<string> { 13*3d6e487dSEvan Bacon const filePath = await AndroidConfig.Paths.getAndroidManifestAsync(projectRoot); 14*3d6e487dSEvan Bacon const androidManifest = await AndroidConfig.Manifest.readAndroidManifestAsync(filePath); 15*3d6e487dSEvan Bacon 16*3d6e487dSEvan Bacon // Assert MainActivity defined. 17*3d6e487dSEvan Bacon const activity = await AndroidConfig.Manifest.getRunnableActivity(androidManifest); 18*3d6e487dSEvan Bacon if (!activity) { 19*3d6e487dSEvan Bacon throw new CommandError( 20*3d6e487dSEvan Bacon 'ANDROID_MALFORMED', 21*3d6e487dSEvan Bacon `${filePath} is missing a runnable activity element.` 22*3d6e487dSEvan Bacon ); 23*3d6e487dSEvan Bacon } 24*3d6e487dSEvan Bacon // Often this is ".MainActivity" 25*3d6e487dSEvan Bacon return activity.$['android:name']; 26*3d6e487dSEvan Bacon} 27*3d6e487dSEvan Bacon 28*3d6e487dSEvan Baconexport async function resolveLaunchPropsAsync(projectRoot: string): Promise<LaunchProps> { 29*3d6e487dSEvan Bacon // Often this is ".MainActivity" 30*3d6e487dSEvan Bacon const mainActivity = await getMainActivityAsync(projectRoot); 31*3d6e487dSEvan Bacon 32*3d6e487dSEvan Bacon const packageName = await new AndroidAppIdResolver(projectRoot).getAppIdFromNativeAsync(); 33*3d6e487dSEvan Bacon const launchActivity = `${packageName}/${mainActivity}`; 34*3d6e487dSEvan Bacon 35*3d6e487dSEvan Bacon return { 36*3d6e487dSEvan Bacon mainActivity, 37*3d6e487dSEvan Bacon launchActivity, 38*3d6e487dSEvan Bacon packageName, 39*3d6e487dSEvan Bacon }; 40*3d6e487dSEvan Bacon} 41