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

首先感谢各位兄弟姐妹们的耐心等待。本书预计在3月中旬上市发售。从今天开始,我将在博客中连载此书的一些内容。注意,此处连载的是未经出版社编辑的原始稿件,所以样子会有些非专业。

[要点:建议那些还在拿vim看代码的兄弟,赶紧用source insight或者eclipse吧。

对于搞Framework的人,必须要掌握的技能就是用Eclipse调试System_server代码

最后,没有代码,airpcap工具的兄弟,请下载本书资源]

第一章  准备工作

本章主要内容:

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

1.1  Android系统架构

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

1-1  Android系统架构

从图1-1可知,Android系统大体可分为四层,从下往上依次是:

  •  Linux内核层,目前Android 4.4(代号为KitKat)基于Linux内核3.4版本。
  • Libraries层,这一层提供动态库(也叫共享库)、Android运行时库、Dalvik虚拟机[1]等。从编程语言上来说,这一层大部分都是用CC++写的,所以也可以简单地把它看成是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时,需要新建一个源码工程,通过菜单项ProjectNew Project,可指定源码的目录。

提示  特别提醒读者的是,很多读者常把Android所有源代码都加到工程中,这将导致Source Insight运行速度非常慢。

实际上,只需要将当前分析的源码目录加到工程即可。例如,新建一个Source Insight工程后,只把源码/framework/base目录加进去了。另外,当一个目录下的源码分析完后,可以通过ProjectAdd 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所示的对话框。设置LocationAndroid 4.2源码所在路径。

1-4  导入Android源码示意图

由于Android 4.2源码文件较多,导入过程会持续较长一段时间。

提示:

1)导入源码前一定要取消Eclipse的自动编译选项(通过菜单栏ProjectBuild Project Automatically设置)。另外,源码导入完毕后,读者千万不要清理(clean)这个工程。清理会删除之前源码编译所生成的文件,导致后续又得重新编译Android系统了。

2)笔者在本书的共享资源中提供了一个已经配置好的.classpath文件,请读者下载并使用它。

2.  导入Android Native代码

本节介绍如何在Eclipse中导入Android Native代码,其步骤如下所示:

  • 导入Android Framework中的Java文件后,首先切换到C/C++视图(通过单击菜单栏WindowOpen Perspective→选择C/C++)。
  • 单击菜单栏NewC/C++,然后选择Convert to a C/C++ project。如图1-5所示:

1-5  转换成C++工程示意

按照图1-5操作之后,之前的Java工程就被转成了C++工程。不过读者仍需要完成以下几个步骤。

1) 通过PropertiesC/C++ GeneralPaths 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-7Add Folder选项,读者可以选择哪些目录下的C++文件被过滤掉。笔者目前仅导入了frameworks目录下的Native代码。

当所有文件都导入完毕后,读者通过右击C++工程,然后选择IndexRebuild来重新生成Native代码的索引。

至此,通过上述方法就能导入Android中的Native代码了。

3.  调试SystemServer

调试SystemServer的步骤如下:

1) 首先编译Android源码工程。编译过程中会有很多警告。如果有错误,大部分原因是.classpath文件将不需要的模块包含了进来。读者可根据Eclipse的提示做相应处理。笔者配置的几台机器基本都是一次配置就成功了。

2)  在Android源码工程上单击右键,依次单击Debug AsDebug Configurations,弹出如图1-8所示的对话框,然后从左边找到Remote Java Application一栏。

1-8  Debug配置框示意图

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

1-9  Remote Java Application配置示意图

由图1-9所示,需要选择Remote调试端口号为8600Host类型为localhost8600SystemServer进程的调试端口号。Eclipse一旦连接到该端口,即可通过JDWP协议来调试SystemServer

提示:读者也可阅读《深入理解Android:卷2》第1章来了解更多使用Eclipse的建议。

1.2.3  BusyBox的使用

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

1.  下载BusyBox

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

1-10  BusyBox下载

注意该网站已经根据不同平台编译好了对应的BusyBox,我们可根据自己手机的情况下载对应的文件。笔者下载了支持Galaxy Note 2busybox-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.gz4.2.2源码压缩包。请读者特别注意,本书对wpa_supplicant的分析使用的是Android 4.1源码中的wpa_supplicant,故笔者在external目录中将4.1版本中的wpa_supplicant代码复制到wpa_supplicant_8_4.1中。
  • classpathAndroid Java配置文件,使用时请将它改名为.classpath
  • busybox-armv7lBusyBox
  • com.cb.eclipse.folding_1.0.6.jar是一个Eclipse的插件,名叫Coffee Byte Java,它可以折叠代码段以方便阅读[2]
  • 最后四个文件为笔者研究Wi-Fi时利用Wi-Fi数据截获工具AirPcap保存的相关协议数据包,其中p2p_cap为测试P2P时保存的数据包,wps_pbcwps_pin为测试WSC PBCPIN时保存的数据包,wpa_supplicant_analysis为测试STA加入AP时所保存的数据包。没有AirPcap工具的读者可通过Wireshark工具直接导入这些数据以更直观得方式来分析Wi-Fi

最后,该资源的下载地址是http://115.com/lb/5lbdugrdt4r。另外,请读者务必关注笔者的博客blog.csdn.net/innost以获取更新信息。



[1] 4.4新增了一个名为ART的虚拟机运行时,相信它的出现能提升应用程序的运行速度。

[2]其用法请参考《深入理解Android:卷2》第1章。其电子版下载地址为http://download.csdn.net/detail/innost/4408140


 

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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。