30 10月 2013

[Android] 在 C Level 用 dlopen 使用 第三方的 Shared Library (.so)

在 Android 裡,撰寫 JNI C Level 的 code ,不管是想要 load 自己寫的獨立 shared library module (.so),或是想要把第三方的 shared library 拿來用,都必須要多做一些步驟才能達成。


08 10月 2013

[Android] NDK Debug 與 breakpoint 失效的解決之道

在 Android 開發環境裡,新版的 NDK (目前為 r9 )提供的 GDB Debug C//C++環境其實已經算是很友善的了。不像以前需要下一堆的 command line 才行。

目前我的開發環境:

  • ADT - adt-bundle-windows-x86_64-20130729
  • NDK - android-ndk-r9


簡單說一下 Debug NDK 的步驟

1. Eclipse Preferences

設定  Eclipse Preference | Android | NDK | NDK Location 
填入正確的 NDK 下載路徑

2. 設定 Project property NDK_DEBUG=1

 Project Property | C/C++ Builder | Builder Settings 
取消 Use default build command的選項
輸入 ndk-build NDK_BUILD=1
註:Application.mk or Android.mk 都無需修改,新版的 ADT/NDK 都已經 handle 好其他的設定了

3. 設好中斷點

在 Eclipse 裡的 C/C++ code,設好中斷點,等著上鉤

4. Debug As "Android Native Application"

由於目前 ADT 在 Debug 時,同一時間只能選擇 Debug Java or C/C++
所以如果 Debug As "Android Application"的話,就是 Debug Java level
如果 Debug As "Android Native Application"的話,就是 Debug C/C++ level


* 問題 *

Debug 時設中斷點,可能會出現類似這樣的Error

  • No symbol table is loaded.  Use the "file" command.