Класс должен быть объявлен как абстрактный или реализовать абстрактный метод с именем 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