使用 applicationIdSuffix 时,React Native 应用程序将无法启动

问题描述 投票:0回答:6

我正在使用

[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。我只在物理设备上尝试过,因为我没有设置模拟器。

我已经根据我的其他项目对所有内容进行了三次检查,我不认为这是配置问题。

android react-native adb build.gradle
6个回答
40
投票

我在具有多种构建配置的 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"


9
投票

从上面的链接来看,它已经在 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 上有一个补丁,它基本上做同样的事情(与几个问题和拉取请求herehere有关)。


9
投票

如果您有自定义的applicationId(与您的Java包名称不同),则必须在运行

run-android
命令时指定它

npx react-native run-android --appId com.custompackagename.debug

当react启动意图时,你会在最后看到结果

Starting: Intent { cmp=com.custompackagename.debug/com.packagename.MainActivity

1
投票

我也没有找到真正的解决方案。现在我正在使用一种解决方法,我不使用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"
    }
}

但这对我不起作用=/。


0
投票

我也遇到了同样的问题,我使用

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

注意:您的后缀不应包含点前缀,它将自动添加。


0
投票

我相信你的

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"],
};
© www.soinside.com 2019 - 2024. All rights reserved.