2014-01-17 71 views
0

我想知道是否在通过JNI与Android NDK完成的本地函数中调用libc函数,例如Android NDK JNI调用libc函数

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

实际上是直接进入到实际的libc函数或是否有通话和本地函数之间的一些代理/包装。

有没有人有想法?

回答

0

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

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

前往你在正确的道路SD卡可能会非常棘手:

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

+0

你怎么知道该函数直接调用?我构建了一个自定义的android模拟器:当函数被调用时,我登录fopen.c。当我从我的NDK应用程序调用它时,在系统的其他场合没有任何记录,它会记录。请参阅http://stackoverflow.com/q/21136622/883083 – IHeartAndroid

+0

直接意味着不通过JVM? NDK可以有自己的本地实现'fopen' ... – Dannie

+0

感谢您的帮助。那么“直接”我的意思是App的uid是在fopen()中调用getuid()时会被发现的。但是,似乎fopen并不真正被调用。我寻找其他fopen的声明,但没有运气。有类似的方法,如fopen(例如外部/ qemu中的qemu_fopen()),但所有这些方法最终调用stdio.h的fopen() – IHeartAndroid