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

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

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

1.

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

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

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

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

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

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

在我们引入原生的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改成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

终极方法

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

,再打开项目

实在还是不行可以尝试重启,可能是有端口被占用的原因

猜你喜欢

转载自juejin.im/post/5bd3e8c4e51d457ac054f354