react-native 在导入android原生库容易遇到的问题

在rn开发中,若是遇到了比较特殊的功能,若是没有现成的轮子的话,一般咱们须要去连接原生库,而且封装成RN组件提供给js调用,做为前端开发者,一般咱们对原生端的报错处理不太懂,在处理和原生功能相关问题时,推荐直接使用android-studio进行开发(项目名->android->app->build.gradle),它能够辅助咱们方便的下载第三方库,而且闪退等问题咱们能够在log中查看的很清晰.javascript

下面列出了咱们在连接原生库中经常遇到的一些问题前端

1.java

这个错误经常出如今第一次封装高版本react-native的library或者引用老版本的库的时候容易出现,缘由是 node

在安卓中 @Override是复写父类的方法,而它的父类没有这个方法,因此不能复写。

由于你报错的这个方法在老版本的RN中是存在的,估计这个三方是之前用的老版本,新版本没有这个方法了,注释掉就能够了。react

这个错误也是很是常见的, 这个问题一般发生在你的某个地方缺乏了build.gradle文件或者build.gradle文件存在问题,如图所示, 咱们能够看到是咱们的react-native-citcon库里面有问题,这个时候咱们能够去检查下node_module里面是否有这个库,build.gradle是否存在

若是你喜欢手动link第三方库(非react-native link),那么这个问题你可能会遇到,缘由很简单,引入库的时候,须要在setting.gradle里面指明库的位置,直接编译是找不到的 以下图android

这个步骤通常引入库都会有说明

在咱们引入原生的aar库不注意会出现这个问题,我明明都compile写了啊,路径也是对的,库中也指明了flatDir路径,可是为何仍是报找不到路径呢?其实在引入aar的时候, 咱们须要在project的build.gradle中去指定aar的目录,以下图所示

这个问题的改法简单粗暴, 进入到红框中的地址,将.lock结尾的文件干掉

咱们在集成citcon支付到咱们项目中,遇到了一个aar的class和原有项目的class冲突状况,看报错是由于alipay这个class有多个入口,就意味着咱们compile了两个alipay的jar到咱们的项目里,原有项目的jar和引入第三方库的jar冲突理论上应该是个很常见的状况,官方提供了方法

implementation(name: '×××××××aar包', ext: 'aar') {
        exclude module: 'gson'
    }
复制代码

可是在咱们项目中尝试多种方式过滤不掉, 这时候咱们采用第二种方案, 咱们将aar解压,拷贝里面的java文件出来, 而且采用provided的方式引入alipay,这样咱们在编译的时候使用最新的alipay 编译,可是它最终是不会打包到咱们的项目里,咱们项目里面仍是使用的之前的alipay,后续如果咱们想用aar中的alipay,咱们就能够直接将provided改为compiledwindows

compile "com.facebook.react:react-native:+"
    compile files('libs/volley.jar')
    provided files('libs/alipaySdk-20180403.jar')
    compile files('libs/wechat-sdk-android-without-mta-5.1.6.jar')
复制代码
java.io.IOException: Could not delete path 'F:\xxxx\android\app\build\intermediates\transforms\dex\debug\folders\1000'.
复制代码

解决:(权限问题致使)以管理员身份运行控制台再运行react-native run-android,若是还报错手动删除'F:\xxxx\android\app'目录下的build文件夹。react-native

FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':react-native-device-info:prepareComAndroidSupportAppcompatV72301Library'.
> Could not expand ZIP 'D:\SDK\extras\android\m2repository\com\android\support\appcompat-v7\23.0.1\appcompat-v7-23.0.1.aar'.
复制代码

解决:此问题还1相似仍是权限问题 ,手动删除“F:\xxxxx\node_modules\react-native-device-info\android”目录下的build文件夹。(注意:以上是以react-native-device-info组件为例,若是是其它组件报相似问题 目录为: \node_modules\组件名\android )android-studio

在windows上常常会遇到删除文件夹须要管理员权限,可是给了管理员权限仍是删不掉,这时候咱们能够利用下压缩工具,压缩对应的文件,而且在压缩时选择压缩后删除源文件则就能够删除 or 重启电脑再删除bash

The SDK Build Tools revision (23.0.1) is too low for project ‘:react-native-vector-icons’. Minimum
复制代码

这个错误在引入第三方库也会常常遇到,改法也很简单, 进入对应库的build.gradle 文件夹 修改buildToolsVersion 为对应版本

注意

在rn中,若是咱们只改动了js代码,只须要reload,可是只要咱们改动了原生代码,包括Manifest以及一些资源文件,咱们都须要从新编译打包才能生效,若是是添加库等操做,建议先clear build, 而后再build

终极方法

最后若是你发现你代码确实没问题,路径等都没错,能够尝试删除掉android目录和app目录下面的build文件夹(打包自动生成文件), 最后

,再打开项目

实在仍是不行能够尝试重启,多是有端口被占用的缘由

相关文章
相关标签/搜索