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

一 概述:
html

      Eclipse调试NDK程序的操做并不难,难的是环境的搭建。光是安装Eclipse就有很多问题,真是“大错不犯,小过不断”不胜期烦。在网上,已经有先行者记录下了Eclipse断点调试Android NDK程序的方法:java

《Eclipse + ADT(包括NDK Plugin) + CDT 搭建Android NDK开发环境》
网址:http://blog.sina.com.cn/s/blog_48ed03c80101nhei.html
android


我遇到的状况与上文有些不一样,上文开篇就说“Android应用程序的开发环境比较容易搭建”,但我在开发环境搭建时已经遇到问题了。光是Eclipse我就反复安装了三次。我遇到了不少上文没有说起的问题,多是由于所在的平台不一样的缘由吧(我在MAC上搭的)。下面我将着重说明那些上文没有的内容。为求文章的连贯性,文本也会简要的说起一些上文已经有的重要内容,不过只做走马观花式的介绍,因此我也建议你们看看上文。


二 功能要求描述
shell

*(Mac)OS X Yosemite 版本 10.10.2ubuntu

* Android SDK +  android-ndk-r10e + ant + Eclipse + CDT + ADT
服务器

能够在Eclipse编写及调试NDK程序(断点调试)。效果图以下:app

三 实现方法eclipse

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就能够编译了。要注意的是编译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    

相关文章
相关标签/搜索