在學習安卓JNI時,c調java中的方法時用到方法
env->GetMethodID(jclazz,"add1", "(II)I");
這個方法的原型如下
jmethodID GetMethodID(jclass clazz, const char* name, const char* sig)
具體引數意義可參考文獻,這裡簡單解決一下最後一個引數sig的寫法。
sig是java方法簽名,這個字串如何得到呢?請看下面介紹。
ndk版本低的可以用一下步驟
這裡我的電腦執行 javap 命令時出現了一個小問題,等下將問題解決方式奉上。(問題一)
ndk版本高的(這裡我也不清楚多高是高,我用的版本是r21b 64位元的)
上述問題一,是我在執行 javap 命令時系統不識別這個命令,系統給出以下的提示
‘javac’ 不是內部或外部命令,也不是可執行的程式 或批次檔
我懷疑的在目錄下敲出java
命令或java -version
卻提示成功。javac 、javap
命令全部提示不是內部命令。
解決方法: 其實這是你設定jdk時的遺留問題,在win10下設定path的jdk路徑時不可以使用相對路徑,必須寫為絕對路徑。而且設定兩個jdk不要在一行上,這個要分開寫,各一行,同時結尾不能帶分號!最好將兩個路徑放在最上位,設定完一定要重新啟動cmd測試javac 、javap
命令。如下圖:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\shell\OpenCmdHere]
@="在此處開啟命令提示字元"
"Icon"="cmd.exe"
[HKEY_CLASSES_ROOT\Directory\shell\OpenCmdHere\command]
@="PowerShell -windowstyle hidden -Command \"Start-Process cmd.exe -ArgumentList '/s,/k, pushd,%V' -Verb RunAs\""
[HKEY_CLASSES_ROOT\Directory\Background\shell\OpenCmdHere]
@="在此處開啟命令視窗"
"Icon"="cmd.exe"
[HKEY_CLASSES_ROOT\Directory\Background\shell\OpenCmdHere\command]
@="PowerShell -windowstyle hidden -Command \"Start-Process cmd.exe -ArgumentList '/s,/k, pushd,%V' -Verb RunAs\""
[HKEY_CLASSES_ROOT\Drive\shell\OpenCmdHere]
@="在此處開啟命令視窗"
"Icon"="cmd.exe"
[HKEY_CLASSES_ROOT\Drive\shell\OpenCmdHere\command]
@="PowerShell -windowstyle hidden -Command \"Start-Process cmd.exe -ArgumentList '/s,/k, pushd,%V' -Verb RunAs\""
[HKEY_CLASSES_ROOT\LibraryFolder\background\shell\OpenCmdHere]
@="在此處開啟命令視窗"
"Icon"="cmd.exe"
[HKEY_CLASSES_ROOT\LibraryFolder\background\shell\OpenCmdHere\command]
@="PowerShell -windowstyle hidden -Command \"Start-Process cmd.exe -ArgumentList '/s,/k, pushd,%V' -Verb RunAs\""
在解決完所有的問題後,迴歸主題,在jni中的jmethodID GetMethodID(jclass clazz, const char* name, const char* sig)
方法中的sig是代表著方法簽名這個字串的,而這個字串的生成方法通過以上步驟就解決了,具體cmd中的顯示如下圖:
之後就可以找到方法簽名啦!