我正在使用react-native-codepush@1.16.1-beta
,部分设置包括指定applicationId后缀。
我过去在以前的应用程序上设置过这个,没有问题(React Native 0.37)。我已经在这个项目(React Native 0.40)中遇到了两次此错误。我第一次重建我的整个项目,它就消失了。它无缘无故地再次开始发生,所以我在一个新目录中克隆了项目的最后一个稳定版本,并得到了同样的错误。
使用 react-native run-android
时出错。成功构建后会发生错误:
Starting: Intent { cmp=com.packagename/.MainActivity }
Error type 3
Error: Activity class {com.packagename/com.packagename.MainActivity} does not exist.
如果我从app/build.gradle
中删除applicationIdSuffix ".debug"
并且该应用程序在我的手机上启动而没有问题,则错误就会消失。
我的手机是带有Android 7.0的Nexus 6P。我只在物理设备上尝试过,因为我没有设置模拟器。
我已经根据我的其他项目对所有内容进行了三重检查,我不认为这是配置问题。
我用于具有多个构建配置的 React Native 0.60+
在我的app/bundle.gradle
文件中,我有以下配置
productFlavors {
dev {
applicationId "com.my.app.development"
dimension "standard"
}
production {
applicationId "com.my.app"
dimension "standard"
}
}
buildTypes {
release {
// your release build values
}
debug {
// your debug build values
debuggable true
}
}
对于标准调试版本
react-native run-android --variant devDebug --appIdSuffix "development"
对于暂存版本(开发变量,但为发布而构建)
react-native run-android --variant devRelease --appIdSuffix "development"
对于发布版本
react-native run-android --variant productionRelease
这在反应原生 0.50.3 上对我有用
react-native run-android --appIdSuffix "debug"
从上面的链接来看,它在 github 上已经讨论了很长时间(一年多),似乎有一些补丁正在开发中,所以我下面的修复可能会也可能不会起作用,具体取决于您使用的react-native
的版本。
这是我(暂时)解决问题的方式。问题是react-native-cli
试图用错误的参数调用adb shell am start
:
com.packagename/com.packagename.MainActivity
当它应该调用类似的东西时
com.packagename.debug/com.packagename.MainActivity
因此,在修复react-native
版本之前,可以使用以下命令(如此代码推送 PR 中的建议:
cd android && ./gradlew installDebug && adb -s <DEVICE_ID> shell am start -n com.packageName.debug/com.packageName.MainActivity
这不是一个完美的修复程序,但是github上有一个补丁,它基本上做了同样的事情(与这里和这里的几个问题和拉取请求有关)。
如果您有自定义应用程序 ID(与 Java 包名称不同),则必须在运行 run-android
命令时指定它
npx react-native run-android --appId com.custompackagename.debug
当 react 启动意图时,您将在最后看到结果
Starting: Intent { cmp=com.custompackagename.debug/com.packagename.MainActivity
我也没有找到真正的解决方案。现在我正在使用一种不使用反应本机运行的解决方法-...但直接使用AndroidStudio。
我在 http://-gril.com/project/45838.html 中找到了一个提示,即您必须将包名称添加到build.gradle中的defaultConfig中。
android {
...
defaultConfig {
...
resValue "string", "build_config_package", "Your App ID LIke in Manifest"
}
}
但这对我不起作用=/。
我遇到了同样的问题,我使用applicationIdSuffix
来配置自定义环境。从文档中,我们有:
--应用标识
-Specify an applicationId to launch after the build. If not specified, the package of AndroidManifest.xml will be used.
-appId后缀
Specify an applicationIdSuffix to run after the build.
所以你应该像这样运行你的应用程序
npx react-native run-android --appIdSuffix suffix
注意:您的后缀不应包含点前缀,它将自动添加。