【问题标题】:Error type 3. Activity class {com.awesome_project/ com.awesome_project.MainActivity} does not exist in react native (Android device)错误类型 3. Activity 类 {com.awesome_project/ com.awesome_project.MainActivity} 在 react native 中不存在(Android 设备)
【发布时间】:2016-05-09 23:27:10
【问题描述】:

我使用以下命令创建了项目。

react-native init Awesome_Project

我已经使用以下命令启动了打包程序。

react-native start

我已经使用 USB 驱动器连接了我的 Android 手机。

我已打开另一个命令提示符并运行以下 adb 命令以确保仅连接了一个设备。

adb devices

我已经使用以下命令启动了应用程序。

react-native run-android

我遇到了以下错误。

open: Permission denied
open: Permission denied
Starting: Intent { com.awesome_project/.MainActivity }
Error type 3
Error: Activity class {com.awesome_project/ com.awesome_project.MainActivity} does not exist.

提前致谢。

【问题讨论】:

  • 在我的情况下,我只是卸载应用程序并使用 cd android && gradlew clean && cd .. && react-native run-android 重新安装

标签: javascript android react-native


【解决方案1】:

确保android/app/build.gradle

defaultConfig {
        applicationId "WHATEVER_THIS_IS" 
}

需要匹配android/app/src/main/java/com/app_name/MainActivity.java第一行:

package WHATEVER_THIS_IS;

需要匹配android/app/src/main/java/com/app_name/MainApplication.java第一行:

package WHATEVER_THIS_IS;

需要匹配android/app/src/main/AndroidManifest.xml第一行:

package="WHATEVER_THIS_IS">

【讨论】:

  • 也添加了android>app>src>main>java>com>app_name>MainApplication.java 方向。
  • 如果您的Activity class {} does not exist,您将失去深度链接等增强功能。设备知道如何在不按下按钮的情况下启动应用程序非常重要。只是良好的开发人员实践......
  • 我已经检查了所有这些,但没有解决任何问题
  • 这也没有解决我的问题,但是adb uninstall WHATEVER_THIS_IS的@Fran解决方案确实解决了!
  • 这可行,但一开始有几次失败,因为我在指定的应用 ID 位置之一有错字,或者忘记在编辑之间运行 gradelew clean,这是重要的一步。无论出于何种原因,我们的应用程序都需要在 app/src/build.gradle 中使用不同的 applicationId,以便为 Microsoft AppCenter 代码推送分开构建。切换它以匹配其他文件允许我在本地模拟器上运行构建。
【解决方案2】:

尝试运行 adb 命令从项目中的 android 目录安装 apk(应该提供更多输出):adb install app/build/outputs/apk/app-debug.apk

在我的情况下,存储箱不足

facebook/react-native 问题#2885

【讨论】:

    【解决方案3】:

    在我的情况下,应用程序无法自动打开,没有其他问题。

    只需在您的 android 设备中搜索应用程序图标(查看所有应用程序的位置)并点击它以手动打开应用程序。打包程序将开始像往常一样加载应用程序。

    所以这似乎是一个错误。不幸的是,我真的不知道是什么原因造成的。

    【讨论】:

    • 虽然您是正确的,应用程序不会自动启动,但您希望自动启动。没有这个,您将失去深度链接等增强功能。请参阅上面的答案,您的配置在某处关闭。
    • 在环境变量中设置sdk的路径,就这样!!
    • 我有同样的经历,apk 已安装,但模拟器只是自动启动应用程序
    【解决方案4】:

    我在手机上成功安装构建后遇到了这个问题,但长话短说我必须卸载它才能进行全新安装。卸载应用程序并尝试执行react-native run-android 后,我收到此错误。

    似乎在某些设备上“卸载”应用程序只会禁用它,以防您希望在特定时间范围内撤消卸载。为了解决这个问题,我进入设置下的应用程序并选择我的应用程序并完全卸载它。之后,我能够再次成功构建我的应用程序。希望这可以帮助某人。

    【讨论】:

      【解决方案5】:

      我已将我的应用程序 ID 从 com.appName 更改为 com.companyName.appName,并在 android>app>build.gradle 中进行了此更新:

      defaultConfig {
        applicationId "com.companyName.appName" // was previously "com.appName"
      }
      

      我还将文件结构从android>app>src>main>java>com>appName 更改为android>app>src>main>java>com>companyName>appName。这是我得到错误的时候。

      要修复错误,我只是对com.appName 进行了项目范围的搜索(Atom 中的CMD-SHIFT-F),并将它们全部替换为com.companyName.appName。问题解决了!

      【讨论】:

      • 谢谢。我认为这是通过在 Android Studio 中使用 Refactor 功能造成的。也许我已经运行 rename 或 move somemthing ......但它相对于 react-native 没有改变。
      【解决方案6】:

      对于遇到此问题且没有解决方案的任何其他人,如果您已链接库,请确保在位于 ProjectName/androidsettings.gradle 文件中包含您的应用程序,如下所示:@987654323 @。我忘记了:app,它正在构建和安装第 3 方库,但不是实际的应用程序,导致了问题。

      【讨论】:

        【解决方案7】:

        有时您会收到此错误,因为您没有卸载该应用程序的另一个先前版本,在 LG 手机上您必须转到应用程序的设置并卸载该应用程序,这发生在我身上。

        【讨论】:

          【解决方案8】:

          如果您在应用程序 build.gradle 文件中启用了构建变量,就会发生这种情况。

          当 react-native 运行时,它似乎在你的应用程序 id 前加上 test 或其他东西,这会改变某些文件中的包名称,但其他文件保持不变。您的应用程序找不到 .MainActivity,因为它实际上不存在于生成的新包命名空间中。

          以下是尝试解决此问题的一些方法:

          • 在 Manifest 文件中使用 FQDN 作为应用程序类和活动类的名称。
          • 用这个one 替换你的android cli 文件。这是/node_modules/react-native/local-cli/runAndroid 中的文件

          这应该可以解决您的问题。

          【讨论】:

          • 我认为你是对的,但我不知道如何解决它。 Android Studio 似乎会自动在我的包名称末尾添加一个 .debug 。 Build Variants 选项卡有“debug”和“release”作为选项,但似乎无法删除它们。此外,文档developer.android.com/studio/build/build-variants.html 中的信息似乎缺乏这方面的信息。
          • 我目前正在开发一个项目,我需要在部署之前支持构建变体。我会努力解决这个问题并用解决方案更新答案。
          【解决方案9】:

          如果你有 appIdSuffix,你应该将它添加到命令中以响应本机运行命令。

          eg.   react-native run-android --appIdSuffix beta
          

          应该为 package.json 添加快捷方式并通过 npm 运行。

          ...
          "scripts": {
           ...
            "android-beta": "react-native run-android --appIdSuffix beta",
          },
          

          然后运行:

          npm run android-beta
          

          【讨论】:

          • 你让我免于轻微头痛
          【解决方案10】:

          当我卸载应用程序并尝试再次使用react-native run-android 安装时,出现此问题。

          以下对我有用:
          1. 从设置菜单进入应用程序列表。
          2. 您将在列表中看到您的应用程序,并在左侧显示一条消息“未为此用户安装应用程序”
          3. 在设置中打开该应用程序,然后单击右上角的菜单图标并选择“为所有用户卸载”。 希望对您有所帮助!

          【讨论】:

            【解决方案11】:

            我从我的设备上卸载了该应用程序,但根本无法在“设置”>“应用程序”中看到它。在我完全卸载应用程序后,错误终于消失了:

            adb uninstall com.appname
            

            【讨论】:

            • 谢谢!我的 Android 设备上有一个工作资料(除了个人资料之外),我已经从其中一个而不是另一个上卸载了它。
            • 解决了我的问题!
            • 也为我工作。
            • 天哪。幸运的是我发现了这个。为什么错误信息如此具有误导性?
            • @Fran 伙计,你是救世主..我欠你..谢谢哥们。
            【解决方案12】:

            就我而言.. 上述解决方案均无效。 然后,我找到了它的原因,我以前安装了具有相同包名的应用程序。我已经从手机上卸载了它,但是因为我有奥利奥设备..它也安装在另一个用户中。所以,通过从所有用户卸载..解决了我的问题。 这对您的情况可能没有帮助..但这仍然是我的解决方法。

            【讨论】:

            • 很多人已经提到他们先卸载了应用程序。
            【解决方案13】:

            我通过在手机上手动安装调试应用解决了。

            为此,请转到 [Project_Path]\android\app\build\outputs\apk\debug\app-debug.apk

            将此app-debug.apk复制到您的移动设备。

            现在,只需将其正常安装到您的手机中即可。

            【讨论】:

              【解决方案14】:

              好吧,当我们手动从手机卸载 apk 时会发生这种情况。它显示 MainActivity 不存在。 解决方案:在设置中的应用程序中为所有用户卸载应用程序实例并使用react-native run-android再次运行将解决您的问题

              【讨论】:

                【解决方案15】:

                您可能已经删除/卸载了您的应用,但是当您检查您的设置/应用时,您可以看到它并没有完全卸载。

                • 转到设置。
                • 转到应用程序。
                • 选择您的应用程序。 (在这里,您可以验证您的应用是否未正确卸载)。
                • 打开右上角的溢出菜单并为所有用户选择卸载。 完毕。尝试安装,然后再次启动您的应用。

                Source

                【讨论】:

                • 它对我有用,不知何故我为不是当前用户安装了它...
                【解决方案16】:

                我尝试了上面发布的所有答案,但我的用例没有任何结果。

                最终通过这样的执行解决了:

                react-native run-android --variant=alphaDebug

                如果应用中有多种风味,那么我们必须提到变体 通过命令行

                【讨论】:

                  【解决方案17】:

                  就我而言,我在 google-services.json(来自 Firebase)中有错误的 package_name (client.client_info.android_client_info.package_name)。正如@parker 提到的,它必须匹配这四个值。

                  【讨论】:

                    【解决方案18】:

                    这发生在我更改我的项目包名称后。 我在这里尝试了其他一些答案,但在我手动删除android/build 目录并重新运行react-native run-android 强制从src 重建应用程序之前没有任何效果。 结果发现构建被缓存,包括对旧包名称的引用。

                    【讨论】:

                      【解决方案19】:

                      我对同一问题的看法略有不同。

                      我没有使用 react,但是我确实遇到了同样的问题。

                      我尝试了此页面上的所有解决方案,但奇怪的是,每个解决方案都工作了一次。但是问题又来了。

                      最后我发现这样做:

                      1. adb 卸载 com.appname

                      2. 随后重启手机

                      自发现以来每次都解决问题。

                      使用三星 S8 和 Android 3.4.1。除了 OKHttp,没有其他疯狂的库。在 Mac 上运行。

                      【讨论】:

                        【解决方案20】:

                        adb 卸载包名称 为我工作。 例如:adb uninstall com.abc

                        【讨论】:

                        • 就在几天前,我对此表示赞同,现在不得不再回到这里一次。真的很有帮助。
                        【解决方案21】:

                        华为 p20 精简版。 试图从无法安装的下载中安装应用程序。回去运行在android studio中安装并得到错误 错误 3 mainactivity 不存在。 不得不删除用户“私人空间” 解决问题

                        【讨论】:

                          【解决方案22】:

                          确保你在 gradle 中的 applicationid 和包名相同

                          【讨论】:

                            【解决方案23】:

                            我也有类似的问题。

                            BUILD SUCCESSFUL in 38s
                            27 actionable tasks: 27 executed
                            info Connecting to the development server...
                            info Starting the app on "a77c634"...
                            Starting: Intent { cmp=com.helloworld/.MainActivity }
                            Error type 3
                            Error: Activity class {com.helloworld/com.helloworld.MainActivity} does not exist.e
                            

                            对我来说,我的目标设备有多个帐户,因此在为另一个 ime 运行该应用之前,请确保从所有帐户中卸载它。

                            【讨论】:

                              【解决方案24】:

                              在使用 react-native-config 时,我在使用 applicationIdSuffixproductFlavors 时遇到了这个问题。

                              --appIdSuffix=[YOUR_FLAVOR] 添加到我的react-native run-android 命令就可以了。 例如

                              ...
                                  flavorDimensions "env"
                                  productFlavors {
                                      dev {
                                          resValue "string", "app_name", "[DEV] My App"
                                          applicationIdSuffix ".dev"
                                      }
                                      staging {
                                          resValue "string", "app_name", "[STG] My App"
                                          applicationIdSuffix ".staging"
                                      }
                                      prod {
                                          resValue "string", "app_name", "My App"
                                      }
                                  }
                              ...
                              
                              ...
                              "scripts": {
                                  "android": "react-native run-android --variant=devDebug --appIdSuffix=dev",
                                  "android:staging": "react-native run-android --variant=stagingDebug --appIdSuffix=staging",
                                  "android:prod": "react-native run-android --variant=prodDebug",
                                  "android:staging:release": "react-native run-android --variant=stagingRelease --appIdSuffix=staging",
                                  "android:prod:release": "react-native run-android --variant=prodRelease",
                              },
                              ...
                              

                              【讨论】:

                                【解决方案25】:

                                一个对我有用的。如果您不小心从连接的设备上卸载了应用程序,则可以使用

                                1. 删除apk:sudo rm -rf android/app/build/outputs/apk/debug
                                2. 然后:sudo npm run android

                                【讨论】:

                                  【解决方案26】:

                                  adb 卸载 com.packagename。它对我有用。

                                  【讨论】:

                                    【解决方案27】:

                                    如果您正在下载基于 yarn 的应用程序并使用 npm install 而不是 yarn install 来获取依赖项,也可能会导致这种情况。 所以尝试重新下载项目并使用合适的项目。

                                    【讨论】:

                                      【解决方案28】:

                                      cd 安卓

                                      然后

                                      ./gradlew uA

                                      为我工作。

                                      【讨论】:

                                        猜你喜欢
                                        • 1970-01-01
                                        • 2017-01-10
                                        • 1970-01-01
                                        • 1970-01-01
                                        • 1970-01-01
                                        • 1970-01-01
                                        • 2022-11-19
                                        • 2021-02-28
                                        • 1970-01-01
                                        相关资源
                                        最近更新 更多