Android JNI Java類型簽名

JNI提供了Java和native代碼相互交互的接口,當我們在底層訪問Java類的域(成員變量)或者方法時,需要提供域或者方法描述符,比如,下面代碼,

(*env)->GetFieldID(env, clzz, fieldName, fieldSig);//得到域ID
(*env)->GetFieldID(env, clzz, methodName, methodSig);//得到方法ID

域描述符

簽名映射如下,
這裏寫圖片描述
比如,我們一個int的成員變量,其簽名就是I,double的類型就是D,那麼String的簽名是什麼呢?String的包名是java.lang.String,於是其簽名是Ljava/lang/String; 如果自定義了一個類,com.example.Person,那麼該類的簽名就是Lcom/example/Person; 注意,後面有個雙引號。另外,數組type[]的簽名是[type,比如int[]的簽名是[I

方法描述符

方法描述符有兩部分組成,參數描述+返回類型描述,該兩部分描述均由簽名形式給出,格式是 (參數描述)返回類型描述。

比如這個方法的簽名是,

public int getInt()

()I ,比較好理解,如果返回類型是空呢,那就用V來表示,
比如,

public void method(String string)

的簽名是(Ljava/lang/String;)V

javap獲得簽名

我們可以使用javap命令來獲取域或方法的簽名,在eclipse中,我們切換到bin/classes目錄,執行,

javap -s com.example.java2struct.TypeSig

結果如下,
javap結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章