我接手了一个用React Native写的项目,但是这个项目有点奇怪,我可以生成apk来安装,但是使用
npx react-native run-android
会得到Error: Activity class {com.xxx.xxx/com.xxx.xxx.MainActivity} does not exist.
其实这个文件不存在,我也查了一些资料,但是对我没有帮助,然后我用
npx react-native run-android --appId com.ooo.ooo
,结果就会出现Error: Activity class {com.ooo.ooo/com.xxx.xxx.MainActivity} does not exist.
即使之前的id是正确的,仍然会导致MainActivity不存在。
如果项目使用具有不同 appId 或后缀的风味/变体,那么(我在经过大量惊愕+研究后才了解到)需要在启动命令中加以考虑。
例如,如果
applicationId="com.example.myapp"
(大概在 RN 0.70+ 中,你也有 namespace="com.example.myapp"
),再加上 android/app/build.gradle
:
flavorDimensions "build"
productFlavors {
dev {
dimension "build"
applicationIdSuffix ".dev"
}
}
那么您将看到的错误并不能解释默认的
react-native run-android
命令,该命令将显示如下内容:
Error type 3
Error: Activity class
{com.example.myapp/com.example.myapp.MainActivity} does not exist.
我本以为使用
react-native run-android --variant 'devDebug'
的变体选项可以解决这个问题,但显然不是。
因此只需修改您的命令/脚本以将其称为
react-native run-android --variant 'devDebug' --appIdSuffix 'dev'
,然后它应该启动并成功响应:
Starting: Intent { cmp=com.example.myapp.dev/com.example.myapp.MainActivity }
当然,根据您的具体配置进行调整。
哈!希望我几个小时前就意识到这个问题了。
谢谢格雷格·海古德。就是这样!
关于我的案例:我将react-native从0.71升级到0.73.4。现在没有选择
--variant
。建议使用--mode
代替。所以构建成功了,但后来我遇到了同样的错误
错误类型3 错误:活动类 {com.example/com.example.myapp.MainActivity} 不存在。
现在我用
-mode flavourDebug --appIdSuffix 'flavoursuffix'
来调用它,它工作得很好