反应本地android无法识别

时间:2019-02-09 06:37:06

标签: reactjs react-native

在运行react-native run-android之前,我运行react-native android将项目设置为Android。好吧,这是我的常用目录

09/02/2019  02:14 PM    <DIR>          .
09/02/2019  02:14 PM    <DIR>          ..
08/02/2019  09:27 AM                74 .gitignore
08/02/2019  09:27 AM                 3 .watchmanconfig
08/02/2019  09:27 AM             3,186 App.js
08/02/2019  09:27 AM               726 app.json
08/02/2019  09:27 AM    <DIR>          assets
08/02/2019  09:27 AM               107 babel.config.js
08/02/2019  09:27 AM    <DIR>          components
09/02/2019  02:01 PM               273 generate-android-project.js
08/02/2019  09:27 AM             1,032 google-services.json
08/02/2019  09:27 AM             1,074 LICENSE
09/02/2019  02:22 PM    <DIR>          node_modules
09/02/2019  02:14 PM           300,591 package-lock.json
09/02/2019  02:21 PM               682 package.json
08/02/2019  09:27 AM                61 README.md
08/02/2019  09:27 AM    <DIR>          screens
08/02/2019  09:27 AM    <DIR>          utils
09/02/2019  02:21 PM           254,814 yarn.lock

当我尝试

  

react-native android

此消息出现

Unrecognized command 'android'
Run react-native --help to see list of all available commands

然后这是我的解决方法

  1. 尝试react-native upgrade 不起作用
  2. 尝试yarn add react-native-cli 不起作用
  3. 尝试yarn 也不起作用
  4. yarn add android 不起作用
  5. 引用此link

        const fs = require('fs');
        const generate = require('react-native/local-cli/generate/generate.js');
    
        generate([
          '--platform', 'android',
          '--project-path', process.cwd(),
          '--project-name', JSON.parse(
            fs.readFileSync('package.json', 'utf8')
          ).name,
        ]);
    

    node generate-android-project.js 结果相同,不起作用

  6. react-native upgrade 不起作用
  7. npm install 仍然不起作用
  8. npm run run:android

    npm ERR! missing script: run:android
    

如何在Android Emulator或Real Devices上正确运行我的项目?

谢谢

更新1:package.json

{
  "main": "node_modules/expo/AppEntry.js",
  "scripts": {
    "start": "expo start",
    "android": "expo start --android",
    "ios": "expo start --ios",
    "eject": "expo eject",
    "start:android": "adb shell am start -n com.airbnb.android.react.maps.example/.MainActivity",
    "run:android": "./gradlew installDebug && npm run start:android"

2 个答案:

答案 0 :(得分:0)

尝试使用以下项目启动项目

react-native init yourapp

然后在连接手机或打开模拟器时运行此

react-native run-android

答案 1 :(得分:0)

我认为您的问题是您混淆了Exporeact-native init,这是创建react-native应用程序的两种不同方式。

您的package.json建议您使用expo脚本中的startexpo start是最大的礼物。

这是我拥有的package.json应用程序中的示例expo

{
  "main": "node_modules/expo/AppEntry.js",
  "scripts": {
    "start": "expo start",
    "android": "expo start --android",
    "ios": "expo start --ios",
    "eject": "expo eject"
  },
  "dependencies": {
    "expo": "^32.0.0",
    "react": "16.5.0",
    "react-native": "https://github.com/expo/react-native/archive/sdk-32.0.0.tar.gz",
  },
  "devDependencies": {
    "babel-preset-expo": "^5.0.0"
  },
  "private": true
}

开始世博项目

运行expo应用程序的最简单方法是在项目目录的终端窗口中运行以下命令

expo start

正在启动时,您应该打开模拟器。两者都启动完成后,您应该在终端窗口中看到一些这样的选项

expo terminal

在终端窗口中键入a应该会在Android模拟器上启动expo项目。

弹出

尝试运行gradlew不适用于expo项目,因为expo抽象了android本机代码。我确定如果您检查文件夹,则没有名为androidios的目录。您已提供了文件夹结构,它看起来与我在expo项目中拥有的文件夹结构非常相似。

example of expo project folder structure

要创建这些文件夹(如果您使用的是expo且不需要访问本机代码,则不需要此文件夹),可以通过运行expo eject

您可以在此处https://docs.expo.io/versions/latest/expokit/eject/上了解有关使用此命令的更多信息,基本上它将expo项目转换为完整的react-native init项目,您可以在其中访问本机代码并链接当前不存在的程序包受expo支持,但是这并不是轻率的决定

react-native init

使用react-native init创建的项目与使用expo创建的项目具有非常不同的结构。它们在本机代码所在的文件夹内包含以下文件夹androidios

要运行使用react-native init创建的应用,您可以使用其中一个

react-native run-androidreact-native run-ios

这里是package.json创建的项目的示例react-native init

{
  "name": "MyAwesomeApp",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node node_modules/react-native/local-cli/cli.js start",
    "test": "jest"
  },
  "dependencies": {
    "react": "16.6.3",
    "react-native": "0.58.4",
  },
  "devDependencies": {
    "babel-core": "^7.0.0-bridge.0",
    "babel-jest": "24.1.0",
    "jest": "24.1.0",
    "metro-react-native-babel-preset": "0.51.1",
    "react-test-renderer": "16.6.3"
  },
  "jest": {
    "preset": "react-native"
  }
}

请注意,没有提及expo

以下是使用react-native init创建的项目的示例文件夹结构

folder structure for react-native init project