2012-07-22 96 views
2

有2種方式,使Android原生的C/C++調用Java代碼。JNI_CreateJavaVM()在Android的

  1. Java應用程序首先調用本機函數。本地函數保存JavaVM和JNIEnv,然後使用它們調用Java代碼,如Java類X.

  2. 本地函數調用相同的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,我怎麼能解決這個問題?

+0

? Android環境(它提供的jni.h頭文件和庫)沒有實現這個功能。 – 2012-07-23 00:43:36

+0

http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/invocation.html#wp9502 效仿的榜樣那裏。 – user1443721 2012-07-23 04:39:34

+0

這些是JavaSE文檔。但是我們正在談論Android NDK,對吧?從Android NDK打開jni.h頭文件並檢查一下自己,JNI_CreateJavaVM函數被註釋掉了。 – 2012-07-23 20:53:25

回答

1

也許在com.android.internal.util.WithFramework代碼可以幫助你。 你如何在Android上使用JNI_CreateJavaVM功能都看到我類似的問題here

相關問題