1. api
安卓官方文档中已经提供了很多demo,在使用未知的控件时,可以采用这种方式
2. 系统源码
系统源码是最好的老师,通过一步步的点击,进入系统的源码.或者我们需要调用系统的某个应用的activity时,都可以直接翻看系统源码
一般查看源码有以下的几种方式
1) 在自己的代码中直接ctrl+鼠标右键,点进去直接查看,这种方式适合于只是简单的查看系统在api中所描述的实现逻辑
2) 直接进去源码翻看,比较适合于对安卓工程文件相当熟悉的工程师,一般查看都是先从资源清单文件开始,系统源码比较有特点,英语稍微好一点,能够将自己想表达的意思直接搜索清单文件,比如说要打开系统的主页面launcher应用程序,那么路径是在.../packages/apps/launcher2,最好还是要非常熟悉安卓工程的构成,这样在翻阅的时候,你想搜索什么,定位会很清晰的
3) 新建工程,从系统的源码导入(还是要对安卓工程和安卓系统源码的组织结构有一定的了解,导入工程后一般会有错误的,但是这不是我们所关心的,我们不是在编译源码),通过搜索关键字,一般我们搜索的方式或者操作步骤如下:(通用搜索在eclipse中直接快捷键ctrl+H即可)
i. 查看到系统的某个activity中的内容,这个东东就算用脚丫子想,也是在values/strings.xml中,就是是动态变化的一些值(除了数值),都是在这个里面(国际化嘛)
ii. 通过查找到vlaues,那么就看到了对应的name,name的通常情况下,是在布局文件中引用的,也有的是在java代码中的(这是比较特殊的),那么直接搜索name
iii. 安卓通用情况,那么这是看到后台就有values和layout文件下的文件,layout下的文件是我们关心的,打开layout下的这个文件,看到控件的id,再次搜索id
iv. 搜索到id,打开对应的java文件就看到了,一路ctrl+K,定位到处理的逻辑
v. 代码逻辑看懂后,复制粘贴,报错的很有可能是底层隐藏的方法,隐藏的方法,是可望而不可即的吗?非也,只不过使用的方式特殊一点而已,用反射不就搞定啦?
3. 参照他人的代码
1) 查看系统后台日志
一般在看到某个应用在调用系统的activity时,我们好奇他发送了怎么样的intent, logcat中会显示的,想实现这个目的,采用这种方式是比较简单的
2) 反编译
反编译是一种很好的方式,什么时候需要使用到反编译呢?
一般如下的几种场景使用到反编译
(1) 要参照其他应用的图片
(2) 要参照其他应用的布局
(3) 要参照其他应用的逻辑处理
针对以上的几个需求场景,我们的处理方式分别如下:
只是获取图片的处理:
图片在安卓应用中不是隐私的东西,要获取到的话,很简单,直接下载到其他应用的apk文件,即安装包,将后缀名修改为.zip即可,解压缩开,在res/drawable***的文件下,这就是对应的图片
参照其他应用的布局
要参照布局,那么就需要借助工具了,不能简单的使用上面获取图片的处理方式,可以使用apktool这个工具,操作步骤如下:
进入到apktool的目录下,打开控制台,输入如下的命令 apktool d 对应的apk全路径和文件名即可解压开,在apktool的文件中发现新多了一个文件夹,名字与apk的名字相同,这就成功了,可以查看布局文件了
参照其他应用的程序逻辑
同样需要借助工具,dex2jar和gui
操作步骤:
将apk的文件后缀名修改为zip
解压缩找到对应的dex文件
将dex文件转变为jar文件就可以了,使用dex2jar的命令dex2jar classpath.dex 然后文件自动转换,生成的文件位于dex2jar的目录下
将文件使用gui打开即可(这只是未加密的文件的处理方式,已经加密的,那么就需要我们学习学习smali语言了,才能分析文件)