【问题标题】:Facing Error When Linking A Library With React Native将库与 React Native 链接时遇到错误
【发布时间】:2020-04-20 14:28:41
【问题描述】:

我安装了一个名为 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.

【问题讨论】:

  • 你能告诉我你现在使用的是哪个版本的 react native 吗?在我的情况下,这个包运行成功。
  • "react-native": "0.60.5"

标签: javascript reactjs react-native npm react-native-android


【解决方案1】:

如果您使用 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);
}

希望对你有帮助。

【讨论】:

  • 不,它在 android studio 中给了我错误。我无法构建
  • 能否分享android/build.gradle 文件中的buildscript 部分?
  • 请将android/gradle/wrapper/gradle-wrapper.properties 中的distributionUrldistributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip 更改为distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-all.zip
  • 之后,只需进入您的 react-native 项目文件夹并从项目的 android 目录运行 ./gradlew clean
【解决方案2】:

/home/zain/Desktop/Kolachi/demo/pos-proto/android/app/src/main/java/com/resturantapp/MainApplication.java:82: 错误:不兼容的类型:MainReactPackage 无法转换为 int packages.add(new MainReactPackage(),

这是错误,你能检查一下为什么在你的 android src/main.java/com/restaurantapp 文件夹中的 MainApplication.java 中添加了 MainReactPackage。实际上删除或注释掉下面的行并再次运行该项目。

packages.add(new MainReactPackage(),

您不再需要添加软件包。 RN0.60及以上支持自动链接。我注释掉了我的包,因为它们不再需要了。

【讨论】:

  • 删除该行后,我的应用程序已安装在我的手机中,但我面临另一个错误,即AppState is not available is this app
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多