V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
x58
V2EX  ›  程序员

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

  •  
  •   x58 · 2019-05-26 09:19:38 +08:00 · 3088 次点击
    这是一个创建于 2044 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    9 条回复    2019-05-26 12:16:11 +08:00
    newmind
        1
    newmind  
       2019-05-26 09:27:04 +08:00
    没了解过 RN, 猜测不能直接调 so 吧
    正常应该是 RN 调 Java 层, Java 层再调 so 层的代码
    MoHen9
        2
    MoHen9  
       2019-05-26 09:28:22 +08:00 via Android
    不知 rn 怎么调用,但你可以调用 Android 原生代码,让原生代码调用.so 文件。
    cshlxm
        3
    cshlxm  
       2019-05-26 09:39:36 +08:00
    rn 有 bridge 可以调用 android java 的代码,你需要把调用 so 的方法封装下,供 rn 直接调用就行了~不复杂, 只是需要知道 rn 怎么和 java 通信
    x58
        4
    x58  
    OP
       2019-05-26 10:07:06 +08:00
    @cshlxm 老板给了我一个调用 so 库的 java 文件,那我是不是应该在建两个 java 文件,一个用于调用那个给我的 java 文件,一个用于注册我创建的调用 java 的文件
    ntop
        5
    ntop  
       2019-05-26 10:45:32 +08:00
    先用 js 调用 java,在用 java 通过 jni 调用 .so ,网上搜搜这几个关键字,例子很多的。
    aWangami
        6
    aWangami  
       2019-05-26 11:18:38 +08:00 via Android
    留下联系方式,可以有偿帮你解决
    huruwo
        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);
    ```
    woos
        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,并调用其方法。
    qzskaka
        9
    qzskaka  
       2019-05-26 12:16:11 +08:00
    1、在 java 层导入 so,写 JNI 对应接口
    2、java 实现 RN Module (官方有文档),调用 JNI
    3、JavaScript 层调用 RN Module export 方法接口
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1523 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 16:44 · PVG 00:44 · LAX 08:44 · JFK 11:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.