Sean's Note: Running C/C++ on Android with NDK [Updated]

2014年10月1日 星期三

Running C/C++ on Android with NDK [Updated]

需要準備的環境

  1. Eclipse + Android SDK: 基本的 Android 開發環境
  2. Android NDK: 讓 Android 能透過 JNI 去執行 C/C++ 語言的必要套件
  3. Eclipse NDK: Eclipse 的 plugin 套件,方便管理與建立 NDK 的專案
    Work with: https://dl-ssl.google.com/android/eclipse/
    安裝好之後要設定 Android NDK 的路徑:
    Window -> Preferences -> Android -> NDK -> NDK Location:

    如果 NDK Path 擺在 Program Files 或 Program Files (x86) 底下,在 Build Project 時,
    可能會出現以下錯誤:
    "C:\\Program Files (x86)\\Android\\android-ndk-r10b\\ndk-build.cmd" all
    ERROR: NDK path cannot contain any spaces!

    解決方法:
    C:\Program Files -> C:\progra~1
    C:\Program Files (x86) -> C:\progra~2
Note: NDK r9 的版本之後已內建 toolchains,所以不需要另外安裝 Cygwin。

新建一個專案


新增一個  C:\Program Files (x86)\Android\android-ndk32-r10b\samples\hello-jni 專案,

然後在 Project 上按右鍵 -> Android Tools -> Add Native Support...

除錯


除錯時要將 Project -> Properties -> C/C++ Build -> Builder Settings -> Build Command:

加上 ndk-build NDK_DEBUG=1,建置時才會產生除錯所需要的檔案。

在這之後可能會遇到兩個問題:
  1. 無法在 .c 或 .cpp 檔上設置中斷點?
    Run -> Breakpoint Types  -> C/C++ Breakpoints
  2. 設完中斷點後,卻沒有停在中斷點上?
    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

沒有留言:

張貼留言