在 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 文件夹 (打包自动生成文件), 最后
, 再打开项目
实在还是不行可以尝试重启, 可能是有端口被占用的原因
来源: https://juejin.im/post/5bd3e8c4e51d457ac054f354