我正在使用
[email protected]
并且 部分设置 包括指定 applicationIdSuffix。
我过去在以前的应用程序上设置过此功能,没有任何问题(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.
如果我从
applicationIdSuffix ".debug"
中删除 app/build.gradle
并且应用程序在我的手机上正常启动,错误就会消失。
我的手机是 Nexus 6P,运行 Android 7.0。我只在物理设备上尝试过,因为我没有设置模拟器。
我已经根据我的其他项目对所有内容进行了三次检查,我不认为这是配置问题。
我在具有多种构建配置的 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\"
对于 Staging 构建(开发变量,但为发布而构建)
react-native run-android --variant devRelease --appIdSuffix \"development\"
对于发布构建
react-native run-android --variant productionRelease
这对我有用 react-native 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 上有一个补丁,它基本上做同样的事情(与几个问题和拉取请求here&here有关)。
如果您有自定义的applicationId(与您的Java包名称不同),则必须在运行
run-android
命令时指定它
npx react-native run-android --appId com.custompackagename.debug
当react启动意图时,你会在最后看到结果
Starting: Intent { cmp=com.custompackagename.debug/com.packagename.MainActivity
我也没有找到真正的解决方案。现在我正在使用一种解决方法,我不使用react-native run-...而是直接使用AndroidStudio。
我在 http://sex-gril.com/project/45838.html 找到了一个提示,它说你必须将包名称添加到 build.gradle 中的 defaultConfig 中。
android {
...
defaultConfig {
...
resValue "string", "build_config_package", "Your App ID LIke in Manifest"
}
}
但这对我不起作用=/。
我也遇到了同样的问题,我使用
applicationIdSuffix
来配置自定义环境。
从文档,我们有:
--appId
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
注意:您的后缀不应包含点前缀,它将自动添加。
我相信你的
packageName
不是com.packagename
,而是com.packagename.debug
。当react-native命令尝试运行它时,它不会找到该包名称。
通过运行:
npx react-native run-android --appIdSuffix "debug"
它可以工作,但如果您希望它与
react-native start
一起运行,您可以编辑您的 react-native.config.js
并添加:
module.exports = {
project: {
ios: {},
-> android: { watchModeCommandParams: ["--appIdSuffix", "debug"] },
},
assets: ["./assets/fonts"],
};