需要準備的環境
- Eclipse + Android SDK: 基本的 Android 開發環境
- Android NDK: 讓 Android 能透過 JNI 去執行 C/C++ 語言的必要套件
- Eclipse NDK: Eclipse 的 plugin 套件,方便管理與建立 NDK 的專案
Work with: https://dl-ssl.google.com/android/eclipse/
安裝好之後要設定 Android NDK 的路徑:
Window -> Preferences -> Android -> NDK -> NDK Location: - Eclipse CDT: Eclipse 的 plugin 套件,可以在 Eclipse 上管理與開發 C/C++ 專案
Work with: http://download.eclipse.org/tools/cdt/releases/juno (For Juno)
Work with: http://download.eclipse.org/tools/cdt/releases/kepler (For Kepler) - Cygwin: 用來編譯 C/C++
Ref: http://blog.csdn.net/javatiger427/article/details/6115693
註2: CDT(C/C++ Development Tooling)
新建一個專案
http://www.pupuliao.info/2013/05/%E5%9C%A8eclipse%E9%80%8F%E9%81%8Ejni-%E8%B7%91cc-for-android-hello_world%E7%AF%87/
文中設定 Builder 的部分可略過,只是為了存檔的同時也能重新自動建置。
而且遇到有空白字元的路徑更為麻煩,可將文中 Arguments 的部分換成如下:
--login -c "cd /cygdrive/d/sample && rm -r obj && /cygdrive/c/Progra~1/Android/android-ndk-r9d/ndk-build"
另外,我們也可以透過按下小鎚子的圖示來手動建置。
除錯
除錯時要將 Project -> Properties -> C/C++ Build -> Builder Settings -> Build Command:
加上 ndk-build NDK_DEBUG=1,建置時才會產生除錯所需要的檔案。
在這之後可能會遇到兩個問題:
- 無法在 .c 或 .cpp 檔上設置中斷點?
Run -> Breakpoint Types -> C/C++ Breakpoints - 設完中斷點後,卻沒有停在中斷點上?
No symbol table is loaded. Use the "file" command.
由於 GDB debugger 需要一點時間運算,而 GDB 可能還沒載入 Library 的 Symbol,
如果中斷點設得太早可能會被忽略,
解決的辦法請參考:
http://www.codeproject.com/Articles/493043/Why-your-Android-NDK-breakpoints-might-fail-and-ho