【问题标题】:React native: error: cannot find symbol after upgradeReact Native:错误:升级后找不到符号
【发布时间】:2018-09-07 14:52:23
【问题描述】:

您好,在导入我的 react 原生项目 expo 并升级 react 后,我​​遇到了以下问题。

C:\Users\user\gramic\android\app\src\main\java\com\shop\MainApplication.java:5: 错误:找不到符号导入 com.facebook.react.ReactApplication; ^ 符号:类 ReactApplication 位置:包 com.facebook.react C:\Users\user\gramic\android\app\src\main\java\com\shop\MainApplication.java:13: 错误:找不到符号导入 com.facebook.react.ReactNativeHost; ^ 符号:类 ReactNativeHost 位置:包 com.facebook.react C:\Users\user\gramic\android\app\src\main\java\com\shop\MainApplication.java:21: 错误:找不到符号公共类 MainApplication 扩展 应用程序实现 ReactApplication { ^ 符号:类 ReactApplication C:\Users\user\gramic\android\app\src\main\java\com\shop\MainApplication.java:23: 错误:找不到符号私有最终 ReactNativeHost mReactNativeHost = 新的 ReactNativeHost(this) { ^ 符号:类 ReactNativeHost 位置:类 MainApplication C:\Users\user\gramic\android\app\src\main\java\com\shop\MainApplication.java:40: 错误:找不到符号 public ReactNativeHost getReactNativeHost() { ^ 符号:类 ReactNativeHost 位置:类 MainApplication C:\Users\user\gramic\android\app\src\main\java\com\shop\MainActivity.java:5: 错误:MainActivity 不是抽象的,并且不会覆盖抽象 ReactActivity 公共类 MainActivity 中的方法 getPackages() 扩展反应活动 { ^ C:\Users\user\gramic\android\app\src\main\java\com\shop\MainApplication.java:23: 错误:找不到符号私有最终 ReactNativeHost mReactNativeHost = 新的 ReactNativeHost(this) { ^ 符号:类 ReactNativeHost 位置:类 MainApplication C:\Users\user\gramic\android\app\src\main\java\com\shop\MainApplication.java:39: 错误:方法没有覆盖或实现超类型中的方法 @Override ^

    package com.shop;

import android.app.Application;

import com.facebook.react.ReactApplication;
import com.oblador.vectoricons.VectorIconsPackage;
import com.corbt.keepawake.KCKeepAwakePackage;
import com.oblador.vectoricons.VectorIconsPackage;
import com.github.yamill.orientation.OrientationPackage;
import com.BV.LinearGradient.LinearGradientPackage;
import com.brentvatne.react.ReactVideoPackage;

import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.shell.MainReactPackage;
import com.facebook.soloader.SoLoader;

import java.util.Arrays;
import java.util.List;

public class MainApplication extends Application implements ReactApplication {

  private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
    @Override
    public boolean getUseDeveloperSupport() {
      return BuildConfig.DEBUG;
    }

    @Override
    protected List<ReactPackage> getPackages() {
      return Arrays.<ReactPackage>asList(
          new MainReactPackage(),
            new VectorIconsPackage(),
            new VectorIconsPackage(),
            new KCKeepAwakePackage(),
            new VectorIconsPackage(),
            new OrientationPackage(),
            new LinearGradientPackage(),
            new ReactVideoPackage()

      );
    }
  };

  @Override
  public ReactNativeHost getReactNativeHost() {
    return mReactNativeHost;
  }

  @Override
  public void onCreate() {
    super.onCreate();
    SoLoader.init(this, /* native exopackage */ false);
  }
}

【问题讨论】:

    标签: java android facebook reactjs react-native


    【解决方案1】:

    首先:使用 yarnnpm 安装所有依赖项;

    第二:使用下面的代码链接iOS和Android原生代码的原生依赖;

    react-native link
    

    第三:这个错误可能是因为你的RN版本与Android的build.gradle版本不同。当您创建一个 react-native 应用程序时,它可能会创建 android 应用程序,例如:

    android/app/build.gradle
    
    implementation "com.facebook.react:react-native:+"
    

    所以,检查你的 node_modules 文件夹,寻找 react-native 文件夹并寻找一个带有数字的文件夹,这些数字是 react-native 版本。对我来说是 0.58.3 然后更新 android/app/build.gradle

    implementation "com.facebook.react:react-native:0.58.3"
    

    就是这样。

    【讨论】:

    • 必须添加:implementation "com.facebook.react:react-native:0.58.4" 匹配我的 package.json 中的版本
    • 您可以使用此信息来设置 build.gradle 的 react-native 版本。
    • 这对我有用。谢谢你。这个问题对我来说是突然出现的,然后我意识到react-native已经发布了一个新版本0.59,所以我将它设置为0.58.6
    【解决方案2】:

    我在尝试升级 React Native 时也遇到了这些错误。 我见过人们通过清理 gradlew 缓存(Android 项目文件夹中的./gradlew clean)或删除整个 .gradle 文件夹(也在 Android 项目文件夹中)来解决这些问题。

    但这对我不起作用。我的问题在android/build.gradle 文件中。我以前必须为另一个包添加一个 Maven 存储库,并且这样做了:

    maven {
            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
            url "$rootDir/../node_modules/react-native/android"
    
            // The following is NOT the right way
            url "https://maven.google.com"
        }
    

    但是在Android docs 中说每个maven 存储库都应该在它自己的maven {} 块中。

    因此,对我有用的解决方案就是这样做:

    maven {
            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
            url "$rootDir/../node_modules/react-native/android"
        }
    
    maven {
            url "https://maven.google.com"
        }
    

    希望它会有所帮助,并祝您反应升级好运! ;)

    【讨论】:

    • 这不是一个好主意,react-native 库和其他库在版本 X 的 package.json 中,因此当您从其他源下载时,版本可能与 X 不同。
    • @Marcus 为什么不是个好主意?我没有看到您的评论和我的答案之间的链接,因为我没有谈论其中的库版本......
    • 尝试了所有其他建议,这是对我有用的建议
    • 让我告诉你,你拯救了我的一天!
    【解决方案3】:

    在将我的 react-native 项目与 Expo 分离后,我也发生了这种情况。

    正如我在这里回答的:

    My answer

    为了解决这个问题,我必须:

    1. 在 package.js 我改变了:

      "react-native": "https://github.com/expo/react-native/archive/sdk-29.0.0.tar.gz",

      到:

      "react-native": "^0.57.8",

    2. 删除node_modules文件

    3. 运行 npm 安装
    4. 从 android 项目中删除“.gradle”文件夹并同步项目。

    【讨论】:

      【解决方案4】:

      我有一个类似的问题,我发现的所有建议都没有帮助,所以我放弃了这个给有同样问题的其他人。

      对我来说,它原来是一个第 3 方包 (pushwoosh-react-native-plugin),它在其 build.gradle 文件中编译/实现了 react-native 的静态版本。

      我设法找到它,通过

      • 转到我的 app/build.gradle
      • 注释掉我对依赖项的所有编译/实现
      • 一一添加,直到出现同样的错误

      如上所述: 结果是 pushwoosh build.gradle 文件定义了以下依赖项:

      dependencies {
          ...
          compile 'com.facebook.react:react-native:0.20.1'
          ...
      }
      

      所以我就直接把它改成了“+”

      dependencies {
          ...
          compile 'com.facebook.react:react-native:+'
          ...
      }
      

      “+”表示: 每个领先的 SEMVER 组件都与提供的模式匹配的最新可用版本

      【讨论】:

        【解决方案5】:

        在我重命名应用程序中的包后,我的问题出现了。我用它来重命名它们:

        npm install react-native-rename -g
        react-native-rename "MyApp" -b com.mycompany.myapp
        

        还有几行我需要手动更新:

        • android/app/src/main/java/com/winryde/MainActivity.java
        • android/app/src/main/java/com/winryde/MainApplication.java
        • android/app/src/debug/java/com/winryde/ReactNativeFlipper.java

        我刚刚搜索了 com.companyname 并更改为新名称。

        【讨论】:

          【解决方案6】:

          我也遇到了同样的问题,我用下面的命令解决了

          react-native run-android
          

          我知道PackageList文件会在我们使用上述命令并至少运行一次android应用程序时创建,然后如果我们同步我们的项目,您会看到错误将消失。

          【讨论】:

            猜你喜欢
            • 2019-11-18
            • 2023-01-05
            • 2022-08-04
            • 1970-01-01
            • 2016-03-10
            • 1970-01-01
            • 2023-02-13
            • 2022-11-07
            • 1970-01-01
            相关资源
            最近更新 更多