在學習JNI中尋找方法簽名時遇見的問題
1.when
在學習安卓JNI時,c調java中的方法時用到方法
env->GetMethodID(jclazz,"add1", "(II)I");
這個方法的原型如下
jmethodID GetMethodID(jclass clazz, const char* name, const char* sig)
具體引數意義可參考文獻,這里簡單解決一下最后一個引數sig的寫法,
sig是java方法簽名,這個字串如何得到呢?請看下面介紹,
2.how
ndk版本低的可以用一下步驟
- 在命令視窗中進入應用的classes/debug/目錄
- 執行命令: javap -s 全類名,顯示所有的方法的簽名資訊
這里我的電腦運行 javap 命令時出現了一個小問題,等下將問題解決方式奉上,(問題一)
ndk版本高的(這里我也不清楚多高是高,我用的版本是r21b 64位的)
- 定位到 app/build/intermediates/javac/debug/classes目錄下
- 在AS中右鍵Show in Explorer
- 在目錄中右鍵選中 Open in Terminal(問題二)
- 輸入 javap -s 包名.類名 即可(問題三)
3.problem
-
上述問題一,是我在運行 javap 命令時系統不識別這個命令,系統給出以下的提示
‘javac’ 不是內部或外部命令,也不是可運行的程式 或批處理檔案
我懷疑的在目錄下敲出
java命令或java -version卻提示成功,javac 、javap命令全部提示不是內部命令,
解決方法: 其實這是你配置jdk時的遺留問題,在win10下配置path的jdk路徑時不可以使用相對路徑,必須寫為絕對路徑,而且配置兩個jdk不要在一行上,這個要分開寫,各一行,同時結尾不能帶分號!最好將兩個路徑放在最上位,配置完一定要重啟cmd測驗javac 、javap命令,如下圖:

- 問題二是我的電腦在檔案夾里面點擊右鍵沒有在此處打開命令視窗的選項,
解決方法:
1.在桌面新建一個txt檔案,復制以下代碼,
2.將檔案保存修改檔案名為XXX.txt 為 OpenCmdHere.reg,保存完畢雙擊此檔案就ok啦,
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\""
- 問題三是剛才測驗的cmd中javap命令還能執行,通過AS中打開的目錄右鍵進入cmd中執行javap命令就不行了,于是我復制了路徑,直接在cd + 復制的目錄 ,進入后執行的javap -s 居然成功了,在之后用AS打開的目錄右鍵進入cmd中執行javap命令就可以了,希望你們沒有這個小問題,要不然重重困難,解決完又深夜了,別指望多學一會兒了,
4.result
在解決完所有的問題后,回歸主題,在jni中的jmethodID GetMethodID(jclass clazz, const char* name, const char* sig)方法中的sig是代表著方法簽名這個字串的,而這個字串的生成方法通過以上步驟就解決了,具體cmd中的顯示如下圖:

之后就可以找到方法簽名啦!
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/220644.html
標籤:其他
上一篇:蟠桃記 HDU - 2013
下一篇:螢屏適配方案
