站在巨人的肩膀上学习Android开发
我们知道,一開始最好的学习方法是模仿,尤其是模仿巨人。
那说到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)执行命令启动后,软件会列出全部正在执行的程序
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSVRsZWFrcw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="600" height="400" alt="">
2)选择你感兴趣的程序。双击就可以查看该程序的UI,该界面每一个方框代表一个view,并每一个方框下都显示了该view
的id,这样就能够依据id非常好的找出该view在layoutxx.xml中相应的view.
3)然后选择某个view,双击就可以看到该view的UI。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSVRsZWFrcw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="640" height="450" alt="">
4)单击右边的layout还能够看到详细view的layout信息,比方高度。宽度。位置等信息。
有了这两个工具,大家应该就能比較方便的分析市面上随意程序的界面构成了。
附录:
以上的apktool, aapt,大家最好将这两个文件复制到运行路径。比方/usr/bin,这样apktool才干在运行中找到aapt这个文件。
还有。本文中的全部工具都是linux下的。假设想在window下运行。大家可以搜索并下载window版本号。
须要注意的是,hierarchyviewer工具是基于adb的,要想使用它,必须保证,adb devices可以显示到你要訪问的Android设备,一般出厂设备默认是没法使用的,须要root。
/********************************
* 本文来自博客 “爱踢门”
* 转载请标明出处:http://blog.csdn.net/itleaks
******************************************/
站在巨人的肩膀上学习Android开发的更多相关文章
- 站在巨人的肩膀上看Servlet——原来如此(更适合初学者认识Servlet)
前言: 有段时间没更新博客了,这段时间因为要准备考试,考完试后又忙了一阵别的事,一直没能静下心来写博客.大学考试真是越来越恶心了,各种心酸,那酸爽,够味.不过还好,马上就要大三了,听大三学长学姐说大三 ...
- react-native之站在巨人的肩膀上
react-native之站在巨人的肩膀上 前方高能,大量图片,不过你一定会很爽.如果爽到了,请告诉我
- 站在巨人的肩膀上,C++开源库大全
程序员要站在巨人的肩膀上,C++拥有丰富的开源库,这里包括:标准库.Web应用框架.人工智能.数据库.图片处理.机器学习.日志.代码分析等. 标准库 C++ Standard Library:是一系列 ...
- 站在巨人的肩膀上---重新自定义 android- ExpandableListView 收缩类,实现列表的可收缩扩展
距离上次更新博客,时隔略长,诸事繁琐,赶在去广州答辩之前,分享下安卓 android 中的一个 列表收缩 类---ExpandableListView 先上效果图: 如果想直接看实现此页面的代码请下滑 ...
- 站在巨人的肩膀上才能看得更加远[Amo]
本来只是路过,写详细一点. 我看楼主浮躁得不得了.现在什么都不要做了,先去看几遍<不要做浮躁的嵌入式工程师>这篇文章,想清楚了,再动手吧. 我做了个实例,不用ST的库来点LED,解答你的问 ...
- 对EasyDarwin开源项目后续发展的思考:站在巨人的肩膀上再跳上另一个更高的肩膀
2017 EasyDarwin现状 自从2012年EasyDarwin项目创立开始,经过了快5年了,时光飞逝,如今EasyDarwin已经发展成为了不仅仅是一个单纯的开源流媒体服务器项目了,已经是各种 ...
- pdf.js的使用(1) 站在巨人的肩膀上纯干货分享,没有华丽的词藻
以下是我在实际项目开发中的过程分享 前端是:vue+jsp 1.首先下载pdf.js(怎么下可以去百度),实在不会就私我,我发给你 1.1展示一哈我下载下来的pdf.js的目录结构 1.2接下来可 ...
- java的设计模式的一些链接,站在巨人的肩膀上,才能看的更远。(均来源与网上的各个大牛的博客中)
创建型抽象工厂模式 http://www.cnblogs.com/java-my-life/archive/2012/03/28/2418836.html工厂方法 http://www.cnblogs ...
- Android系统研究资料收集---站在前人的肩膀上
Android系统研究资料收集---站在前人的肩膀上 针对Android系统研究任务,收集高价值资料在本页更新 AuthBlog:秋城https://www.cnblogs.com/houser032 ...
随机推荐
- 丢沙包游戏(或杀人游戏)的C语言实现
丢沙包游戏(或杀人游戏)用C语言实现: 游戏简述: 杀人游戏(或者丢沙包游戏),设定一些人(人数为:num)一起玩游戏,从某个指定的人(设定为:start)开始轮流扔沙包,扔沙包人的下一个人为1,每隔 ...
- “\n”与“\r”的区别
ASCII中“\n”代表着换行,“\r”代表着将光标移动到当前显示行的最左边.
- python中self.__class__
1. python中的self python中的self就相当于C++中的this指针也就是指向对象本身的指针self.name = name 就是当前对象的成员变量name赋值为name. 2.py ...
- js template
http://garann.github.io/template-chooser/ http://www.gbin1.com/technology/javascript/20120917-javasc ...
- 玩转createjs
标题党"玩转", 真的是在玩怎么转... 参考一篇很经典的博文:createjs入门 做移动版(750x1334)的时候出来不居中啊, 不是掉在下面就是滑到右面, canvas里面 ...
- Google面试题之100层仍两个棋子
一道Google面试题,题目如下:"有一个100层高的大厦,你手中有两个相同的玻璃围棋子.从这个大厦的某一层扔下围棋子就会碎,用你手中的这两个玻璃围棋子,找出一个最优的策略,来得知那个临界层 ...
- 一周一话题之四(JavaScript、Dom、jQuery全面复习总结<js篇>)
-->目录导航 一. JavaScript 1. js介绍 2. js语法 3. js进阶 4. js高级 5. 事例代码下载 一. JavaScript 做BS系统,JavaScript的使用 ...
- ANDROID_MARS学习笔记_S02_015_Gson解析json串为对象集合
package com.example.s02_e12_json3; import java.lang.reflect.Type; import java.util.Iterator; import ...
- Aptana Studio 安装
Aptana Studio 是一个集成式的Web应用程序开发环境,它不仅可以作为独立的程序运行,而且还可以作为Eclipse插件使用. AptanaStudio是一个基于Eclipse的集成式Web开 ...
- php Laravel 框架 介绍及安装
Laravel是一套简洁.优雅的PHP Web开发框架(PHP Web Framework).它可以让你从面条一样杂乱的代码中解脱出来:它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁.富于 ...