首页 > 解决方案 > 将库与 React Native 链接时遇到错误

问题描述

我安装了一个名为react-native-imei的库。安装后,我已将此库与 React Native 相关联,例如react-native link react-native-imei. 在我运行项目之后,我遇到了错误。错误如下所述。

> Task :react-native-imei:compileDebugJavaWithJavac

> Task :realm:forwardDebugPort
8083

> Task :app:compileDebugJavaWithJavac FAILED

Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/5.4.1/userguide/command_line_interface.html#sec:command_line_warnings
329 actionable tasks: 22 executed, 307 up-to-date
Note: /home/zain/Desktop/Kolachi/demo/pos-proto/node_modules/react-native-imei/android/src/main/java/codes/simen/IMEI/RNImeiModule.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
* daemon not running; starting now at tcp:5037
* daemon started successfully
/home/zain/Desktop/Kolachi/demo/pos-proto/android/app/src/main/java/com/resturantapp/MainApplication.java:82: error: incompatible types: MainReactPackage cannot be converted to int
      packages.add(new MainReactPackage(),
                   ^
Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output
1 error

FAILURE: Build failed with an exception.

标签: javascriptreactjsreact-nativenpmreact-native-android

解决方案


如果您使用 react-native>=60.0,则无需使用react-native link react-native-imei. 它将自动链接。

由于这个包读取手机的状态,你必须添加<uses-permission android:name="android.permission.READ_PHONE_STATE" />android/app/src/main/AndroidManifest.xml这个文件中。

在 SDK 版本 23 之前的设备上,如果权限出现在清单中,则会自动授予权限。否则,您必须遵循此程序。

import { PermissionsAndroid } from 'react-native';

try {
  const granted = await PermissionsAndroid.request(
    PermissionsAndroid.PERMISSIONS.READ_PHONE_STATE,
    {
      title: "Phone State's Permission",
      message: "This app needs access to your phone's state",
      buttonNeutral: "Ask Me Later",
      buttonNegative: "Cancel",
      buttonPositive: "OK"
    }
  );
  if (granted === PermissionsAndroid.RESULTS.GRANTED) {
    console.log("You can read phone's state");

    IMEI.getImei().then(imeiList => {
      console.log("imeiList"); // prints ["AABBBBBBCCCCCCD"]
      console.log(imeiList); // prints ["AABBBBBBCCCCCCD"]
    });
  } else {
    console.log("Permission denied");
  }
} catch (err) {
  console.warn(err);
}

希望它会帮助你。


推荐阅读