我们知道,一開始最好的学习方法是模仿,尤其是模仿巨人。

那说到Android开发的模仿自然就是分析并研究主流程序的布局、实现方法。进而提升自己的技术。

第一招----逆向project

要分析“巨人”们的软件。自然免不了逆向project。即将APK程序转化为我们能够看的懂得源代码。这个google官方已经帮我们做好了工具,apktool就是一款非常好的逆向工具。

下载地址为:http://pan.baidu.com/s/1kTqRhaR

我们以分析微信为例来说明这个工具的使用:

你仅仅需运行例如以下命令,即完毕了反汇编逆向工作。完毕后工具会生成weixin文件夹。

apktool decode weixin.apk

在文件夹里,你就能够看到软件的各种资源文件,包含布局文件。

有了这些资源文件,自己做出和微信一模一样的界面就易如反掌了,当然程序的重点在代码逻辑,不在界面。

itleaks@ITLeaks:/tmp$ ls weixin/
AndroidManifest.xml  apktool.yml  assets  lib  res  smali
itleaks@ITLeaks $ ls weixin/res/ -a
.                     layout       values-id       values-th
..                    layout-hdpi  values-in       values-tr
anim                  layout-ldpi  values-it       values-v11
color                 layout-mdpi  values-iw       values-v14
drawable              layout-v11   values-ja       values-vi
drawable-480dpi       raw          values-ko       values-w360dp
drawable-640dpi       values       values-land     values-w480dp
drawable-en-hdpi      values-ar    values-large    values-w500dp
drawable-hdpi         values-de    values-ldpi     values-w600dp
drawable-land         values-en    values-mdpi     values-w720dp
drawable-land-hdpi    values-es    values-ms       values-xhdpi
drawable-mdpi         values-fr    values-pl       values-xlarge
drawable-xhdpi        values-hdpi  values-pt       values-zh-rCN
drawable-zh-rCN-hdpi  values-he    values-ru       values-zh-rTW
drawable-zh-rTW-hdpi  values-hi    values-sw600dp  xml

上面有一个smali文件夹,它就是源代码文件夹,而这样的源代码smali是一种中间语言,它既不是java语言,也不是java的汇编语言,而是apktool工具的能够识别的一种特殊语言。为了进一步转化为我们看得懂得java语言,能够使用dex2jar和jd-gui这两个工具。

jd-gui下载地址:http://pan.baidu.com/s/1i3n7rPr

dex2jar下载地址:http://pan.baidu.com/s/1B2lmY

详细命令例如以下:

mv weixin.apk weixin.zip
unzip -o weixin.zip
//解压后就得到了classes.dex文件
dex2jarRootPath/dex2jar.sh classes.dex
//然后就得到了classes_dex2jar.jar文件
jd-gui classes_dex2jar.jar

同一时候,用户能够改动smali文件,然后又一次用apktool生成 apk。在使用这个命令前必须下载另外一个工具aapt,apktool会用到这个工具。

大家能够在这里下载:http://pan.baidu.com/s/1i37kiVz

最后,打包的详细命令是:

itleaks@ITLeaks:/tmp$ apktool b Filer/ tmp.apk
I: Checking whether sources has changed...
I: Checking whether resources has changed...
I: Building apk file...
itleaks@ITLeaks:/tmp$

当然。有些程序是没法又一次打包回apk,比方微信,这是由于它在resources里加入了自己定义的一些变量,而这些变量在plugin文件里定义,apktool工具自然找不到。比方以下的Widget.AppCompat.Base

itleaks@ITLeaks:/tmp$ apktool b weixin/ tmp.apk
I: Checking whether sources has changed...
I: Checking whether resources has changed...
I: Building resources...
/tmp/weixin/res/values/styles.xml:59: error: Error retrieving parent for item: No resource found that matches the given name 'Widget.AppCompat.Base'.
/tmp/weixin/res/values/styles.xml:275: error: Error retrieving parent for item: No resource found that matches the given name 'Widget.AppCompat.Base'.
/tmp/weixin/res/values/styles.xml:467: error: Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCompat.Base'.

第二招----查看view布局

Android还提供了另外一个非常强大的工具hierarchyviewer,这个工具的原理我在屏幕自由截图文章中有大概描写叙述过,感兴趣的能够去看看那篇文章。这个工具在android-sdk/tools里能够找到。这个工具到底干什么用的?它是用来查看程序的UI的,详细使用步骤例如以下:

1)执行命令启动后,软件会列出全部正在执行的程序

2)选择你感兴趣的程序。双击就可以查看该程序的UI,该界面每一个方框代表一个view,并每一个方框下都显示了该view

的id,这样就能够依据id非常好的找出该view在layoutxx.xml中相应的view.

3)然后选择某个view,双击就可以看到该view的UI。

4)单击右边的layout还能够看到详细view的layout信息,比方高度。宽度。位置等信息。

有了这两个工具,大家应该就能比較方便的分析市面上随意程序的界面构成了。

附录:

以上的apktool, aapt,大家最好将这两个文件复制到运行路径。比方/usr/bin,这样apktool才干在运行中找到aapt这个文件。

还有。本文中的全部工具都是linux下的。假设想在window下运行。大家可以搜索并下载window版本号。

须要注意的是,hierarchyviewer工具是基于adb的,要想使用它,必须保证,adb devices可以显示到你要訪问的Android设备,一般出厂设备默认是没法使用的,须要root。

/********************************

* 本文来自博客  “爱踢门”

* 转载请标明出处:http://blog.csdn.net/itleaks

******************************************/

本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5322618.html,如需转载请自行联系原作者

站在巨人的肩膀上学习Android开发相关推荐

  1. Lottie 站在巨人的肩膀上实现 Android 酷炫动画效果

    说到动画效果,一般都会感到很高端,感觉很酷炫:而小菜技术有限,稍复杂的动画效果也需要很多时间处理,但是遇到时间紧任务重的情况该怎么办呢?那就尝试一下 Lottie 吧,酷炫的动画集成却相当简单,还支持 ...

  2. android 添加json动画,Lottie 站在巨人的肩膀上实现 Android 酷炫动画效果

    说到动画效果,一般都会感到很高端,感觉很酷炫:而小菜技术有限,稍复杂的动画效果也需要很多时间处理,但是遇到时间紧任务重的情况该怎么办呢?那就尝试一下 Lottie 是个啥? Lottie 咋集成?bu ...

  3. 《站在巨人的肩膀上学习Java》

    Java从诞生距今已经有28年了,在这段时间里,随着Java版本的不断迭代,Java新特性的不断出现,使得Java被使用的越来越广泛.在工程界Java语言一直是大家最喜欢的语言之一,Java一直排行在 ...

  4. 站在巨人的肩膀上学习ctf vm

    0x00 前言 本文提到的vm是ctf里的vm,最近vm还是很热门的,最近的虎符,de1ctf,再到网鼎杯都有vm的身影,但是vm的知识在网上挺散的(我只找到了绿盟那篇比较系统),vm的wp也相对比较 ...

  5. 【Visual C++】游戏开发笔记三十五 站在巨人的肩膀上:游戏引擎导论

    看到在留言中很多朋友提到不太清楚DirectX与游戏引擎的区别的问题,在这里浅墨就专门把自己对游戏引擎的一些理解写成一篇文章,作为我们<Visual C++游戏开发>专栏的游戏引擎导论,也 ...

  6. 游戏开发笔记三十五 站在巨人的肩膀上:游戏引擎导论

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8250057 作者:毛星云(浅墨 ...

  7. 站在巨人的肩膀上“思考”问题,重在思考而不是拿来主义

    米老师按:觉得值得讨论的小文!我还要认真地想一想 主题:围绕职责链设计模式-计算收费有效时间博客展开讨论 参与人: 讨论时间: 讨论内容 这次讨论主要分为以下几点: 一.职责链模式应用于机房收费系统计 ...

  8. 站在巨人的肩膀上看Servlet——原来如此(更适合初学者认识Servlet)

    前言: 有段时间没更新博客了,这段时间因为要准备考试,考完试后又忙了一阵别的事,一直没能静下心来写博客.大学考试真是越来越恶心了,各种心酸,那酸爽,够味.不过还好,马上就要大三了,听大三学长学姐说大三 ...

  9. 知识就是力量,让机器站在巨人的肩膀上

    作者:微软亚洲研究院 闫峻博士 知识是什么?抽象来说,是人类对世界的认知,对宏观及微观世界客观规律的总结.具体来说,大到牛顿定律.量子力学中的科学发现,小到自家孩子的生日.太太做饭常用的酱油颜色,都是 ...

  10. 站在巨人的肩膀上看世界,MySQL初步使用语法

    站在巨人的肩膀上看世界,MySQL初步使用  MySQL是一个常用的数据库,对于他的使用,我们需要尽量的了解它,但是掌握初步的语法,也可以勉强使用它,这都归功于它的研发者们.正是因为这些大佬,写好了软 ...

最新文章

  1. 《DSP using MATLAB》Problem 6.3
  2. 利用JDK工具进行系统性能监测
  3. VC++学习(15):多线程
  4. byte java byte_详解java中的byte类型
  5. sql 2000 安装问题
  6. state的简写方式
  7. MySQL基础day05_MySQL数据库的备份与恢复-1-MySQL 5.6
  8. 6425C-Lab8 使用组策略管理安全性(2)
  9. Linux 文件系统启动记录
  10. eclipse的下载及安装教程
  11. 一个正经的前端学习 开源 仓库(500)
  12. kafka集群搭建(三台服务器)
  13. 谷歌学术、github、Sci-Hub镜像网址总结
  14. “熊孩子”乱敲键盘攻破 Linux 桌面;苹果开源代码被发现包含兼容微信的代码;网传蚂蚁启用OKR替代KPI | EA周报...
  15. window 开发hadoop
  16. 338页网易Java面试真题解析火爆全网,面试真题解析
  17. 【Java】进制转换
  18. Office 2007重新输入序列号激活
  19. Cascade Classification
  20. 【转】一文读懂PCIe的进化史

热门文章

  1. 第十二章 演员评论家(Actor-Critic)-强化学习理论学习与代码实现(强化学习导论第二版)
  2. 【pytorch】(断点)继续上次训练
  3. 卷积运算和运算后特征图大小计算2
  4. python-excel 批量新建excel工作表
  5. GDAL和GeoPandas的安装
  6. 银行数据仓库体系实践_案例:农发行数据交换共享平台建设实践分享
  7. java循环隔行变色_c:foreach标签详解----(隔行换背景颜色的问题)
  8. 前缀、中缀、后缀表达式以及逆波兰计算器
  9. Error while executing: am start -n错误解决方案
  10. PG Vs MySQL ,到底谁更强?