转载请注明本文出自 clevergump 的博客:http://blog.youkuaiyun.com/clevergump/article/details/51234695, 谢谢!
在 Android 开发中,如果我们临时接手一个已经在开发中的项目, 或者要分析一个开源项目时, 代码分析的思路如下:
先创建一个测试APP, 可以通过修改可运行的那个 module (通常其默认名称为 app) 的
build.gradle
文件中的applicationId
, 并修改APP名称, APP icon (通常其默认名称是ic_launcher.png
) 来与原 APP 加以区分,然后在所有的BaseActivity
和BaseFragment
的onCreate()
或onResume()
方法中加上 toast显示类名, 这样便于熟悉页面与 Activity/Fragment 文件的对应关系。分析具体的某一个页面, 包括:
- Android 该页面内部自身的代码: 一般都是 MVC 结构 Activtity/Fragment + layout (+adapter) + Bean. 而看 layout 文件时还会涉及到与 UI 图纸的对应关系。
- Android 该页面与其他相关页面之间的跳转关系,以及参数传递关系, 一般是 Intent 传递,或者事件总线传递, 或者
BroadcastReceiver
等等。 ————这些需要看需求文档。 - 该页面与后台接口之间的关系:
- 如果有后台接口文档, 则直接分析该页面对应哪个或哪些接口, 哪些控件进行了什么操作时需要与后台接口交互,具体的某一个操作对应的是后台的哪一个接口,交互时各接口各自需要传递哪些参数给后台并且会从后台接收到哪些参数。 ———-这些需要看需求文档和后台接口文档。
- 如果没有后台接口文档, 则只能尝试抓包来获取接口参数结构, 若 url 被加密则抓包也没办法查看。Android 手机抓包的具体配置可以看这篇文章。
- 这里顺便提一下, 如果是分析商业APP, 代码有可能被混淆加固了, 那么就更难分析了, 因为 java 文件名都变为 a b c 了, 通过反编译只能查看到一小部分信息。
其他细节点:
例如: 项目中如果用到了你不熟悉的库或者控件导致你分析起来非常困难时, 也可以先暂时学习一下相关知识, 待你熟悉之后, 再回来继续分析。当然, 代码分析本身就要求你要有一定的基础功底 (包括但不限于 java, Android, IDE, 常用开源库及常用控件的用法, 常用的设计模式等), 否则你分析的过程将会非常艰难。