2014-01-17 95 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