谁会在 rn 里调用第三方.so 文件,实在弄不懂求教

2019-05-26 09:19:38 +08:00
 x58

小公司一个项目需要调用.so 文件,我只是一个刚入前端的小白,官网的调用安卓模块的 demo 我也敲了一遍实现了,可是弄公司的.so 时还是一头雾水,没学过安卓和 java 实在是搞不懂,求帮忙,在这里谢谢了,马上项目要教了很急 QAQ

2894 次点击
所在节点    程序员
9 条回复
newmind
2019-05-26 09:27:04 +08:00
没了解过 RN, 猜测不能直接调 so 吧
正常应该是 RN 调 Java 层, Java 层再调 so 层的代码
MoHen9
2019-05-26 09:28:22 +08:00
不知 rn 怎么调用,但你可以调用 Android 原生代码,让原生代码调用.so 文件。
cshlxm
2019-05-26 09:39:36 +08:00
rn 有 bridge 可以调用 android java 的代码,你需要把调用 so 的方法封装下,供 rn 直接调用就行了~不复杂, 只是需要知道 rn 怎么和 java 通信
x58
2019-05-26 10:07:06 +08:00
@cshlxm 老板给了我一个调用 so 库的 java 文件,那我是不是应该在建两个 java 文件,一个用于调用那个给我的 java 文件,一个用于注册我创建的调用 java 的文件
ntop
2019-05-26 10:45:32 +08:00
先用 js 调用 java,在用 java 通过 jni 调用 .so ,网上搜搜这几个关键字,例子很多的。
aWangami
2019-05-26 11:18:38 +08:00
留下联系方式,可以有偿帮你解决
huruwo
2019-05-26 11:38:04 +08:00
先给 java 层吧
libs 下放入对应的 so 文件
gradle 添加引入架构
最后对应 java 本地方法

```
static {
try {
System.loadLibrary("xxx");
} catch (UnsatisfiedLinkError unused) {
}
}

public static native byte[] d(byte[] bArr);
```
woos
2019-05-26 11:56:07 +08:00
1. 导入 so 文件。
像 huruwo 说的,把 so 文件复制到 libs 里,然后修改 gradle,使得 so 库可以被访问到。
2. 编写 react native module。
根据 rn 官方文档,定义一个 module,然后声明一个方法包裹了 System.loadLibray("libName")。注意异常处理
3. 在前端调用。
在 js 代码中导入新定义的 module,并调用其方法。
qzskaka
2019-05-26 12:16:11 +08:00
1、在 java 层导入 so,写 JNI 对应接口
2、java 实现 RN Module (官方有文档),调用 JNI
3、JavaScript 层调用 RN Module export 方法接口

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/567715

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX