2015年12月2日 星期三

[轉] Android NDK之----- 在jni中創建java類對象

如果想要在jni函數創建java類對象則要引用java 類的構造器方法,通過調用NewObject函數來實現。 
NewObject函數的調用方式為: 
jobject obj_new = (*env)->NewObject(env,class, methodid, paraments); 
在該實例中,我們在java/Test.java 中定義了Book1類,要在CreateObj類的modifyProperty() jni方法中創建該類對象。
我們可以在src/CreateObj.c中看到該jni方法創建對象的過程: 
jobject book;   jclass class_book;   
jmethodID md_book;   
class_book = (*env)->FindClass(env,"LBook1;");   
md_book = (*env)->GetMethodID(env,class_book,"<init>","(IILjava/lang/String;)V");  
 book = (*env)->NewObject(env,class_book,md_book,100,1,"huanghe");  

在創建對象的過程中可以看到,要創建一個java類對象,首先需要得到得到使用FindClass函數得到該類,
然後使用GetMethodID方法得到該類的構造器方法id,主義在此時構造器的函數名始終為:"<init>」,
其後函數的簽名要符合函數簽名規則。在此我們的構造器有三個參數:int , int, String. 
並且其返回值類型要永久為空,所以函數簽名為:"(IILjava/lang/String;)V" 
然後我們調用NewObject()函數來創建該類的對象,在此之後就可以使用該對象了。 

沒有留言:

張貼留言