小公司一个项目需要调用.so 文件,我只是一个刚入前端的小白,官网的调用安卓模块的 demo 我也敲了一遍实现了,可是弄公司的.so 时还是一头雾水,没学过安卓和 java 实在是搞不懂,求帮忙,在这里谢谢了,马上项目要教了很急 QAQ
1
newmind 2019-05-26 09:27:04 +08:00
没了解过 RN, 猜测不能直接调 so 吧
正常应该是 RN 调 Java 层, Java 层再调 so 层的代码 |
2
MoHen9 2019-05-26 09:28:22 +08:00 via Android
不知 rn 怎么调用,但你可以调用 Android 原生代码,让原生代码调用.so 文件。
|
3
cshlxm 2019-05-26 09:39:36 +08:00
rn 有 bridge 可以调用 android java 的代码,你需要把调用 so 的方法封装下,供 rn 直接调用就行了~不复杂, 只是需要知道 rn 怎么和 java 通信
|
4
x58 OP @cshlxm 老板给了我一个调用 so 库的 java 文件,那我是不是应该在建两个 java 文件,一个用于调用那个给我的 java 文件,一个用于注册我创建的调用 java 的文件
|
5
ntop 2019-05-26 10:45:32 +08:00
先用 js 调用 java,在用 java 通过 jni 调用 .so ,网上搜搜这几个关键字,例子很多的。
|
6
aWangami 2019-05-26 11:18:38 +08:00 via Android
留下联系方式,可以有偿帮你解决
|
7
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); ``` |
8
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,并调用其方法。 |
9
qzskaka 2019-05-26 12:16:11 +08:00
1、在 java 层导入 so,写 JNI 对应接口
2、java 实现 RN Module (官方有文档),调用 JNI 3、JavaScript 层调用 RN Module export 方法接口 |