石家莊新聞網(wǎng)seo推廣服務(wù)哪家好
Android Native Code開(kāi)發(fā)學(xué)習(xí)(三)
本教程為native code學(xué)習(xí)筆記,希望能夠幫到有需要的人
我的電腦系統(tǒng)為ubuntu 22.04,當(dāng)然windows也是可以的,區(qū)別不大
對(duì)java中的對(duì)象變量進(jìn)行操作
首先我們新建一個(gè)java的類(lèi)
public class ClassForJNI {public int a;public int b;public void add(){System.out.println("a+b is :"+(a+b));return;}
}
我們的目標(biāo)就是更改里面的a和b,并且調(diào)用這個(gè)類(lèi),就可以看到我們的輸出
//查詢(xún)類(lèi)名
jclass clz_2 = env->FindClass("com/example/nativecodelearn/ClassForJNI");
//查詢(xún)構(gòu)造函數(shù)的id
jmethodID jcmid_2 = env->GetMethodID(clz_2, "<init>", "()V");
//創(chuàng)建對(duì)象
jobject = env->NewObject(clz_2, jcmid_2);
jfieldID fid_a =env->GetFieldID(clz_2,"a","I");
jint num_a =env->GetIntField(jobject,fid_a);
env->SetIntField(jobject,fid_a,9);
jfieldID fid_b =env->GetFieldID(clz_2,"b","I");
jint num_b =env->GetIntField(jobject,fid_b);
env->SetIntField(jobject,fid_b,10);
//獲取方法id
jmethodID jmeid_2 = env->GetMethodID(clz_2,"add","()V");
env->CallVoidMethod(jobject,jmeid_2);
其實(shí)這個(gè)步驟一共就這幾步
- 找到類(lèi)名
- 準(zhǔn)備構(gòu)造函數(shù)
- 創(chuàng)建對(duì)象
- 獲得fieldID
- 得到對(duì)應(yīng)的變量
- 更改變量的值
通過(guò)這樣我們就可以運(yùn)行了,這樣就可以得到最終的結(jié)果了