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

栏目: IOS · Android · 发布时间: 7年前

内容简介:在rn开发中,如果遇到了比较特殊的功能,如果没有现成的轮子的话,通常我们需要去链接原生库,并且封装成RN组件提供给js调用,作为前端开发者,通常我们对原生端的报错处理不太懂,在处理和原生功能相关问题时,推荐直接使用android-studio进行开发(项目名->android->app->build.gradle),它可以辅助我们方便的下载第三方库,并且闪退等问题我们可以在log中查看的很清晰.下面列出了我们在链接原生库中常常遇到的一些问题1.

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

下面列出了我们在链接原生库中常常遇到的一些问题

1.

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

这个错误常常出现在第一次封装高版本react-native的library或者引用老版本的库的时候容易出现,原因是

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

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

因为你报错的这个方法在老版本的RN中是存在的,估计这个三方是以前用的老版本,新版本没有这个方法了,注释掉就可以了。

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

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

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

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

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

这个步骤一般引入库都会有说明

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

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

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

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

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

我们在集成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改成compiled

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文件夹。

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 )

在windows上经常会遇到删除文件夹需要管理员权限,但是给了管理员权限还是删不掉,这时候我们可以利用下压缩工具,压缩对应的文件,并且在压缩时选择压缩后删除源文件则就可以删除 or 重启电脑再删除

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

,再打开项目


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Filter Bubble

The Filter Bubble

Eli Pariser / Penguin Press / 2011-5-12 / GBP 16.45

In December 2009, Google began customizing its search results for each user. Instead of giving you the most broadly popular result, Google now tries to predict what you are most likely to click on. Ac......一起来看看 《The Filter Bubble》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具