class必须声明为abstract或在ReactPackage中实现名为createJSModules的抽象方法

时间:2018-04-20 13:31:23

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

我正在关注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;
    }
}

我收到了以下错误

  

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

文档中没有提及createJSModules我应该包含的内容以及正确的方法吗?

这是使用最新的依赖

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

在我的情况下,

yarn install有所帮助,因为gradle正在寻找react-native库aar文件,并且由于该文件不存在,它回退到了旧版本(0.20.1-您可以在所附图片)

attached image

答案 2 :(得分:0)

问题

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管理其本机版本,而不是依靠Maven Central。 / p>

修复

只需更新您的存储库列表以包括您的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

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