先占坑,有空发。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文件在此时会被加载。