咱们经过 Android studio APK Analyze 能够展开一个APK文件 html
META-INF目录下存放的是签名信息,用来保证apk包的完整性和系统的安全。里面包含了三个文件,MANIFEST.MF、CERT.SF、CERT.RSA。java
apk中的这个MANIFEST.MF,列出了apk的全部文件,以及这些文件内容所对应的base64-encoded SHA1 哈希值,android
Name: classes.dex
SHA1-Digest: l8Lc+gtdLvtxJ1K+kscUmWQGQ1E=
复制代码
上述表示classes.dex这个文件的SHA1的哈希值为l8Lc+gtdLvtxJ1K+kscUmWQGQ1E=数组
CERT.SF和MANIFEST.MF很类似,可是它描述的不是文件内容的hash值,而是列出了MANIFEST.MF这个文件中每条信息的hash值,举例会明白些:安全
Name: classes.dex
SHA1-Digest: ubmMiUS24rU/6K5JloMVG4vHKIU=
复制代码
上面这条hash值ubmMiUS24rU/6K5JloMVG4vHKIU=
对应的是MANIFEST.MF中下面这几行字符串的hash值ide
Name: classes.dex
SHA1-Digest: l8Lc+gtdLvtxJ1K+kscUmWQGQ1E=
复制代码
注:计算SHA1-Digest-Manifest时,输入的字符串是三行,还要包括一行空白行,即’\r\n’。!工具
包含了公钥和私钥签名后的一些信息 它的基本格式是这样的: 布局
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 配置文件(如可搜索配置)都必须保存在此处。 |
编译后的二进制资源文件,主要做用是App的资源索引表,能够从二进制的文件中查找到资源的相关信息,或者根据资源的id能够定位到二进制文件中的位置优化
简单来讲就是android系统的可执行文件,相似于window系统的xx.exe,它包含应用程序的所有操做指令以及运行时数据
咱们知道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 文件
Dalvik 是 ART 的前身 ,从 Android L 开始,Android 开始启用了新设计的虚拟机 ART 。 ART 比起 Dalvik 有如下优点:
ART 引入了预先编译机制,可提升应用的性能。在安装时,ART 使用设备自带的 dex2oat
工具来编译应用,并为目标设备生成通过编译的应用可执行文件
咱们知道执行GC操做的时候,任何线程的任何操做都会须要暂停,等待GC操做完成以后,其余操做才可以继续运行,因此GC在 Dalvik 时代也是常常被人诟病的,它会致使界面卡顿。而ART 在GC致使显示不稳定、界面响应速度缓慢以及其余问题都作了优化
android中签名原理和安全性分析之meta-inf文件讲解 source.android.com/devices/tec…