天天看點

Android NDK開發系列教程4:對類變量進行操作

通常我們也可以直接利用jni來通路和處理類的變量,不一定非要通過Java方法來操作Java類變量。對類變量操作時,類的靜态變量和類的執行個體變量的操作稍微有些不同,下面進行講解。

類的靜态變量屬于類,是所有該類執行個體共享的。操作該變量時,不需要指定具體的執行個體是哪個。

主要步驟就是代碼裡面注釋的。

代碼如下:

JNI開發也有JNI開發的套路,按照上面套路來,即可修改類的執行個體變量。操作過程也很好了解,我們在native操作的時候都需要借助JNI提供的函數擷取相應的引用。利用引用去進行操作。由于JNI函數是直接操作JVM中的資料結構,是以即使是private的變量,我們也可以進行修改。

由于JNI函數是直接操作JVM中的資料結構,不受Java通路修飾符的限制。即,在本地代碼中可以調用JNI函數可以通路Java對象中的非public屬性和方法

通路和修改靜态變量操作步聚:

調用FindClass函數擷取類的Class引用

調用GetStaticFieldID函數擷取Class引用中某個靜态變量ID

調用GetStaticXXXField函數擷取靜态變量的值,需要傳入變量所屬Class的引用和變量ID

調用SetStaticXXXField函數設定靜态變量的值,需要傳入變量所屬Class的引用、變量ID和變量的值

通路和修改執行個體變量操作步聚:

調用GetObjectClass函數擷取執行個體對象的Class引用

調用GetFieldID函數擷取Class引用中某個執行個體變量的ID

調用GetXXXField函數擷取變量的值,需要傳入執行個體變量所屬對象和變量ID

調用SetXXXField函數修改變量的值,需要傳入執行個體變量所屬對象、變量ID和變量的值

繼續閱讀