【问题标题】:Android NDK JNI call libc functionAndroid NDK JNI 调用 libc 函数
【发布时间】:2014-01-17 10:14:00
【问题描述】:

我想知道是否通过 JNI 使用 Android NDK 在本机函数中调用 libc 函数,例如

FILE* file = fopen("sdcard/hello.txt","w+");

实际上是直接转到实际的 libc 函数,或者调用和本机函数之间是否有一些代理/包装器。

有人有想法吗?

【问题讨论】:

    标签: android-ndk libc


    【解决方案1】:

    当我这样做时,它按预期工作并且没有性能问题。

    对于您的代码,您需要在sdcard 之前添加一个/

    为你的 sdcard 找到正确的路径可能很棘手:

    How can I get external SD card path for Android 4.0+?

    【讨论】:

    • 怎么知道函数是直接调用的?我构建了一个自定义的 android 模拟器:我在调用函数时登录 fopen.c。当我从我的 NDK 应用程序调用它时,没有任何记录,在其他情况下从系统中,它确实被记录了。见stackoverflow.com/q/21136622/883083
    • 直接表示不经过JVM? NDK 可以有自己的 fopen... 的本机实现
    • 感谢您的帮助。好吧,“直接”是指 App uid 是在 fopen() 中调用 getuid() 时会找到的那个。然而,似乎 fopen 并没有真正被调用。我寻找了 fopen 的其他声明,但没有运气。有类似 fopen 的方法(例如 external/qemu 中的 qemu_fopen() ),但它们最终都会调用 stdio.h 的 fopen()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多