您的位置:首页 > 移动开发 > Android开发

《深入理解Android:Wi-Fi,NFC和GPS》章节连载[节选]--第一章 准备工作

2014-03-02 16:06 483 查看
首先感谢各位兄弟姐妹们的耐心等待。本书预计在3月中旬上市发售。从今天开始,我将在博客中连载此书的一些内容。注意,此处连载的是未经出版社编辑的原始稿件,所以样子会有些非专业。
[要点:建议那些还在拿vim看代码的兄弟,赶紧用source insight或者eclipse吧。
对于搞Framework的人,必须要掌握的技能就是用Eclipse调试System_server代码
最后,没有代码,airpcap工具的兄弟,请下载本书资源]

第一章 准备工作

本章主要内容:介绍本书的内容组成;
工具使用;
本书资源下载说明。

1.1 Android系统架构

Android是Google公司推出的一款手机开发平台。该平台本身是基于Linux内核的,图1-1展示了这个系统的架构。


图1-1 Android系统架构从图1-1可知,Android系统大体可分为四层,从下往上依次是:
Linux内核层,目前Android 4.4(代号为KitKat)基于Linux内核3.4版本。
Libraries层,这一层提供动态库(也叫共享库)、Android运行时库、Dalvik虚拟机[1]等。从编程语言上来说,这一层大部分都是用C或C++写的,所以也可以简单地把它看成是Native层。
Libraries层之上是Framework层,这一层大部分用Java语言编写。它是Android平台上Java世界的基石。
Framework层之上就是Applications层了,和用户直接交互的就是这些应用程序,它们都是用Java开发的。

1.2 工具使用

本节介绍Android开发和源码研究过程中的三件利器。

1.2.1 Source Insight的使用

Source Insight是阅读源码的必备工具,是一个Windows下的软件,在Linux平台上可通过wine安装。下面介绍一下如何在Source Insight中导入源码。
使用Source Insight时,需要新建一个源码工程,通过菜单项Project→New Project,可指定源码的目录。
提示 特别提醒读者的是,很多读者常把Android所有源代码都加到工程中,这将导致Source Insight运行速度非常慢。
实际上,只需要将当前分析的源码目录加到工程即可。例如,新建一个Source Insight工程后,只把源码/framework/base目录加进去了。另外,当一个目录下的源码分析完后,可以通过Project→Add and Remove Project Files选项把无须再分析的目录从工程中去掉。上述步骤如图1-2所示。


图1-2 添加或删除工程中的目录从图1-2右边的框可知:Source Insight支持动态添加或删除目录。通过这种方式可极大减少Source Insight的工作负担。
提示:一般首先把framework/base下的目录加到工程,以后如有需要,再把其他目录加进来。另外,关于Source Insight其他使用技巧,读者可参考《深入理解Android:卷1》第1章。

1.2.2 Eclipse的使用

笔者一般使用Source Insight来查看Native代码,而Android推荐的集成开发工具Eclipse却既能查看Java代码和Native代码,也能调试系统核心进程。

1. 导入Android Framework Java源码

注意,这一步必须编译完整个Android源码才可以实施,步骤如下:
1) 将Android源码目录/development/ide/eclipse/.classpath复制到Android源码根目录。
2) 打开Android源码根目录下的.classpath文件。该文件是供Eclipse使用的,其中保存的是源码目录中各个模块的路径。
由于我们只关心Framework相关的模块,因此可以把一些不是Framework的目录从该文件中注释掉。同时,去掉不必要的模块也可加快Android源码导入速度。图1-3所示为该文件的部分内容。


图1-3 .classpath文件内容示意然后,请读者单击Eclipse菜单栏New->Java Project,弹出如图1-4所示的对话框。设置Location为Android 4.2源码所在路径。


图1-4 导入Android源码示意图由于Android 4.2源码文件较多,导入过程会持续较长一段时间。
提示:
1)导入源码前一定要取消Eclipse的自动编译选项(通过菜单栏Project→Build Project Automatically设置)。另外,源码导入完毕后,读者千万不要清理(clean)这个工程。清理会删除之前源码编译所生成的文件,导致后续又得重新编译Android系统了。
2)笔者在本书的共享资源中提供了一个已经配置好的.classpath文件,请读者下载并使用它。

2. 导入Android Native代码

本节介绍如何在Eclipse中导入Android Native代码,其步骤如下所示:
导入Android Framework中的Java文件后,首先切换到C/C++视图(通过单击菜单栏Window→Open Perspective→选择C/C++)。
单击菜单栏New→C/C++,然后选择Convert to a C/C++ project。如图1-5所示:


图1-5 转换成C++工程示意按照图1-5操作之后,之前的Java工程就被转成了C++工程。不过读者仍需要完成以下几个步骤。
1) 通过Properties→C/C++ General→Paths and symbols,打开该工程的路径和符号设置对话。如图1-6所示。


图1-6 路径和符号设置2)在图1-6上边的框中选择Includes页面,然后点击下方框中的Import Settings,然后选择4.2源码/development/ide/eclipse/android-include-paths.xml以导入路径配置。
3) 同上,再选择图1-6中的Symbols页面,然后通过下方框中的Import Settings以导入4.2源码/development/ide/eclipse/android-symbols.xml文件。
以上配置好路径和符号文件后,读者可进一步通过图1-6上框中的Source Location页面选择此次需要导入的C++文件。这一步如图1-7所示。


图1-7 过滤C++文件通过图1-7中Add Folder选项,读者可以选择哪些目录下的C++文件被过滤掉。笔者目前仅导入了frameworks目录下的Native代码。
当所有文件都导入完毕后,读者通过右击C++工程,然后选择Index→Rebuild来重新生成Native代码的索引。
至此,通过上述方法就能导入Android中的Native代码了。

3. 调试SystemServer

调试SystemServer的步骤如下:
1) 首先编译Android源码工程。编译过程中会有很多警告。如果有错误,大部分原因是.classpath文件将不需要的模块包含了进来。读者可根据Eclipse的提示做相应处理。笔者配置的几台机器基本都是一次配置就成功了。
2) 在Android源码工程上单击右键,依次单击Debug As→Debug Configurations,弹出如图1-8所示的对话框,然后从左边找到Remote Java Application一栏。


图1-8 Debug配置框示意图3) 单击图1-8中黑框中的新建按钮,然后按图1-9中的黑框中的内容来设置该对话框。



图1-9 Remote Java Application配置示意图由图1-9所示,需要选择Remote调试端口号为8600,Host类型为localhost。8600是SystemServer进程的调试端口号。Eclipse一旦连接到该端口,即可通过JDWP协议来调试SystemServer。
提示:读者也可阅读《深入理解Android:卷2》第1章来了解更多使用Eclipse的建议。

1.2.3 BusyBox的使用

BusyBox,号称Linux平台上的“瑞士军刀”,它提供了很多常用的工具,例如grep、find等。这些工具在标准Linux上都有,但Android系统却去掉了其中的大多数工具。这导致了我们在调试程序、研究Android系统时步履维艰,所以就需要在手机上安装BusyBox。

1. 下载BusyBox

可从网站http://www.busybox.net/downloads/binaries/1.21.1/下载已编译好的BusyBox,如图1-10所示。


图1-10 BusyBox下载注意该网站已经根据不同平台编译好了对应的BusyBox,我们可根据自己手机的情况下载对应的文件。笔者下载了支持Galaxy Note 2的busybox-armv7l。
提升:arm v7表示ARM指令集为v7,目前ARM Cortex-A8/A9系列的CPU支持该指令集。

2. 安装和使用BusyBox

下载完BusyBox后,需将它adb push到手机上。如:
adb push busybox /system/xbin #为了避免冲突,笔者push到了/system/xbin目录下
cd /system/xbin #进入对应目录
chmod 755 busybox #更改busybox权限为可执行
busybox –-install . #安装busybox
grep #执行busybox提供的grep命令,或者busybox xxx执行xxx命令也行
BusyBox安装完了,如执行busybox命令,就会打印如图1-11的输出。


图1-11 BusyBox提供的工具从上图中可看出,BusyBox提供了不少的工具,这样,我们在研究Android系统时就如虎添翼了。
提示:本书共享资源中提供了busybox-armv7l的下载。

1.3 本书资源下载说明

为了减轻国内读者无法从Android官网上下载源码的烦恼,笔者在115网盘上分享了本书所使用的Android源码及其他一些资源,如图1-12所示。


图1-12 本书资源图1-12中:
4.2.2.tar.gz为4.2.2源码压缩包。请读者特别注意,本书对wpa_supplicant的分析使用的是Android 4.1源码中的wpa_supplicant,故笔者在external目录中将4.1版本中的wpa_supplicant代码复制到wpa_supplicant_8_4.1中。
classpath为Android Java配置文件,使用时请将它改名为.classpath。
busybox-armv7l是BusyBox。
com.cb.eclipse.folding_1.0.6.jar是一个Eclipse的插件,名叫Coffee Byte Java,它可以折叠代码段以方便阅读[2]
最后四个文件为笔者研究Wi-Fi时利用Wi-Fi数据截获工具AirPcap保存的相关协议数据包,其中p2p_cap为测试P2P时保存的数据包,wps_pbc和wps_pin为测试WSC PBC和PIN时保存的数据包,wpa_supplicant_analysis为测试STA加入AP时所保存的数据包。没有AirPcap工具的读者可通过Wireshark工具直接导入这些数据以更直观得方式来分析Wi-Fi。
最后,该资源的下载地址是http://115.com/lb/5lbee5qn4g5g。另外,请读者务必关注笔者的博客blog.csdn.net/innost以获取更新信息。

[1] 4.4新增了一个名为ART的虚拟机运行时,相信它的出现能提升应用程序的运行速度。
[2]其用法请参考《深入理解Android:卷2》第1章。其电子版下载地址为http://download.csdn.net/detail/innost/4408140
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐