React Native安卓模拟器启动报错:Activity类.MainActivity不存在
报错信息
Starting: Intent { cmp=com.companyname.companynameapp/.MainActivity } Error type 3 Error: Activity class {com.companyname.companynameapp/com.companyname.companynameapp.MainActivity} does not exist.
开发的React Native应用在iOS模拟器运行正常,但安卓模拟器启动时触发上述错误,已尝试网上常见调试方案无效,推测是之前修改过应用名称导致,这是首次尝试在安卓模拟器启动该应用。
已检查的相关文件
android/settings.gradle
rootProject.name = 'companyname' include ':app'android/src/main/AndroidManifest.xml
怀疑此处存在问题,发现<data>条目里的应用简称(例如公司名是Proctor and Gamble,简称PG)和其他位置拼写不一致:<application android:name=".MainApplication" android:label="@string/app_name" ... <activity android:name=".MainActivity" android:label="@string/app_name" ... <intent-filter> <action android:name="android.intent.action.MAIN" ... <data android:scheme="shortedcompanyname-app" />android/app/build.gradle
... android { ... namespace "com.companyname.companynameapp" defaultConfig { applicationId "com.companyname.companynameapp" ... manifestPlaceholders = ['appAuthRedirectScheme' : 'shortenedcompanyname-app']android/app/src/main/res/values/strings.xml
<resources> <string name="app_name">companyname</string> </resources>android/src/main/java/com/companyname/MainActivity.java
package com.companyname.companynameapp; ... public class MainActivity extends ReactActivity { ... @Override protected String getMainComponentName() { return "companyname"; }
针对性解决步骤
统一包名与Activity路径
报错显示系统尝试启动的Activity路径是com.companyname.companynameapp/com.companyname.companynameapp.MainActivity,但从代码看,包名是com.companyname.companynameapp,Activity类名是MainActivity,正确路径应为com.companyname.companynameapp/.MainActivity。请:- 确认
AndroidManifest.xml中<activity>的android:name属性为.MainActivity(相对包名的简写),或完整路径com.companyname.companynameapp.MainActivity; - 检查
MainActivity.java的文件路径是否与包名匹配:应放在android/src/main/java/com/companyname/companynameapp/目录下,若之前修改过应用名称,可能文件路径未同步更新。
- 确认
统一应用标识与Scheme拼写
你提到的<data>标签里的scheme存在拼写错误(shortedcompanyname-appvsbuild.gradle中的shortenedcompanyname-app),这会导致Intent匹配失败:- 将
AndroidManifest.xml里的<data android:scheme="shortedcompanyname-app" />改为shortenedcompanyname-app,与build.gradle中的appAuthRedirectScheme值保持一致; - 确保
strings.xml的app_name、settings.gradle的rootProject.name、MainActivity中getMainComponentName的返回值完全一致。
- 将
清理项目缓存并重建
执行以下命令彻底清理缓存后重新构建:# 进入安卓目录清理gradle缓存 cd android && ./gradlew clean # 返回根目录清理React Native缓存 cd .. && npx react-native clean # 重新启动安卓项目 npx react-native run-android卸载模拟器中的旧应用
模拟器中残留的旧版本应用可能导致启动冲突:- 在安卓模拟器的应用列表中找到该应用并卸载;
- 或使用adb命令卸载:
adb uninstall com.companyname.companynameapp,之后重新运行项目。
内容的提问来源于stack exchange,提问作者physicsboy

