APK 文件分析

概述

我们通过 Android studio APK Analyze 可以展开一个APK文件


image
  • META-INF
  • res
    • anim
    • color
    • drawable
    • drawable-hdpi
    • drawable-land
    • drawable-land-hdpi
    • drawable-mdpi
    • drawable-port
    • drawable-port-hdpi
    • layout
    • layout-land
    • layout-port
    • xml
  • AndroidManifest.xml
  • classes.dex
  • resources.arsc

META-INF

META-INF目录下存放的是签名信息,用来保证apk包的完整性和系统的安全。里面包含了三个文件,MANIFEST.MF、CERT.SF、CERT.RSA。

  • MANIFEST.MF

apk中的这个MANIFEST.MF,列出了apk的所有文件,以及这些文件内容所对应的base64-encoded SHA1 哈希值,

Name: classes.dex
SHA1-Digest: l8Lc+gtdLvtxJ1K+kscUmWQGQ1E=

上述表示classes.dex这个文件的SHA1的哈希值为l8Lc+gtdLvtxJ1K+kscUmWQGQ1E=

  • CERT.SF

CERT.SF和MANIFEST.MF很相似,但是它描述的不是文件内容的hash值,而是列出了MANIFEST.MF这个文件中每条信息的hash值,举例会明白些:

Name: classes.dex
SHA1-Digest: ubmMiUS24rU/6K5JloMVG4vHKIU=

上面这条hash值ubmMiUS24rU/6K5JloMVG4vHKIU=对应的是MANIFEST.MF中下面这几行字符串的hash值

Name: classes.dex
SHA1-Digest: l8Lc+gtdLvtxJ1K+kscUmWQGQ1E=

注:计算SHA1-Digest-Manifest时,输入的字符串是三行,还要包括一行空白行,即’\r\n’。!

  • CERT.RSA

包含了公钥和私钥签名后的一些信息
它的基本格式是这样的:


image

res目录

res目录存放资源文件

目录 资源类型
animator/ 用于定义属性动画的 XML 文件。
anim/ 定义渐变动画的 XML 文件。(属性动画也可以保存在此目录中,但是为了区分这两种类型,属性动画首选 animator/ 目录。)
color/ 用于定义颜色状态列表的 XML 文件。请参阅颜色状态列表资源
drawable/ 位图文件(.png.9.png.jpg.gif)或编译为以下可绘制对象资源子类型的 XML 文件:位图文件九宫格(可调整大小的位图)状态列表形状动画可绘制对象其他可绘制对象请参阅 可绘制对象资源
mipmap/ 适用于不同启动器图标密度的可绘制对象文件。如需了解有关使用 mipmap/ 文件夹管理启动器图标的详细信息,请参阅管理项目概览
layout/ 用于定义用户界面布局的 XML 文件。 请参阅布局资源
menu/ 用于定义应用菜单(如选项菜单、上下文菜单或子菜单)的 XML 文件。请参阅菜单资源
raw/ 要以原始形式保存的任意文件。要使用原始 InputStream 打开这些资源,请使用资源 ID(即 R.raw.*filename*)调用 Resources.openRawResource()。但是,如需访问原始文件名和文件层次结构,则可以考虑将某些资源保存在 assets/ 目录下(而不是 res/raw/)。assets/ 中的文件没有资源 ID,因此您只能使用 AssetManager 读取这些文件。
values/ 包含字符串、整型数和颜色等简单值的 XML 文件。其他 res/ 子目录中的 XML 资源文件是根据 XML 文件名定义单个资源,而 values/ 目录中的文件可描述多个资源。对于此目录中的文件,<resources> 元素的每个子元素均定义一个资源。例如,<string> 元素创建 R.string 资源,<color> 元素创建 R.color 资源。由于每个资源均用其自己的 XML 元素定义,因此您可以根据自己的需要命名文件,并将不同的资源类型放在一个文件中。但是,为了清晰起见,您可能需要将独特的资源类型放在不同的文件中。 例如,对于可在此目录中创建的资源,下面给出了相应的文件名约定:arrays.xml,用于资源数组(类型化数组)。colors.xml:颜色值。dimens.xml:尺寸值。strings.xml:字符串值。styles.xml:样式。请参阅字符串资源样式资源更多资源类型
xml/ 可以在运行时通过调用 Resources.getXML() 读取的任意 XML 文件。各种 XML 配置文件(如可搜索配置)都必须保存在此处。

resources.arsc

编译后的二进制资源文件,主要作用是App的资源索引表,可以从二进制的文件中查找到资源的相关信息,或者根据资源的id可以定位到二进制文件中的位置

classes.dex文件

简单来说就是android系统的可执行文件,类似于window系统的xx.exe,它包含应用程序的全部操作指令以及运行时数据

题外:ART 和 Dalvik

我们知道Java程序都是通过Java虚拟机执行的,Android应用是采用Java开发的,基于移动设备的特点,如内存以及电量等诸多方面跟一般的 PC 设备都有本质的区别,所以需要开发更符合移动设备的用于执行 Java 代码的虚拟机,也就是Dalvik和 ART。
Dalvik和 ART 并不是完全按照JVM的规范开发的,一般JVM虚拟机运行的是 .class 文件,而 Dalvik和 ART 运行的是DEX文件。

Java 虚拟机执行 .class 格式的字节码。每一个 Java 文件对应一个 .class 的字节码文件,JVM 在运行时为每一个执行到的类装载字节码。而 Android 设备上为了提高执行效率,在编译 Android 项目时,Android 通过 SDK 提供的工具 dex.jar 会把所有的 .class 文件最终打包成一个或者多个 .dex 文件

ART 和 Dalvik 区别

Dalvik 是 ART 的前身 ,从 Android L 开始,Android 开始启用了新设计的虚拟机 ART 。
ART 比起 Dalvik 有以下优势:

  • 预先 (AOT) 编译

ART 引入了预先编译机制,可提高应用的性能。在安装时,ART 使用设备自带的 dex2oat 工具来编译应用,并为目标设备生成经过编译的应用可执行文件

  • 垃圾回收方面的优化

我们知道执行GC操作的时候,任何线程的任何操作都会需要暂停,等待GC操作完成之后,其他操作才能够继续运行,所以GC在 Dalvik 时代也是经常被人诟病的,它会导致界面卡顿。而ART 在GC导致显示不稳定、界面响应速度缓慢以及其他问题都做了优化

参考

android中签名原理和安全性分析之meta-inf文件讲解
https://source.android.com/devices/tech/dalvik

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容