ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:1.10MB ,
资源ID:3639585      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3639585.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Android源码分析工具及方法.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Android源码分析工具及方法.docx

1、Android源码分析工具及方法Android源码分析工具及方法标 题: 【原创】Android源码分析工具及方法作 者: MindMac时 间: 2014-01-02,09:32:35链 接: 在对 Android 源码进行分析时,如果有得力的工具辅助,会达到事半功倍的效果。本文介绍了一些在分析 Android 源码时使用的一些工具和方法,希望能够帮助到有需要的同学。Eclipse在 Android 应用程序开发过程中,一般会使用 Eclipse,当然 Google 在 2013 年也推出了针对 Android 开发的 IDE 工具 Android Studio。借助于 Eclipse 可以

2、更好的分析 Android 源码,关于 Android 源码的下载和编译在此省略,网上有很多相关的教程,当然最好是参考 Google官方的文档了, 提供了从源码下载到编译运行的所有步骤。在编译完 Android 源码后,可以将源码导入到 Eclipse 中方便后续的分析,具体步骤如下(可参考深入理解 Android 卷 IIP7-P8): 将 Android 源码目录下/development/ide/eclipse/.classpath 复制到 Android 源码根目录;/development/ide 目录下除了 eclipse 文件夹以外,还有 intellij,emacs 和 xco

3、de 文件夹,这些文件夹下提供了相应 IDE 的配置文件; /development/ide/eclipse/.classpath 文件供 Eclipse 使用,文件内容是源码目录中各个模块的路径,基本内容如图 1 所示。可以根据自己分析的需要来修改.classpath 的内容,例如如果只需要分析 Framework 相关的模块,可以把一些不属于 Framework 的源码目录路径从该文件中注释或者删除掉;图 1.classpath 文件基本内容 在 Eclipse 中单击 File - New - Java Project,在弹出的窗口中填写 Project Name 并去除Use defa

4、ult location 的勾选,将 Location 选择为 Android 源码的根目录,如图 2 所示。完成后点击 Finish 按钮,由于 Android 源码文件较多,导入过程可能会持续较长一段时间(视机器性能而定)。图 2 在 Eclipse 中导入 Android 源码需要注意的几点: 在.classpath 文件中会有一些指向/out/target/.的路径,而 out 目录是在对 Android源码进行编译后生成的,所以在将 Android 源码导入到 Eclipse 之前需要完成对Android 源码的编译; 导入源码前请取消 Eclipse 的自动编译选项(Android

5、 源码文件很多,编译一遍比较耗时),去除菜单栏 Project 下的 Build Project Automatically 的勾选即可。完成 Android 源码的导入后,就可以借助 Eclipse 进行源码的分析。一般我在分析 Android 源码时,主要借助 Eclipse 的自动定位功能。以分析 ActivityManagerService 为例,该服务由 system_server 线程创建,在 SystemServer.java(/frameworks/base/services/java/com/android/server/SystemServer.java)的 main 函数

6、入口处调用了 System.currentTimeMillis()函数,那么如果希望分析该函数的具体实现过程,则可以按住 Ctrl 键,将鼠标移动到调用的 currentTimeMillis 函数处,单击鼠标左键,则可以自动定位到 System.currentTimeMillis 函数的源代码处(可能根据快捷键的设置不同,自动定位的方法有所不同)。有了自动定位功能,就不需要自己来搜索查找源文件了。Android SDK Search在 Android 开发或者源码分析时,一般会去查看 Google 官方提供的 Android API,如果希望深入了解 API 实现的细节,当然最好的方法就是去看

7、源代码了。对于在线 API 文档,如果在查看时,还能够查看到源代码那当然是最好不过的。在 Chrome 浏览器下,可以安装 AndroidSDK Search 扩展程序来达到这个目的,该扩展程序在 Chrome 网上应用店截图如下所示。安装完该扩展程序后,再次搜索 Android API 后,会在相应的搜索结果后增加一个 view source链接。例如搜索 Activity 类,结果如图 4 所示。点击 view source 链接,就可以打开 Activity类的源代码,如图 5 所示,从网页中可以看出其实是链接到了 Google 的 Android 源码的 Git 图 3 Android

8、 SDK Search图 4 添加 Android SDK Search 扩展程序后的效果图 5 View Source 打开的 Activity 源码库。当然这种在浏览器下分析源代码是有诸多不便的,远没有在 Eclipse 等 IDE 下来的方便。不过我们可以根据网页上给出的路径在本地源码中快速地定位到目标代码,将图 5 中两个红框的路径拼接后得到的/frameworks/base/core/java/android/app/Activity.java 就是本地源码对应的路径,这样就可以使用 Eclipse 等 IDE 来分析源码。对于上述情况,也可以直接在 Eclipse 中关联 Andr

9、oid 源代码(主要是 Framework 的源码)。例如对于在一个 Android 工程中,希望查看 Activity 源码,如下代码所示:代码:1. public class MainActivity extends Activity 2. Override3. protected void onCreate(Bundle savedInstanceState) 4. super.onCreate(savedInstanceState);5. setContentView(R.layout.activity_main);6. .7. 8. 可以使用 Eclipse 提供的快速定位功能来查看

10、 Activity 类的源码,但是点击后会显示 Source notfound,如图 6 所示。对于 Android4.0 以后的版本,在下载 SDK 时,可以同时选择下载源码,如图 7,下载完成后在 Android SDK 目录下会有 sources 目录,其下存在相应版本的 Android源码,如 android-17 等。点击 Attach Source,在出现的对话框中,选择 External location,点击 External Folder,选择下载完的源码目录,如./sources/android-17,如图 8 所示,点击 OK就可以看到 Activity 类的源码信息了。

11、图 6 Source Not Found Error图 7 下载 Android 对应的源码图 8 Eclipse 关联 Android 源码由于只有 Android 4.0 以后的版本存在相应的 source 目录,所以对于 Android4.0 之前的版本是无法通过下载 SDK 的方式来获得源码的,当然网上也存在一些 4.0 之前的 source 压缩包可以使用。另一种更方便的方法是安装 Android Sources 的 Eclipse 插件(https:/code.goo Eclipse 中可以 Install New Software,添加的 Location 地址为 http:/a

12、dt-较大,大约 240M 左右,可能下载安装时间较长。安装完成后对于大部分 Android 版本都可以查看源码了。Android Sources 现在支持的版本如下: 14 - Android 4.0.1 10 - Android 2.3.4 9 - Android 2.3 8 - Android 2.2 7 - Android 2.1 6 - Android 2.0.1 4 - Android 1.6 3 - Android 1.5AndroidXRef借助 Eclipse 以及本地源码可以比较方便地分析 Android 源码,但是对于 Native 代码的调用就无法通过 Eclipse

13、的快速定位来查看相应的 Native 源码了,而且 Android 源码中对 Native库的加载一般不是通过在 Static 块里调用 System.loadLibrary 来加载库文件并完成 Native 函数注册的,所以定位这类代码比较困难。一个可以采取的方法是使用 UltraEdit 等工具来在文件中搜索特定的字符串,如函数名,对于 JNI 函数来说,一般存在于/frameworks/base/core/jni目录下。在文件数目较多的情况下,使用这种方法搜索起来还是比较忙的,所以这里介绍下AndroidXRef。AndroidXRef( Android 源码的交叉索引,可以快速的搜索符

14、合特定条件的 Android 源代码,后台是基于 OpenGrok 引擎,OpenGrok 主要用来在源码中搜索、交叉索引以及进行导航。AndroidXRef 提供了完整的 Android 源码的索引,包括内核源码。在 AndroidXRef 主页的右侧显示了可用的源码版本,如图 9 所示,点击相应的源码版本链接就可以进入对应的源码分支,如图 10 所示。 图 9 AndroidXRef 主页图 10 AndroidXRef KitKat4.4-r1 分支图 10 右侧提供在特定目录下搜索,例如在分析 Framework 时,可以选择 frameworks 目录,这样可以减少搜索范围,能够更加

15、精确地定位到需要的源代码。左侧则是提供了一些搜索的条件,其意义如下(在指定的 Project(s)下): Full Search: 进行全文搜索,会匹配所有的单词、字符串、标识符以及数字等,例如在frameworks 下通过 Full Search 搜索”activity”,则会显示所有包含 activity 字符(忽略大小写)的结果,即使是注释也会显示出来,如图 11 所示。点击绿色背景的链接会打开包含activity 字符串文件所在的文件夹;点击左侧文件名如 WidgetAdder.java 链接会打开包含activity 字符串文件;点击右侧每一行的搜索结果链接同样会打开相应的文件内容;

16、图 11 Full Search 搜索 Definition:搜索符号定义相关的代码,例如搜索 startActivityIfNeeded 函数的定义,显示结果如图 12 所示,从搜索结果可以看到,右侧绿色字体表明了是位于 Activity 类中的 方法;图 12 Definition 搜索1 Symbol:搜索符号,例如可以搜索类中的成员变量等,图 13 显示了通过 Symbol 搜索WINDOW_HIERARCHY_TAG 的结果;图 13 Symbol 搜索 File Path:搜索源码文件名中包含给定字符串的文件,例如想要搜索文件名包含 Activity的源码文件,则可以在 File

17、Path 中填入 Activity 进行搜索,结果如所示;图 14 File Path 搜索 History:在 Git 库中的 history log comments 中搜索给定的字符串,这个用处应该不是特别大,只是从 Android 源码提交者的 comments 中搜索信息。例如搜索 god 字符串,显示结果如图 15 所示,但是点击源码文件链接,只是会显示源码内容,并不会附加 historylog comments 内容;图 15 History 搜索当然可以通过组合的方式使用上述提到的搜索方法,例如想在 Activity.java 文件中搜索finish 函数的定义,则可以在 De

18、finition 中填入”finish”,在 File Path 中填入”Activity.java”,搜索结果如图 16 所示。图 16 组合搜索因为 AndroidXRef 使用的是 OpenGrok 引擎,因此还支持一些其他的搜索方式: + 表示包含此字符串,- 表示包含此字符串。例如在 Full Search 中搜索包含 activity字符串但是不包含 service 字符串的源文件,可以填入+”activity” -“service”(去掉双引号同样可以,但是对于不可分割的词且两者间包含空格则双引号不可去,此规则适用于所有的搜索规则,例如 Full Search “final St

19、ring”,双引号去除表示或的关系,这个与 Google 的搜索规则是一样的); 布尔操作,可以使用 AND(&),”+”,OR(|),NOT(!)以及”-”(AND 等必须全部大写),例如搜索既包含 final 又包含 String 的源码文件,可以 Full Search 中填入”final” AND “String”; 使用通配符,”?”代表一个字符,”*”代表多个字符(“?”和”*”不可用于字符串的开头); 模糊查询,可以使用”搜索包含与提供的字符串拼写类似的源码文件等内容; 转义字符,OpenGrok 中使用到的特殊字符包括+ - & | ! ( ) * ? : ,因此如果需要搜索的

20、内容中包含这些特殊字符,可以使用进行转义,例如搜索(1+1):2,可以这样(1+1):2。更加详细的使用规则可以参考 AndroidXRef 的 Help(个人觉得 AndroidXRef 适合用来搜索定位源码文件的路径,至于源码的实际分析当然借助于 Eclipse 等 IDE 会更加方便。总结本文主要总结了我个人在 Android 源码分析过程中使用到的一些工具及基本方法,纯属一家之言,权当抛砖引玉,如果有更好的方法欢迎交流学习!注:本帖由看雪论坛志愿者PEstone 重新将pdf整理排版,若和原文有出入,以原作者附件为准 关于在Android源码分析过程中使用的一些工具以及基本方法的总结,纯属一家之言,当然还有更多更好的方法,欢迎交流!

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1