有2種方式,使Android原生的C/C++調用Java代碼。JNI_CreateJavaVM()在Android的
Java應用程序首先調用本機函數。本地函數保存JavaVM和JNIEnv,然後使用它們調用Java代碼,如Java類X.
本地函數調用相同的Java類X.在這種情況下,我們需要一個JVM來運行Java碼。可以使用JNI_CreateJavaVM()來完成它。
我發現以上2種方式創建的JVM是不同的。
這裏是Java類X.
public class X
{
public X()
{
Log.d("X", "X()");
}
}
的Log.d()可以成功的方式。然而運行,在我從logcat中收到以下錯誤消息的方式2: 「沒有找到本地Landroid/util/Log; .println_native(IILjava/lang/String; java/lang/String;)的實現我在想JNIEnv從JNI_CreateJavaVM()中得到了一些東西。如果我必須使用方式2,我怎麼能解決這個問題?
? Android環境(它提供的jni.h頭文件和庫)沒有實現這個功能。 – 2012-07-23 00:43:36
http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/invocation.html#wp9502 效仿的榜樣那裏。 – user1443721 2012-07-23 04:39:34
這些是JavaSE文檔。但是我們正在談論Android NDK,對吧?從Android NDK打開jni.h頭文件並檢查一下自己,JNI_CreateJavaVM函數被註釋掉了。 – 2012-07-23 20:53:25