安卓* 系统级 Java*/C++ 代码调试

1 简介

应用开发人员当前可通过安卓* SDK 来设计和构建安卓应用项目,并使用 Eclipse* 进行调试。 但是它并没有提供相应的功能来调试系统级 Java*/C++ 代码,该代码位于安卓代码库中,不能使用 Android SDK 来构建和调试。 本文介绍了如何使用 Eclipse 来调试安卓系统级 Java/C++ 代码。

2 安装

2.1 安装 JDK

通过下列链接下载 JDK6 (Java SE 6 更新软件包): http://java.sun.com/javase/downloads/index.jsp
当前的 JDK6 名为 jdk-6u32-linux-x64.bin。 我们将举例说明如何使用。

先进行安装,然后使用默认的 JDK。

$ cd /usr/lib/jvm
$ sudo /path/to/jdk-6u32-linux-x64.bin
$ sudo ln -s jdk1.6.0_32 java-6-sun
$ export PATH=/usr/lib/jvm/java-6-sun/bin:$PATH
$ export JAVA_HOME=/usr/lib/jvm/java-6-sun

2.2 安装 Eclipse

通过下列网站下载 Eclipse 3.6.2 或更高版本:http://www.eclipse.org/downloads/
当前的 Eclipse Classic 版本时 3.7.2 (Indigo),下面让我们用它来举例说明。

$ mkdir ~/android-sdk
$ cd ~/android-sdk
$ tar zxf /path/to/eclipse-SDK-3.7.2-linux-gtk-x86_64.tar.gz

2.3 安装 Eclipse CDT 插件

要创建 C/C++ 项目并调试 C++ 代码,我们需要安装 CDT 插件。
启动 Eclipse。

$ cd ~/android-sdk/eclipse/
$ ./eclipse

如果系统中存在防火墙,请设置代理程序: “Window->Preferences->General->Network Connection”,如图 1 所示。

安卓* 系统级 Java*/C++ 代码调试

图 1. Eclipse 代理程序设置

点击“Help->Check for updates”,下载最新的 Eclipse 插件列表。
进入“Window->Preferences->Install/Update->Available Software Sites”并启用

http://download.eclipse.org/sequoyah/updates/2.0/

安卓* 系统级 Java*/C++ 代码调试

图 2. Eclipse 软件更新

安装 CDT 插件: 进入“Help->Install New Software”。
选择 “http://download.eclipse.org/sequoyah/updates/2.0/”,取消选择“Group items by category”复选框,然后选择并安装所有插件。

安卓* 系统级 Java*/C++ 代码调试

图 4. 安卓 SDK 管理器代理程序设置

下载您感兴趣的软件包(必须下载 Tools 软件包)

安卓* 系统级 Java*/C++ 代码调试

图 6. 安装 ADT 插件

按照下列步骤安装所有 ADT 插件。
然后进入“Window->Preference->Android” ,并在标有 “SDK location” 的框内输入安卓 SDK 路径。

安卓* 系统级 Java*/C++ 代码调试


$ cd ~/android-sdk
$ tar zxf android-debug-utility.tar.gz

3 调试安卓系统 Java 代码

3.1 调试 system_process

system_process 进程被称作安卓系统服务器。 系统启动时,zygote 对该进程进行分解(fork)。 下面我们来看一下如何使用 Eclipse 来调试该线程。

3.1.1 为 system_process 创建一个 pseudo(伪)安卓项目。

Dalvik 调试监测程序服务器(DDMS)只能在安卓项目中调试代码。 system_process 是从安卓代码库而非安卓项目中构建。 如要使用 Eclipse/DDMS 调试它,我们需要为其创建一个pseudo(伪)安卓项目。
进入“File->New->Project”,然后选择 “Android project”。

安卓* 系统级 Java*/C++ 代码调试

图 8. 创建一个安卓项目

安卓* 系统级 Java*/C++ 代码调试

图 10. 修改安卓软件包名称

3.1.2 使用 DDMS 调试 system_process

转至 DDMS 视图,选择 system_process,然后点击“debug”按钮。

安卓* 系统级 Java*/C++ 代码调试

图 13. 设置框架基本源路径

此外,我们还需要添加 libcore 目录。

安卓* 系统级 Java*/C++ 代码调试
图 15. 安卓项目调试工具

我们现在可以设置断点,并对安卓系统级 Java 代码进行调试。

3.2 调试安卓内建应用

安卓系统内建了许多应用(即所谓的系统应用),例如 Calendar、Settings、Gallery 等。这些项目位于安卓代码库中,并使用 system.img 进行构建。要调试 them?,我们需要为其创建 pseudo(伪) 项目,就像 system_process。 您需要将软件包名称更改为应用名称,而不是输入“system_process”。

安卓* 系统级 Java*/C++ 代码调试

图 17. 选择要调试的应用

安卓* 系统级 Java*/C++ 代码调试

图 19. 将安卓项目转化为 C/C++ 项目

4.1.2 创建调试配置

转至“Debug”视图,点击“调试按钮->Debug Configurations”,创建一个 C/C++ 远程应用调试配置,输入 app_process 二进制的名称,并禁用自动构建功能。

安卓* 系统级 Java*/C++ 代码调试

图 21. 设置 gdb 初始化脚本

点击“Connection”选项卡,将端口号改为 1234。

安卓* 系统级 Java*/C++ 代码调试

图 23. 启动 C/C++ 调试工具

等待 gdb 连接至 gdbserver:

安卓* 系统级 Java*/C++ 代码调试
图 25. 启动 C/C++ 调试工具

等待 gdb 连接至 gdbserver。

安卓* 系统级 Java*/C++ 代码调试

图 27. 将安卓服务二进制设置为调试

然后我们使用配置 system_process_1234 来启动调试工具,并等待其连接至 gdbserver。

安卓* 系统级 Java*/C++ 代码调试
Linux 内核到安卓软件堆栈,他在 Linux 开发方面拥有 8 年的丰富经验。 Jack 是 MCG 安卓上海团队的创始人和第一任经理。 从两年前的白手起家到如今的成品推出,他见证了 MCG 安卓软件开发方面的巨大发展。 目前,他的研究重点是安卓技术领域,例如 LLVM、Dalvik 和 UX,以及在上游为谷歌提供英特尔补丁。 他在英特尔 MCG/PSI 安卓开发团队的建立方面做出了突出的贡献。

声明

本文件中包含关于英特尔产品的信息。 本文件不构成对任何知识产权的授权,包括明示的、暗示的,也无论是基于禁止反言的原则或其他。 除相关产品的英特尔销售条款与条件中列明之担保条件以外,英特尔公司不对销售和/或使用英特尔产品做出任何其它明确或隐含的担保,包括对适用于特定用途、适销性或不侵犯任何专利、版权或其它知识产权的担保。

英特尔产品并非设计用于或有意用于任何英特尔产品发生故障可能会引起人身伤亡事故的应用领域。

英特尔可以随时在不发布声明的情况下修改规格和产品说明。 设计者不应信赖任何英特产品所不具有的特性,设计者亦不应信赖任何标有“保留权利”或“未定义”的说明或特性描述。 对此,英特尔保留将来对其进行定义的权利,同时,英特尔不应为因其日后更改该等说明或特性描述而产生的冲突和不相容承担任何责任。 本文信息可能随时更改,恕不另行通知。 请勿使用本文信息完成一项产品设计。

文中所述产品可能包含设计缺陷或错误,已在勘误表中注明,这可能会使产品偏离已经发布的技术规范。 这些缺陷或失误已收录于勘误表中,可索取获得。

订购产品前,请联系您当地的英特尔销售办事处或分销商,了解最新技术规范。

如欲获得本文或其它英特尔文献中提及的带订单编号的文档副本,可致电 1-800-548-4725,或访问 http://www.intel.com/design/literature.htm

性能测试中使用的软件和工作负载可能仅在英特尔微处理器上针对性能进行了优化。 诸如SYSmark和MobileMark等测试均系基于特定计算机系统、硬件、软件、操作系统及功能。 上述任何要素的变动都有可能导致测试结果的变化。 请参考其他信息及性能测试(包括结合其他产品使用时的运行性能)以对目标产品进行全面评估。

对本文件中包含的软件源代码的提供均依据相关软件许可而做出,任何对该等源代码的使用和复制均应按照相关软件许可的条款执行。

英特尔、酷睿、Core、VTune 和 Intel 标识是英特尔在美国和/或其他国家的商标。

英特尔公司 ? 2012 年版权所有。 所有权利受到保护。

*其他的名称和品牌可能是其他所有者的资产。

点击复制链接 与好友分享!回本站首页
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力
上一篇:java使用sax解析xml
下一篇:struts2入门教程五(表单数据的校验)
相关文章

java与c++一些区别

java jni调用c/c++ dll

Java和C++在细节上的差异(一)

Java和C++在细节上的差异(二)

Java和C++在细节上的差异(三)

C++调用java CXF服务端

java调用c++动态链接库

JAVA和C++高低位转换

C++调用Java

浅谈C++和JAVA的区别

图文推荐

安卓* 系统级 Java*/C++ 代码调试
适配器模式
安卓* 系统级 Java*/C++ 代码调试
Handler的介绍和使用
安卓* 系统级 Java*/C++ 代码调试
struts2上传文件
安卓* 系统级 Java*/C++ 代码调试
通过JFreeChart的饼状
分类:默认分类 时间:2015-02-27 人气:2
本文关键词:
分享到:

相关文章

Copyright (C) quwantang.com, All Rights Reserved.

趣玩堂 版权所有 京ICP备15002868号

processed in 0.041 (s). 10 q(s)