React Native 应用程序在使用 applicationId后缀时无法启动



我正在使用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

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

相关内容

  • 没有找到相关文章

最新更新