先佔坑,有空發。java
環境:WIN7 + eclipse + android sdk4.3 + ndk r9bandroid
需求:安卓程序經過jni調用C代碼,並對C代碼進行debug。windows
糾結:一、使用真機,直接沒法啓動eclipse
二、使用模擬器,可以啓動,可是沒法進入debug
函數
-----------------------------------------------------------------
測試
因爲新版本的ndk對native代碼的debug功能支持的已經比較完善,環境搭建已經比較簡單了,依稀記得以前爲了搭建可以debug native代碼的環境,愣是花了接近一個周的時間,各類試,各類不對,各類糾結囧。字體
一、在eclipse下配置正確的sdk以及ndk路徑(我直接在google下載配置好的eclipse:adt-bundle-windows-x86_64)
ui
二、新建android工程,右鍵工程->Android Tools->Add Native Support,eclipse自動建立jni文件夾,而且有一個cpp文件(如HelloJni.cpp)和Android.mk文件
google
三、寫一個測試類TestClassspa
public class TestClass { public String getStr() { String s = getStrFromNative(); return s; } static { System.loadLibrary("HelloJni"); //加載so } public native String getStrFromNative(); //聲明Native函數 }
四、在HelloJni.cpp中寫Native函數(假設TestClass所屬的包名爲com.a.b)
JNIEXPORT jstring JNICALL Java_com_a_b_TestClass_getStrFromNative (JNIEnv *env, jobject obj) { const char* pBuf = "hello jni"; return env->NewStringUTF(pBuf); }
五、到這就能夠編譯運行了,可是爲了可以debug,還須要進行下面的操做。
六、右鍵工程->Properties->C/C++ Build->右側頁面Builder Settings標籤->取消Use Default build command前面的√,在Build command中輸入ndk-build NDK_DEBUG=1
七、工程已經配置完了,按理說已經可以編譯而後debug了,右鍵工程->Debug as->Android Native Application,可是下面出現了糾結我一天的事情……
我使用真機調試,結果程序根本沒法啓動,eclipse輸出不少紅色字體錯誤,這個應該是手機系統版本與sdk以及ndk不匹配致使,可是我一直認爲是本身工程出了問題,一遍又一遍的嘗試,最後放棄了。
當我意識到版本不匹配以後,我改用模擬器,這個總不會版本不匹配吧。果真,程序啓動起來了,結果問題又出現了,eclipse直接輸出No symbol table is loaded. Use the "file" command。而後我又嘗試了一遍又一遍,伴隨着其中的google。最終我發現了一遍博客(android NDK開發、編譯、調試環境搭建與操做入門)拯救了我,我根據該文中的方法終於在模擬器上成功進行了debug。形成這個問題的緣由在博文中也有提到,當ndk gdb啓動安卓程序時,須要debug的so並無加載,因而gdb會輸出No symbol table is loaded。解決方法就是在程序啓動時直接加載so文件,我是在onCreate函數中直接new TestClass,因而TestClass中的static代碼段會被調用,so文件在此時會被加載。