Eclipse替代ndk-gdb断点调试Android NDK程序

一 概述:

      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程序(断点调试)。效果图如下:

140016_ckAp_990640.jpg

三 实现方法

3.1 环境搭建遇到问题的解决方法

3.1.1 Android SDK 的下载

      因为JDK的官网可以直接访问,所以JDK下载及安装都比较顺利。我遇到的问题是Android SDK的下载。我是在“Android Developer”(Android 官网)上找Android SDK的安装包的。所以第一问题来了:百度直接搜出来的只是“Android Developer”的旧版镜像。下面是当前我分别在百度及必应两引擎上,找到的“Android Developer”的主页。

153655_Is8s_990640.jpg

这个蓝色背景的,是bing上搜出来的“Android Developer”官网。从网址看来,这个才是实时的官网版的网站。应该补充说明的是,该网对于我们来说是不能直接访问的。我是用了代理才能访问。为什么不能直接访问的原因,其实搞技术的人都懂的(^_^).

154859_r5Lk_990640.jpg

这个白色背景的,是百度上搜出来的“Android Developer”官网。从网址看来,并不是“Android Developer”官方网站。但其内容却得确是“Android Developer”官网旧版本的内容。而且该网我们可以直接访问(虽然有点慢)。所以这只是一个国内的镜像,其更新速度一定没有真正官网那么快。

      建议大家到真正的官网上下载Adnroid SDK,Android NDK 及 ADT 等工具。并且下载时尽可能地使用下载工具而不是直接下载(我用的是“迅雷”)。原因是:真正的官网上的工具版本都比较新;很多下载工具无需设置代理也能下载到国外的资源。再者我的代理是有流量上限的。用工具下载,可以节省流量查来问题。


3.1.2 Android SDK 的更新

    Android SDK 的更新不能直接更新。这是我遇到的第二个问题。我曾想去用“迅雷”代为下载。但发现如下这个文件,“迅雷”也下载不了:

180836_Fzw7_990640.jpg

只好上网查另外的方法,结果查到了两种用修改本地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时,该程序会到国外的服务器上下载文件,这时的下载会失败。所以我们应该直接下载程序包:

205959_pLzl_990640.jpg

我下载的是上图中,最下面的那一个。因为那个自带了CDT。无需另外安装。如果你下载的是无CDT的版本,那就要记住,先装CDT再装ADT.而在安装ADT时,我按装说明输入网址后,同样出现下载失败的问题,所以我直接到Android官网上下载其程序包了。下载的页面是:http://developer.android.com/intl/zh-cn/sdk/installing/installing-adt.html
同样要用“迅雷”下。在安装ADT时我遇到了一个很吓人的警告,说是签证有问题部分文件会无效或不安装。其实这个不用怕,直接点击"OK"就是了。因为Android官网就是这样说的:

212512_1s84_990640.jpg


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的地方的

215230_320t_990640.jpg

上面是SDK,下面是NDK:

215510_uXR8_990640.jpg

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。


222805_L4Jc_990640.jpg

实质上我只导入了一个目录,如下:

/Users/apple/installed/android-ndk/android-ndk-r10e/platforms/android-14/arch-arm/usr/include

其它目录是自动导入的。自己导入的目录与选定的目标API版本有关。到了这里HelloJni就可以编译了。要注意的是编译Release 版本时用“ndk-build NDK_DEBUG=0”,编译 Debug版本时用“ndk-build NDK_DEBUG=1”。相关的设置方法可以参看《Eclipse + ADT(包括NDK Plugin) + CDT 搭建Android NDK开发环境》。


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启动时会有“Error when loading the SDK”警告.解决方法如下:http://jingyan.baidu.com/article/aa6a2c14fb54190d4c19c480.html    


转载于:https://my.oschina.net/daoren/blog/515644

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值