【问题标题】:class must either be declared abstract or implement abstract method called createJSModules in ReactPackage类必须被声明为抽象或在 ReactPackage 中实现名为 createJSModules 的抽象方法
【发布时间】:2020-10-14 01:35:37
【问题描述】:

我正在关注 android 的 Native Module 文档: https://facebook.github.io/react-native/docs/native-modules-android.html#docsNav

我的包裹目前看起来像这样

package com.myCompany.asqgooglesignin;

import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class ASQGoogleSignInPackage implements ReactPackage {

    @Override
    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
        return Collections.emptyList();
    }

    @Override
    public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
        List<NativeModule> modules = new ArrayList<>();
        modules.add(new ASQGoogleSignIn(reactContext));
        return modules;
    }
}

我收到以下错误

类必须声明为抽象或实现抽象方法 在 ReactPackage 中调用 createJSModules

文档没有提到任何关于 createJSModules 的内容,我应该将其包含在内吗?正确的做法是什么?

这是使用最新的依赖项

implementation 'com.facebook.react:react-native:+'

【问题讨论】:

    标签: android react-native react-native-native-module


    【解决方案1】:

    yarn install 在我的情况下有所帮助,因为 gradle 正在寻找 react-native 库 aar 文件,并且由于它不存在,正在回退到旧版本(0.20.1 - 你可以在附件中看到它图片)

    【讨论】:

    • 这绝对是问题所在。运行 yarn installnpm install 对我没有帮助,但 Gradle 出于某种原因喜欢下载和使用旧版本的 React Native。
    【解决方案2】:

    我认为这个方法在 React Native 0.47 版本中被移除了。你确定你的 React Native 版本在 npm 中是最新的吗?您可以通过在项目目录中运行 react-native -v 来检查您的版本。高于此的任何版本都不应要求实现该方法。如果您不想更改版本,请尝试使用 return Collections.emptyList(); 简单地实现该方法。

    【讨论】:

    • 我必须将它包含在我的项目中(这是一个模块)并且它没有使用maven( '.../node-modules/react-native/android" ) bit
    【解决方案3】:

    问题

    Gradle 在您提供的存储库中找不到最新版本的 react-native。

    原因

    由于版本使用+

    implementation 'com.facebook.react:react-native:+'
    

    gradle 将在其已知存储库中搜索可用的最新 react-native 版本。也许是有意的,发布到默认 maven 存储库的最新版本是 0.20.1 in 2016。该版本在ReactPackage interface 中有一个createJSModules 方法,但在version 0.47 中已删除。

    这可能就是为什么使用+ 的原因——通过使 maven Central 过时多年,它间接确保了开发人员让 NPM 管理他们的 react-native 版本,而不是依赖于 Maven Central。

    修复

    只需更新您的存储库列表以包含您的 node_modules 目录:

    在 build.gradle 中

    repositories {
        mavenLocal()
        // This was missing an needs to be added to your list
        maven {
            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
            url("$rootDir/../node_modules/react-native/android")
        }
        google()
        jcenter()
        maven { url 'https://www.jitpack.io' }
    }
    

    疑难解答

    如果还是失败,请确认该目录存在:

    <path-to-your-project>/node_modules/react-native/android/com/facebook/react/react-native
    

    如果没有,请确保 react-native 已在 project.json 文件中列出,然后运行 ​​rm -rf node_modules &amp;&amp; yarn install

    【讨论】:

      猜你喜欢
      • 2015-02-28
      • 1970-01-01
      • 2015-06-29
      • 1970-01-01
      • 1970-01-01
      • 2017-08-17
      • 2021-11-24
      • 1970-01-01
      相关资源
      最近更新 更多