class 必须声明为抽象的或在 ReactPackage 中实现名为 createJSModules 的抽象方法
class must either be declared abstract or implement abstract method called createJSModules in ReactPackage
我正在关注 android 的本机模块文档:
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;
}
}
我收到以下错误
class must either be declared abstract or implement abstract method
called createJSModules in ReactPackage
文档没有提到任何关于 createJSModules
我应该包括它以及这样做的正确方法是什么?
这是使用最新的依赖项
implementation 'com.facebook.react:react-native:+'
我认为这个方法在 React Native 版本 0.47 中被删除了。你确定你的 React Native 版本在 npm 中是最新的吗?您可以通过 运行 react-native -v
从您的项目目录中检查您的版本。高于此的任何版本都不应要求实现该方法。如果您不想更改版本,请尝试使用 return Collections.emptyList();
.
简单地实现该方法
yarn install
对我的情况有帮助,因为 gradle 正在寻找 react-native 库 aar 文件,并且由于它不存在,所以正在回退到旧版本(0.20.1 - 你可以在附图中看到它)
问题
Gradle 在您提供的存储库中找不到 react-native 的最新版本。
原因
由于+
用于版本:
implementation 'com.facebook.react:react-native:+'
gradle 将在其已知存储库中搜索可用的最新 react-native 版本。也许是故意的,发布到默认 Maven 存储库的最新版本是 0.20.1 in 2016. That version has a createJSModules
method in the ReactPackage interface but this was removed in version 0.47.
这可能就是使用 +
的原因——通过让 maven central 过时很多年,它间接确保开发人员让 NPM 管理他们的 react-native 版本,而不是依赖于Maven 中心。
修复
只需更新您的存储库列表以包含您的 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 && yarn install
我正在关注 android 的本机模块文档: 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;
}
}
我收到以下错误
class must either be declared abstract or implement abstract method called createJSModules in ReactPackage
文档没有提到任何关于 createJSModules
我应该包括它以及这样做的正确方法是什么?
这是使用最新的依赖项
implementation 'com.facebook.react:react-native:+'
我认为这个方法在 React Native 版本 0.47 中被删除了。你确定你的 React Native 版本在 npm 中是最新的吗?您可以通过 运行 react-native -v
从您的项目目录中检查您的版本。高于此的任何版本都不应要求实现该方法。如果您不想更改版本,请尝试使用 return Collections.emptyList();
.
yarn install
对我的情况有帮助,因为 gradle 正在寻找 react-native 库 aar 文件,并且由于它不存在,所以正在回退到旧版本(0.20.1 - 你可以在附图中看到它)
问题
Gradle 在您提供的存储库中找不到 react-native 的最新版本。
原因
由于+
用于版本:
implementation 'com.facebook.react:react-native:+'
gradle 将在其已知存储库中搜索可用的最新 react-native 版本。也许是故意的,发布到默认 Maven 存储库的最新版本是 0.20.1 in 2016. That version has a createJSModules
method in the ReactPackage interface but this was removed in version 0.47.
这可能就是使用 +
的原因——通过让 maven central 过时很多年,它间接确保开发人员让 NPM 管理他们的 react-native 版本,而不是依赖于Maven 中心。
修复
只需更新您的存储库列表以包含您的 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 && yarn install