Expo run:Android执行失败,Gradle报字符串索引越界错误求助
问题:Expo React Native 安卓构建失败(settings.gradle 字符串索引越界)
尝试在Android设备上运行Expo React Native应用时,先执行了expo prebuild(出现报错但未处理),之后执行expo run:android时遭遇Gradle构建失败,错误提示settings.gradle第6行字符串索引越界:0。
错误日志
FAILURE: Build failed with an exception. * Where: Settings file '/Desktop/projects/'[PROJECT NAME]'/android/settings.gradle' line: 6 * What went wrong: A problem occurred evaluating settings '[PROJECT NAME]'. > String index out of range: 0 * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. * Get more help at https://help.gradle.org BUILD FAILED in 770ms /Desktop/projects/'[PROJECT NAME]'/android/gradlew exited with non-zero code: 1 Error: /Desktop/projects/'[PROJECT NAME]'/android/gradlew exited with non-zero code: 1 at ChildProcess.completionListener (/usr/local/lib/node_modules/expo-cli/node_modules/@expo/spawn-async/src/spawnAsync.ts:65:13) at Object.onceWrapper (node:events:642:26) at ChildProcess.emit (node:events:527:28) at maybeClose (node:internal/child_process:1092:16) at Process.ChildProcess._handle.onexit (node:internal/child_process:302:5) ... at spawnAsync (/usr/local/lib/node_modules/expo-cli/node_modules/@expo/spawn-async/src/spawnAsync.ts:26:19) at spawnGradleAsync (/usr/local/lib/node_modules/expo-cli/src/commands/run/android/spawnGradleAsync.ts:83:18) at assembleAsync (/usr/local/lib/node_modules/expo-cli/src/commands/run/android/spawnGradleAsync.ts:57:16) at actionAsync (/usr/local/lib/node_modules/expo-cli/src/commands/run/android/runAndroid.ts:143:9)
涉及的settings.gradle文件内容
rootProject.name = '[PROJECT NAME]' apply from: new File([\"node\", \"--print\", \"require.resolve('expo/package.json')\"].execute(null, rootDir).text.trim(), \"../scripts/autolinking.gradle\"); useExpoModules() apply from: new File([\"node\", \"--print\", \"require.resolve('@react-native-community/cli-platform-android/package.json')\"].execute(null, rootDir).text.trim(), \"../native_modules.gradle\"); applyNativeModulesSettingsGradle(settings) include ':app'
原因分析与解决办法
核心原因
settings.gradle文件中第3、6行的数组参数使用了转义引号\",属于语法错误。Gradle执行["node", ...].execute()时,转义引号会导致node命令无法正确执行,返回空字符串;后续调用.text.trim()后得到长度为0的字符串,访问索引0时触发"字符串索引越界"错误。这一问题根源是之前expo prebuild报错未处理,生成了有语法问题的配置文件。
修复步骤
手动修正settings.gradle语法:
将文件中所有的[\"替换为[",\"]替换为"],修正后的关键行应为:apply from: new File(["node", "--print", "require.resolve('expo/package.json')"].execute(null, rootDir).text.trim(), "../scripts/autolinking.gradle");apply from: new File(["node", "--print", "require.resolve('@react-native-community/cli-platform-android/package.json')"].execute(null, rootDir).text.trim(), "../native_modules.gradle");重新生成配置文件(可选):
如果手动修正后仍有问题,删除项目根目录下的android文件夹,执行expo prebuild --clean重新生成安卓配置文件(确保这次prebuild过程无报错)。重新构建项目:
执行expo run:android重新启动构建流程。
内容的提问来源于stack exchange,提问作者BHRS
相关产品推荐
相关产品推荐

