标签:
一 概述:
Eclipse调试NDK程序的操作并不难,难的是环境的搭建。光是安装Eclipse就有不少问题,真是“大错不犯,小过不断”不胜期烦。在网上,已经有先行者记录下了Eclipse断点调试Android NDK程序的方法:
《Eclipse + ADT(包括NDK Plugin) + CDT 搭建Android NDK开发环境》
网址:http://blog.sina.com.cn/s/blog_48ed03c80101nhei.html
我遇到的情况与上文有些不同,上文开篇就说“Android应用程序的开发环境比较容易搭建”,但我在开发环境搭建时已经遇到问题了。光是Eclipse我就反复安装了三次。我遇到了很多上文没有提及的问题,可能是因为所在的平台不同的原因吧(我在MAC上搭的)。下面我将着重说明那些上文没有的内容。为求文章的连贯性,文本也会简要的提及一些上文已经有的重要内容,不过只作蜻蜓点水式的介绍,所以我也建议大家看看上文。
二 功能要求描述
*(Mac)OS X Yosemite 版本 10.10.2
* Android SDK + android-ndk-r10e + ant + Eclipse + CDT + ADT
可以在Eclipse编写及调试NDK程序(断点调试)。效果图如下:
三 实现方法
3.1 环境搭建遇到问题的解决方法
3.1.1 Android SDK 的下载
因为JDK的官网可以直接访问,所以JDK下载及安装都比较顺利。我遇到的问题是Android SDK的下载。我是在“Android Developer”(Android 官网)上找Android SDK的安装包的。所以第一问题来了:百度直接搜出来的只是“Android Developer”的旧版镜像。下面是当前我分别在百度及必应两引擎上,找到的“Android Developer”的主页。
这个蓝色背景的,是bing上搜出来的“Android Developer”官网。从网址看来,这个才是实时的官网版的网站。应该补充说明的是,该网对于我们来说是不能直接访问的。我是用了代理才能访问。为什么不能直接访问的原因,其实搞技术的人都懂的(^_^).
这个白色背景的,是百度上搜出来的“Android Developer”官网。从网址看来,并不是“Android Developer”官方网站。但其内容却得确是“Android Developer”官网旧版本的内容。而且该网我们可以直接访问(虽然有点慢)。所以这只是一个国内的镜像,其更新速度一定没有真正官网那么快。
建议大家到真正的官网上下载Adnroid SDK,Android NDK 及 ADT 等工具。并且下载时尽可能地使用下载工具而不是直接下载(我用的是“迅雷”)。原因是:真正的官网上的工具版本都比较新;很多下载工具无需设置代理也能下载到国外的资源。再者我的代理是有流量上限的。用工具下载,可以节省流量查来问题。
3.1.2 Android SDK 的更新
Android SDK 的更新不能直接更新。这是我遇到的第二个问题。我曾想去用“迅雷”代为下载。但发现如下这个文件,“迅雷”也下载不了:
只好上网查另外的方法,结果查到了两种用修改本地hosts映射到可用ip的方法。
方法一:
把如下的host设置加入到 /etc/hosts中:
#第一组设置 #203.208.49.162 dl.google.com #203.208.49.162 dl-ssl.google.com #第二组设置 203.208.49.164 dl.google.com 203.208.49.164 dl-ssl.google.com
上面两组设置中,用一组就可以了。两组IP,不保证长期有效。完成上面的设置,启动Android SDK Manager就可以成功更新了。这也是我查到的最简单的方法。该方法有个问题:小部分更新包会下载失败。
方法二:
使用“栋力无限”Android源。请进入如下网址:
http://www.sxrczx.com/pages/ubuntu.uestc.edu.cn/android/repository/index_1431450123772.html
或者百度一下:栋力无限镜像站-Android镜像站点使用帮助 。 按网页中的说明进行操作即可。 该方法的步骤相对多一些。好处是,更新包都能下。
3.1.3 Eclipse的获取及安装
Eclipse的官方下载网址是:http://www.eclipse.org/downloads/。我在这里遇到的问题仍然是下载失败。官默认下载的是Eclipse的自动安装程序,该自动安装程序用“迅雷”可以很方便地下载到。但在使用该自动安装程序安装Eclipse时,该程序会到国外的服务器上下载文件,这时的下载会失败。所以我们应该直接下载程序包:
我下载的是上图中,最下面的那一个。因为那个自带了CDT。无需另外安装。如果你下载的是无CDT的版本,那就要记住,先装CDT再装ADT.而在安装ADT时,我按装说明输入网址后,同样出现下载失败的问题,所以我直接到Android官网上下载其程序包了。下载的页面是:http://developer.android.com/intl/zh-cn/sdk/installing/installing-adt.html
同样要用“迅雷”下。在安装ADT时我遇到了一个很吓人的警告,说是签证有问题部分文件会无效或不安装。其实这个不用怕,直接点击"OK"就是了。因为Android官网就是这样说的:
3.2 导入NDK工程及相关设置
直接创建JNI工具的方法已经在《Eclipse + ADT(包括NDK Plugin) + CDT 搭建Android NDK开发环境》一文中有详细说明了。所以本文只说导入时的注意事项。我导入的是NDK Sample中HelloJni。导入NDK工程是与导入普通Android工程方法是相同的。所以不冗述,这里重点说导入后的设置。
3.2.1 设置好Android SDK及Android NDK
用“视窗键+,”进入"Preferences"设置。如下图,你会找到设置SDK及NDK的地方的
上面是SDK,下面是NDK:
3.2.2 Native相关设置
加入Native支持。在Package Explorer中选中刚导入的HelloJni工程,右键选择Android Tools -> Add Native Support..,填写导入的动态库的名称,这可以对照已经有的Android.mk文件中的LOCAL_MODULE设置。注意,“Add Native Support..”这个操作会自动生成一些.mk文件及.c文件。这有可能与导入的原工程冲突应注意(必要的操作前备份一下重要的文件)。一般来说删掉自动生成的文件即可解决冲突问题。不能省略“Add Native Support..”这一步操作,否则Eclipse会出现找到不C++菜单选项的问题。
加入C/C++头文件路径。在Package Explorer中选中刚导入的HelloJni工程,右键选择Properties。
实质上我只导入了一个目录,如下:
/Users/apple/installed/android-ndk/android-ndk-r10e/platforms/android-14/arch-arm/usr/include
其它目录是自动导入的。自己导入的目录与选定的目标API版本有关。到了这里HelloJni就可以编译了。
3.2.2 Android工程的修改
因为直接使用JDB调试有一个问题,那就是程序要已经启动了,JDB才可以连接。这个就会“错过”了程序启动的的代码。我在网上查到了一种直接用代码停住程序的方法:加入“android.os.Debug.waitForDebugger();”
public class HelloJni extends Activity { ...... public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //就是下面这一句代码可以让程序停下来等待JDB的连接 android.os.Debug.waitForDebugger(); TextView tv = new TextView(this); tv.setText( stringFromJNI() ); setContentView(tv); } ...... }
到这里就可以断点高调试NDK程序了。
3.2.3 最后一些问题
问题:可以编译,但调试时出现“Unknown Application ABI”错语。 解决方法:在Androidmanifest.xml中修改minSdkVersion及targetSdkVersion即可解决(调高一点)。
问题:调试时弹出的设备选择窗中没有设置选项。 解决方法:其实不是没有设备,只是需要滚屏才能看到选项。在备选择框中上下滚民间即可看到设备选项。
问题:设置了C代码中的断点,但程序没有停下来。解决方法:检查“android.os.Debug.waitForDebugger();”这一句是否有加入程序。另外需用"Debug As"->“Android Native Application” 进行设试
Eclipse替代ndk-gdb断点调试Android NDK程序
标签:
原文地址:http://my.oschina.net/daoren/blog/515644