站在巨人的肩膀上学习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)执行命令启动后,软件会列出全部正在执行的程序  


    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,如需转载请自行联系原作者

相关文章
|
5天前
|
Android开发 开发者 Kotlin
探索安卓开发中的新特性
【9月更文挑战第14天】本文将引导你深入理解安卓开发领域的一些最新特性,并为你提供实用的代码示例。无论你是初学者还是经验丰富的开发者,这篇文章都会给你带来新的启示和灵感。让我们一起探索吧!
|
2天前
|
Java Linux Android开发
深入理解Android开发:从基础到高级
【9月更文挑战第17天】本文将深入探讨Android开发的各个方面,包括应用开发、操作系统等。我们将通过代码示例来展示如何创建一个简单的Android应用,并解释其背后的原理。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和启示。
|
9天前
|
IDE 开发工具 Android开发
安卓与iOS开发对比:平台选择对项目成功的影响
【9月更文挑战第10天】在移动应用开发的世界中,选择正确的平台是至关重要的。本文将深入探讨安卓和iOS这两大主要移动操作系统的开发环境,通过比较它们的市场份额、开发工具、编程语言和用户群体等方面,为开发者提供一个清晰的指南。我们将分析这两个平台的优势和劣势,并讨论如何根据项目需求和目标受众来做出最佳选择。无论你是初学者还是有经验的开发者,这篇文章都将帮助你更好地理解每个平台的特性,并指导你做出明智的决策。
|
5天前
|
XML 编解码 Android开发
安卓开发中的自定义视图控件
【9月更文挑战第14天】在安卓开发中,自定义视图控件是一种高级技巧,它可以让开发者根据项目需求创建出独特的用户界面元素。本文将通过一个简单示例,引导你了解如何在安卓项目中实现自定义视图控件,包括创建自定义控件类、处理绘制逻辑以及响应用户交互。无论你是初学者还是有经验的开发者,这篇文章都会为你提供有价值的见解和技巧。
13 3
|
7天前
|
API Android开发 iOS开发
安卓与iOS开发中的线程管理对比
【9月更文挑战第12天】在移动应用的世界中,安卓和iOS平台各自拥有庞大的用户群体。开发者们在这两个平台上构建应用时,线程管理是他们必须面对的关键挑战之一。本文将深入探讨两大平台在线程管理方面的异同,通过直观的代码示例,揭示它们各自的设计理念和实现方式,帮助读者更好地理解如何在安卓与iOS开发中高效地处理多线程任务。
|
9天前
|
开发框架 Android开发 iOS开发
探索安卓与iOS开发的差异:构建未来应用的指南
在移动应用开发的广阔天地中,安卓与iOS两大平台各占半壁江山。本文将深入浅出地对比这两大操作系统的开发环境、工具和用户体验设计,揭示它们在编程语言、开发工具以及市场定位上的根本差异。我们将从开发者的视角出发,逐步剖析如何根据项目需求和目标受众选择适合的平台,同时探讨跨平台开发框架的利与弊,为那些立志于打造下一个热门应用的开发者提供一份实用的指南。
24 5
|
9天前
|
开发工具 Android开发 iOS开发
安卓与iOS开发:平台选择的艺术与科学
在移动应用开发的广阔天地中,安卓与iOS两大平台如同东西方哲学的碰撞,既有共通之处又各具特色。本文将深入探讨这两个平台的设计理念、开发工具和市场定位,旨在为开发者提供一份简明扼要的指南,帮助他们在这场技术与商业的博弈中找到自己的道路。通过比较分析,我们将揭示每个平台的优势与局限,以及它们如何影响应用的性能、用户体验和市场接受度。无论你是初涉江湖的新手,还是经验丰富的老手,这篇文章都将为你的选择提供新的视角和思考。
24 5
|
10天前
|
安全 Android开发 开发者
探索安卓开发的未来:Kotlin的崛起与Flutter的挑战
在移动开发的广阔天地中,安卓平台始终占据着举足轻重的地位。随着技术的不断进步和开发者需求的多样化,Kotlin和Flutter成为了改变游戏规则的新玩家。本文将深入探讨Kotlin如何以其现代化的特性赢得开发者的青睐,以及Flutter凭借跨平台的能力如何挑战传统的安卓开发模式。通过实际案例分析,我们将揭示这两种技术如何塑造未来的安卓应用开发。
33 6
|
8天前
|
搜索推荐 Android开发 UED
安卓开发中的自定义视图:打造个性化用户界面
【9月更文挑战第11天】在安卓应用开发领域,自定义视图是实现独特用户体验的基石。本文将引导你通过一个简单的自定义视图示例,探索如何从零开始创建并应用自定义组件,以增强你的应用界面。我们将一起学习如何扩展View类,重写onDraw方法,处理触摸事件,并最终在我们的安卓项目中使用这个自定义视图。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供清晰的步骤和实用的技巧,帮助你提升用户界面设计的能力。
|
9天前
|
开发工具 Android开发 Swift
探索安卓与iOS开发的差异:从新手到专家的旅程
在数字时代的浪潮中,移动应用开发已成为连接世界的桥梁。本文将深入探讨安卓与iOS这两大主流平台的开发差异,带领读者从零基础出发,逐步了解各自的特点、开发环境、编程语言及市场策略。无论你是梦想成为移动应用开发者的初学者,还是希望扩展技能边界的资深开发者,这篇文章都将为你提供宝贵的见解和实用的建议。