Android之eclipse NDK开发环境的搭建

来源:互联网 发布:淘宝店铺粉丝最多 编辑:程序博客网 时间:2024/06/12 01:30

网上有很多关于搭建Android NDK开发环境的文章,发现很多都不能用,大部分都是过时的,比如安装什么Cygwin,在eclipse里面新建什么Builder之类的,有的只有部分内容。经过一天的摸索终于搭建好了android NDK开发环境,包括C/C++的调试等,废话不多说,开始我们的搭建流程。

       首先、下载android NDK,得到一个android-ndk-r10d-windows-x86_64.exe的安装文件,双击解压得到一个android-ndk-r10d的文件夹。安装android NDK,前提是你必须是安装android sdk,能够看到这儿,应该是已经安装android sdk了的,点击菜单Window-->Preferences-->Android-->NDK,在NDK Location中输入之前android-ndk-r10d的全路径,点击OK,截图如下:

到此为止,我们的android NDK就安装完成了!!!,如果展开android这个节点,发现没有NDK这个选项,请参看:eclipse adt开发android ndk没有NDK选项问题的解决方案

       其次、从NDK的案例中导入一个来测试,把android-ndk-r10d\samples下的hello-jni导入到eclipse 中,然后将项目Add Native Support,截图如下:


在弹出的对话框中,点击finish,这样就为我们的项目增加了NDK的支持。

       然后、在C/C++的Perspective,选中项目,点击一个锤子模样的菜单,来Build Project,如果能看到在控制台打印类似20:50:59 Build Finished (took 1m:11s.298ms)的字样就说明Build成功了,截图如下:


运行项目,我们能看到在模拟器上显示出从当前CUP的类型,截图如下:

我们NDK的环境就算搭建好了!!!

       最后、我们来看一下怎样来调试我们的NDK C/C++代码,打开jni/hello-jni.c文件,我们看到一打开就报错了,没关系,解决方法请看Android NDK *** could not be resolved,错误消失后,在方法Java_com_example_hellojni_HelloJni_stringFromJNI的最后一行代码上打上断点,debug android Native Application,截图如下: 

发现没有Debug起来,控制台的错误如下:

[2015-01-28 21:06:01 - HelloJni] Unknown Application ABI: 
[2015-01-28 21:06:01 - HelloJni] Android
[2015-01-28 21:06:01 - HelloJni] Unknown Application ABI: 
[2015-01-28 21:06:01 - HelloJni] NDK:
[2015-01-28 21:06:01 - HelloJni] Unknown Application ABI: 
[2015-01-28 21:06:01 - HelloJni] WARNING:
[2015-01-28 21:06:01 - HelloJni] Unknown Application ABI: 
[2015-01-28 21:06:01 - HelloJni] APP_PLATFORM
[2015-01-28 21:06:01 - HelloJni] Unknown Application ABI: 
[2015-01-28 21:06:01 - HelloJni] android-9
[2015-01-28 21:06:01 - HelloJni] Unknown Application ABI: 
[2015-01-28 21:06:01 - HelloJni] is
[2015-01-28 21:06:01 - HelloJni] Unknown Application ABI: 
[2015-01-28 21:06:01 - HelloJni] larger
[2015-01-28 21:06:01 - HelloJni] Unknown Application ABI: 
[2015-01-28 21:06:01 - HelloJni] than
[2015-01-28 21:06:01 - HelloJni] Unknown Application ABI: 
[2015-01-28 21:06:01 - HelloJni] android:minSdkVersion
[2015-01-28 21:06:01 - HelloJni] Unknown Application ABI: 
[2015-01-28 21:06:01 - HelloJni] 3
[2015-01-28 21:06:01 - HelloJni] Unknown Application ABI: 
[2015-01-28 21:06:01 - HelloJni] in
[2015-01-28 21:06:01 - HelloJni] Unknown Application ABI: 
[2015-01-28 21:06:01 - HelloJni] ./AndroidManifest.xml
[2015-01-28 21:06:01 - HelloJni] Unknown Application ABI: 
[2015-01-28 21:06:01 - HelloJni] 
[2015-01-28 21:06:01 - HelloJni] Unknown Application ABI: 
[2015-01-28 21:06:01 - HelloJni] 
[2015-01-28 21:06:01 - HelloJni] Unknown Application ABI: 
[2015-01-28 21:06:01 - HelloJni] 
[2015-01-28 21:06:01 - HelloJni] Unknown Application ABI: 
[2015-01-28 21:06:01 - HelloJni] 
all
[2015-01-28 21:06:01 - HelloJni] Unable to detect application ABI's

这是由于android:minSdkVersion和项目的编译版本不一致,造成的,我们改成一致,都是10,再次运行,发现又报了一个错误:

[2015-01-28 21:13:32 - HelloJni] gdbserver output:
[2015-01-28 21:13:32 - HelloJni] run-as: exec failed for lib/gdbserver Error:No such file or directory


[2015-01-28 21:13:32 - HelloJni] Verify if the application was built with NDK_DEBUG=1

我们修改一下C/C++ Build command:Properties-->C/C++ Build,去掉Use default build command前面的复选框,在
build command中输入:ndk-build NDK_DEBUG=1,截图如下:


再次Debug我们的项目,发现没有进我们打的断点,但是我们发现了Android Native Application gdb运行起来了,如下:


同时在控制台上打印出如下的错误代码:

warning: Could not load shared library symbols for 88 libraries, e.g. /system/bin/linker.
Use the "info sharedlibrary" command to see the complete listing.
Do you need "set solib-search-path" or "set sysroot"?
warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code.

我试过,这个错误信息对我们的影响不大,我们按模拟器的返回键退出程序,再次进入,我们发现,进入断点了,可以调试了,截图如下:



到此,我们调试就成功了!!!

还有两个遗留问题

1.为什么android:minSdkVersion要跟项目的编译版本一致

2.调试第一次为什么不进入断点,而要退出再次进入才会进入断点和控制台报出的

warning: Could not load shared library symbols for 88 libraries, e.g. /system/bin/linker.
Use the "info sharedlibrary" command to see the complete listing.
Do you need "set solib-search-path" or "set sysroot"?
warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code.

有知道的网友欢迎给我留言,也欢迎有不懂的地方向我提问,谢谢大家!!!


感谢http://blog.csdn.net/lovexieyuan520/article/details/43212333



1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 六个月宝宝认人怎么办 十一个月宝宝断奶后辅食怎么办 6个月宝宝不会坐怎么办 7个月宝宝坐不住怎么办 三个月宝宝白天闹觉怎么办 3个月宝宝不追声怎么办 一岁宝宝垃肚子怎么办 新生儿四天没大便怎么办老放屁 新生儿四五天不大便怎么办 新生儿五天没解大便怎么办 婴儿五天没拉大便怎么办 宝宝45天不拉屎怎么办 儿童4天不大便怎么办 4一5天不大便怎么办 俩月的宝宝便秘怎么办 宝宝6天没大便怎么办 新生儿3天不大便怎么办 50天宝宝几天没有大便怎么办 宝宝一吃奶就拉怎么办 2个月宝宝不拉屎怎么办 吃苹果呛到气管怎么办 三个月宝宝五天没拉大便了怎么办 三个月的宝宝五天不大便怎么办 十天婴儿不大便怎么办 宝宝断奶不喝牛奶怎么办 宝宝喝羊奶大便干燥怎么办 4个月宝宝睡眠少怎么办 8个月婴儿不吃奶粉怎么办 满月的宝宝黄疸高怎么办 刚满月的宝宝黄疸高怎么办 换奶粉孩子不喝怎么办 宝宝整夜哭闹不睡觉怎么办 满月宝宝整夜不睡觉怎么办 6个半月宝宝一喂粥就哭怎么办 宝宝敷鸡蛋白过敏怎么办 七个月宝宝不吃米糊怎么办 涨奶引起的发烧怎么办 8个月宝宝积食怎么办 宝宝吃奶一会就睡了怎么办 宝宝喝凉酸奶拉肚子怎么办 宝宝戒奶不吃奶粉怎么办