Класс должен быть объявлен как абстрактный или реализовать абстрактный метод с именем createJSModules в ReactPackage

Я следую документации по родному модулю для Android: https://facebook.github.io/react-native/docs/native-modules-android.html

Моя посылка сейчас выглядит так

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;
    }
}

и я получаю следующую ошибку

класс должен быть объявлен как абстрактный или реализовать абстрактный метод с именем createJSModules в ReactPackage

В документации ничего не говорится о createJSModules я должен включить это и как правильно сделать это?

Это использует последнюю зависимость

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

1 ответ

Решение

Я думаю, что этот метод был удален в React Native версии 0.47. Вы уверены, что ваша версия React Native обновляется до npm? Вы можете проверить свою версию, запустив react-native -v из каталога вашего проекта. Любая версия выше этого не должна требовать реализации этого метода. Если вы не хотите менять свою версию, попробуйте просто реализовать метод с return Collections.emptyList();,

yarn install помог в моем случае, потому что gradle искал файл aar с собственной библиотекой для реакции, и, поскольку его не было, возвращался к старой версии (0.20.1 - вы можете увидеть это на прикрепленном изображении)

Проблема

Gradle не может найти последнюю версию react-native в предоставленных вами репозиториях.

Причина

Из-за + используется для версии:

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

gradle будет искать в своих известных репозиториях последнюю доступную версию, поддерживающую реакцию. Возможно, намеренно последняя версия, опубликованная в репозитории maven по умолчанию, была 0.20.1 в 2016 году. В этой версии есть createJSModulesв интерфейсе ReactPackage, но он был удален в версии 0.47.

Наверное, поэтому + используется - сохраняя maven central в актуальном состоянии много лет назад, это косвенно гарантирует, что разработчики позволяют NPM управлять своей собственной версией, а не полагаться на 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

Если нет, убедитесь, что в вашем файле project.json указан response-native, а затем запустите rm -rf node_modules && yarn install

Другие вопросы по тегам