Skip to content

Commit 58d1f1d

Browse files
committed
fix: use package name instead of appId when generating Activity from gradle
1 parent 8debd89 commit 58d1f1d

File tree

1 file changed

+23
-9
lines changed

1 file changed

+23
-9
lines changed

packages/vscode-extension/src/builders/buildAndroid.ts

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import path from "path";
44
import semver from "semver";
55
import { AndroidConfig } from "@expo/config-plugins";
66
import loadConfig from "@react-native-community/cli-config";
7+
import { getAppBuildGradleAsync } from "@expo/config-plugins/build/android/Paths.js";
78
import { calculateAppArtifactHash, getNativeABI } from "../utilities/common";
89
import { ANDROID_HOME, findJavaHome } from "../utilities/android";
910
import { Logger } from "../Logger";
@@ -81,19 +82,28 @@ async function getApplicationManifest(
8182
return undefined;
8283
}
8384

85+
async function getNamespaceFromGradle(projectRoot: string): Promise<string | null> {
86+
const gradleBuild = await getAppBuildGradleAsync(projectRoot);
87+
if (!gradleBuild) {
88+
return null;
89+
}
90+
91+
// The namespace field in build.gradle defines the Java package name for the app's code.
92+
const matchResult = gradleBuild.contents.match(/namespace\s+['"].*['"]/);
93+
return matchResult?.[1] ?? null;
94+
}
95+
8496
async function resolveAppIdFromNative(projectRoot: string): Promise<string | null> {
85-
const applicationIdFromGradle = await AndroidConfig.Package.getApplicationIdAsync(
86-
projectRoot
87-
).catch(() => null);
88-
if (applicationIdFromGradle) {
89-
return applicationIdFromGradle;
97+
const namespaceFromGradle = await getNamespaceFromGradle(projectRoot);
98+
if (namespaceFromGradle) {
99+
return namespaceFromGradle;
90100
}
91101

92102
try {
93103
const filePath = await AndroidConfig.Paths.getAndroidManifestAsync(projectRoot);
94104
const androidManifest = await AndroidConfig.Manifest.readAndroidManifestAsync(filePath);
95105
// Assert MainActivity defined.
96-
await AndroidConfig.Manifest.getMainActivityOrThrow(androidManifest);
106+
AndroidConfig.Manifest.getMainActivityOrThrow(androidManifest);
97107
const appId = androidManifest.manifest?.$?.package;
98108
if (appId) {
99109
return appId;
@@ -111,10 +121,14 @@ async function getLaunchActivity(
111121
baseAppId: string
112122
): Promise<string | undefined> {
113123
const manifest = await getApplicationManifest(projectRoot);
114-
if (!manifest) return undefined;
124+
if (!manifest) {
125+
return undefined;
126+
}
115127

116-
const mainActivity = await AndroidConfig.Manifest.getRunnableActivity(manifest);
117-
if (!mainActivity) return undefined;
128+
const mainActivity = AndroidConfig.Manifest.getRunnableActivity(manifest);
129+
if (!mainActivity) {
130+
return undefined;
131+
}
118132

119133
const mainActivityName = mainActivity.$["android:name"];
120134

0 commit comments

Comments
 (0)