在rn开发中,如果遇到了比较特殊的功能,如果没有现成的轮子的话,通常我们需要去链接原生库,并且封装成RN组件提供给js调用,作为前端开发者,通常我们对原生端的报错处理不太懂,在处理和原生功能相关问题时,推荐直接使用android-studio进行开发(项目名->android->app->build.gradle),它可以辅助我们方便的下载第三方库,并且闪退等问题我们可以在log中查看的很清晰.
下面列出了我们在链接原生库中常常遇到的一些问题
1.
这个错误常常出现在第一次封装高版本react-native的library或者引用老版本的库的时候容易出现,原因是
在安卓中 @Override是复写父类的方法,而它的父类没有这个方法,所以不能复写。因为你报错的这个方法在老版本的RN中是存在的,估计这个三方是以前用的老版本,新版本没有这个方法了,注释掉就可以了。
如果你喜欢手动link第三方库(非react-native link),那么这个问题你可能会遇到,原因很简单,引入库的时候,需要在setting.gradle里面指明库的位置,直接编译是找不到的 如下图
这个步骤一般引入库都会有说明 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文件夹(打包自动生成文件), 最后
,再打开项目实在还是不行可以尝试重启,可能是有端口被占用的原因