V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nnegier
V2EX  ›  程序员

请教怎么能找到 Java 的 native 原生实现代码?

  •  1
     
  •   nnegier · 2022-08-24 17:31:10 +08:00 · 1497 次点击
    这是一个创建于 814 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我在找 Android 的 Linux.java 的 remove(String path)的 native 原生实现代码。

    我的做法,通过在 android9 整个源码目录中搜索 Java_libcore_io_Linux_remove ,但可惜没有找到,是我方法错了吗,我应该怎么找?
    8 条回复    2022-08-30 15:34:14 +08:00
    cheng6563
        1
    cheng6563  
       2022-08-24 17:34:45 +08:00
    要找 ART 的部分吧
    aichunya
        2
    aichunya  
       2022-08-24 17:36:46 +08:00
    那个要看 JVM 的源码了,可以去 https://openjdk.org/这里找
    AoEiuV020CN
        3
    AoEiuV020CN  
       2022-08-24 18:13:21 +08:00
    nnegier
        4
    nnegier  
    OP
       2022-08-24 18:33:21 +08:00 via Android
    @AoEiuV020CN 看来它们的连接方式不止 jni 一种?这是什么类型的连接?我下次按这个规则来搜一下
    AoEiuV020CN
        5
    AoEiuV020CN  
       2022-08-24 18:43:11 +08:00 via Android
    @nnegier 继续搜 remove 就看到了,用到了 JNINativeMethod RegisterNatives jniRegisterNativeMethods ,
    所谓动态注册,
    AoEiuV020CN
        6
    AoEiuV020CN  
       2022-08-24 18:59:04 +08:00 via Android
    @nnegier 我是先找到这个 cpp 再定位方法的,
    动态注册相当自由,没法通过固定结构搜到特定方法,
    nnegier
        7
    nnegier  
    OP
       2022-08-30 14:16:12 +08:00
    @AoEiuV020CN 是的,用到的是动态注册。我想再请问一下我们自己写的普通应用能用动态注册吗,我在写 Demo 的过程中报了一个错,android_runtime/AndroidRuntime.h 头文件找不到,这个我不知道怎么引,我尝试过将 AndroidRuntime.h 源代码拷进项目,但这下报错的需要引入的东西就更多了?
    AoEiuV020CN
        8
    AoEiuV020CN  
       2022-08-30 15:34:14 +08:00
    @nnegier #7 普通 app 不能照搬安卓低层的代码,
    要动态注册可以找个普通的教程参考一下, 搜“android jni 动态注册”,
    直接使用 env->RegisterNatives ,
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1033 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 19:50 · PVG 03:50 · LAX 11:50 · JFK 14:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.