生成與 native 方法對應的頭文件
在 Android NDK 開發中,C/C++ 中對應於 Java 方法的函數名應該叫什麼是很有講究的,大致是形式是
Java_包名_類名_方法名
所以 C/C++ 中的函數名不能隨便取,必須按照規則來。因爲這個函數名很繁瑣,手動書寫十分容易出錯,所以這裏需要利用 javah
的命令來生成對應於函數的頭文件在頭文件中會有對應的 C/C++ 函數名,所以直接複製函數名就可以編寫自己的邏輯了
那麼接下來就利用 javah
生成自己的頭文件,命令格式如下
javah -classpath (搜索類目錄) -d (輸出目錄) (類名)
這裏需要強調一下的是這裏的搜索類目錄,搜索的是這個 Java 類的 .class
文件 ,所以在在執行生成頭文件的命令時,需要使用快捷鍵 ctrl+F9
或者 Android Studio 頂部菜單欄 build -> Make Project,手動生成這個類的 class 文件
生成完 class 文件過後,就可以利用頭文件生成對應的頭文件了,命令如下:
javah -classpath app\build\intermediates\classes\debug -d ./app/src/main/jni com.innofang.ndkdemo.JniUtil
這裏只需要將上面括號類的內容按照自己項目的情況進行修改就可以了。但是,這麼長的命令,難道每次添加 native 方法都要自己手動輸入生成頭文件嗎?
在這裏可以利用一個小技巧,就是利用 Android Studio 的 External Tools 工具 ,一件生成頭文件
File -> Settings 或者 Ctrl+Alt+S
打開設置界面,接着點擊 Tools ,找到 External Tool,
點擊 +
新建一個 Exteranl Tools
輸入圖示信息
在 Name 區域輸入 Generate Header File
Program : $JDKPath$\bin\javah
Parameters : -classpath $OutputPath$ -d ./app/src/main/jni $FileClass$
Working directory : $ProjectFileDir$
其餘的勾選項對照上圖即可
然後點擊 OK 就完成了
使用時,只需要右擊java文件,找到 External Tool ,點擊 Generate Header File 即可
切換到 Project 視圖,就可以看到在 main 包下多了一個 jni 的文件,裏面就是剛剛生成的頭文件
Q: 出現類似 錯誤: 找不到 'com.innofang.ndkdemo.jnituil' 的類文件。
的情況
A:在生成頭文件之前要先生成類文件,使用快捷鍵 ctrl+F9
或者 Android Studio 頂部菜單欄 build -> Make Project