前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【Android 安装包优化】APK 打包流程 ( 文件结构 | 打包流程 | 安装流程 | 安卓虚拟机 )

【Android 安装包优化】APK 打包流程 ( 文件结构 | 打包流程 | 安装流程 | 安卓虚拟机 )

作者头像
韩曙亮
发布于 2023-03-29 05:32:17
发布于 2023-03-29 05:32:17
1.4K0
举报

文章目录

一、APK 文件结构


Android 应用的安装包时 以 " .apk " 为后缀的 APK 文件 ;

APK 是 " Android Package " 的缩写 ;

将打包好的 APK 文件安装到 Android 手机中 , 就是可运行的应用程序 ;

APK 文件结构 :

① assets : 资源文件 , 该目录下的资源文件不经过 aapt 工具编译 ;

② lib : 存放 动态库 “.so” 文件 , NDK 中 C / C++ 调用的函数库 ;

③ META-INF : 该目录中存放 apk 的签名文件 ;

  • CERT.SF : 摘要加密 , 使用私钥 对 摘要明文 加密后的 密文信息 , 是加密文件 , 如果要解密该文件 , 必须使用与私钥配对的公钥进行解密 ;
  • CERT.RSA : 文件是签名证书文件 , 存放的是公钥和加密算法的描述 ;
  • MANIFEST.MF : 文件摘要 , 存放程序清单文件 , 包含了 APK 安装包 中所有文件的 摘要明文 ;
  • 剩余文件 : 都是可忽略的资源文件 ;

④ res : 资源文件 , 经过了 aapt 工具编译后的文件 ; 这个目录下的文件不再介绍 , 太熟悉了 ;

⑤ AndroidManifest.xml : 清单文件 , 声明了 Application , 组件 , 权限 , 元数据 等信息 ;

⑥ classes.dex : Dalvik 字节码文件 , Android 中的可执行文件 , 可以在 Android 系统中运行 ;

⑦ resources.arsc : 资源文件映射表 , 使用 aapt 编译 res 目录下的资源文件形成的文件 , 用于根据 id 查找资源路径 ;

二、APK 打包流程


APK 打包流程 :

① 使用 AAPT 工具打包资源文件 , 生成 R.java , resources.ap 文件 ;

② 使用 AIDL tool 工具 , 处理 AIDL 文件 , 生成对应的 Java 文件 ;

③ 使用 javac 工具编译 Java 源码为 class 字节码文件 ;

④ 使用 dx 工具将 class 字节码文件打包成 dex 字节码文件 , 这是 Dalvik 虚拟机字节码文件 ;

⑤ 使用 apkbuilder 工具生成未签名的 apk 文件 ;

⑥ 使用 jarsigner 工具对 apk 文件进行签名 , 生成签名后的文件 ;

⑦ 使用 zipalign 工具对签名后的 apk 文件进行对齐操作 ;

三、APK 安装流程


APK

4 种安装方式 :

① 系统程序安装 ;

② 使用应用市场安装 ;

③ 手机自带安装 ;

④ 使用 ADB 调试工具安装 ;

APK 安装流程 :

① 将 APK 安装包复制到 /data/app 目录下解压 , 扫描安装包 ;

② 将 dex 文件保存 /data/dalvik-cache 目录中 ;

③ 在 /data/data/包名 下创建对应 apk 包名的应用数据目录 ;

系统自带程序在 /system/app 目录下 , 获得 adb root 权限后才能删除 ;

应用卸载 , 就是将 /data/app/ , /data/dalvik-cache/ , /data/data/ 等目录下的相关文件删除 ;

四、安卓虚拟机


虚拟机是一个可以运行 class , odex , oat 可执行文件的运行环境 ;

常见的虚拟机有 Java 虚拟机 , Dalvik 虚拟机 , ART 虚拟机 ;

Java 虚拟机 : 运行的 class 字节码文件 , 运行程序时解码 class 文件中的内容 ; 基于栈架构 , 需要频繁在栈上读写数据 , 造成较多的指令分派 , 更多的内存访问次数 , 比较耗费 CPU 时间 ;

编译时 : Java 源码 , 使用 javac 编译器 , 编译成 class 字节码文件 ; 运行时 : 类加载器通过 Java 类库验证字节码 , 验证通过会后进入 Java 虚拟机 , 进入 Java 解释器 或 即时编译器 , 然后进入运行时系统 , 之后进入操作系统 , 然后调用硬件 ;

Dalvik 虚拟机 : 基于 JIT 机制 ( 即时编译技术 ) , Android

5.0 以下使用的虚拟机是 Dalvik 虚拟机 , 该虚拟机的可执行文件是 dex 文件 , 该文件比 class 字节码文件更小 ; JIT ( Just In Time ) 即时编译技术 , 对应 Dalvik 虚拟机 ; 基于寄存器架构 , 通过寄存器间接访问数据 , 该方式比基于栈架构速度更快 ;

ART 虚拟机 : Android

5.0 以上使用的虚拟机是 ART 虚拟机 ; AOT ( Ahhead Of Time ) 预编译技术 , 对应 ART 虚拟机 ;

Java 虚拟机 / Dalvik 虚拟机 / ART 虚拟机 都向上层提供了 3 个接口 , JNI_GetDefaultJavaVMInitArgs JNI_CreateJavaVM JNI_GetCreatedJavaVMS ;

虚拟机之间可实现无缝衔接 ;

Dalvik 虚拟机 与 ART 虚拟机区别 : 虚拟机中有个 persist.sys.dvlvik.vm.lib 字段 , 如果该字段存储的是 libdvm.so , 该虚拟机是 Dalvik 虚拟机 ; 如果该字段存储的是 ;ibart.so , 该虚拟机是 ART 虚拟机 ;

Dalvik 虚拟机 与 ART 虚拟机可执行文件 :

Dalvik 虚拟机加载 dex 文件加载时不是直接加载 dex 文件 , 加载执行的是 odex 文件 , odex 文件是通过 dexopt 工具对 dex 进行优化生成的 ;

ART 虚拟机加载 dex 文件时加载的是 oat 文件 , oat 文件时通过 dex2oat 工具对 dex 文件进行优化生成的 ;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-06-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
移动安全(二)|APK打包流程及签名安全机制初探
切入正题,胡小毛在学习Android逆向的过程中又有所总结,先来看看apk文件结构:
用户1631416
2020/03/12
1.1K0
android studio 输出apk过程,apk中的文件格式(bsh文件,dex文件),JVM、DVM、ART的区别,IOS与安卓的区别,ART和Dalvik
android studio 输出apk过程:https://www.jianshu.com/p/2babb51d2556
zhangjiqun
2024/12/16
1270
android studio 输出apk过程,apk中的文件格式(bsh文件,dex文件),JVM、DVM、ART的区别,IOS与安卓的区别,ART和Dalvik
从JVM到Dalivk再到ART(class,dex,odex,vdex,ELF)
现在市面上的 Android 手机大部分都是运行的是ART虚拟机了。还记得自己一部 Android手机(HuaweiG520),Android4.1 系统。那时候还是没有 ART虚拟机 的。作为Android开发者,我们应该对 Android 的发展历史有些了解为什么 Android 会经历这么多的变化。Android 是先有 JVM 然后是 Dalvik ,接着是现在的 ART虚拟机 。那么他们之间有什么关系呢?
静默加载
2020/05/29
2.2K0
dex优化对Arouter查找路径的影响
1、通过aapt打包资源文件res,对应生成R.java、resources.arsc和res文件(二进制&非二进制保持原来的代码)
2020labs小助手
2021/06/04
9210
Dalvik虚拟机原理及Xposed hook原理
这块知识本身是挺多的,网上有对应的源码分析,本文尽量从不分析代码的角度来把原理阐述清楚。
用户2930595
2018/08/23
1.7K0
Android ClassLoader详解
我们知道不管是插件化还是组件化,都是基于系统的ClassLoader来设计的。只不过Android平台上虚拟机运行的是Dex字节码,一种对class文件优化的产物,传统Class文件是一个Java源码
xiangzhihong
2018/02/05
1.4K0
Android ClassLoader详解
Dalvik,ART与ODEX简析
如果你有这样的问题: 1.Dalvik和ART的区别 2.DEX在Dalvik转化为ODEX和ART中转化为ODEX的过程有上面区别 3.multidex在dalvik上起作用,ART上使用的也是multidex么(如果不是的话在application中写入multidex.install会对apk启动造成影响么)
Anymarvel
2018/10/22
1.6K0
Dalvik,ART与ODEX简析
Android虚拟机的JIT编译器
最近参加了华为方舟的Workshop,从编译到Runtime都有了一些体会,并且对于虚拟机的运行也有了一些了解。
None_Ling
2019/06/14
1.5K0
Android虚拟机的JIT编译器
Android APK编译流程
apk 是Android Package的简写, 在平时的开发过程中,通过点击Run app 按钮 或者 在命令行中输入
艳龙
2021/12/16
2.1K0
Android APK编译流程
【Java 虚拟机原理】动态字节码技术 | Dalvik & ART 虚拟机 | Android 字节码打包过程
使用 Javassist 框架 , 可以自动查找要修改的内容所在字节码文件中的位置 , 不需要开发者自己手动分析 Java 字节码文件 ;
韩曙亮
2023/03/29
6650
【Java 虚拟机原理】动态字节码技术 | Dalvik & ART 虚拟机 | Android 字节码打包过程
Android逆向 | 基础知识篇 - 01
system分区常用目录:app、lib、xbin、bin、media、framework
咸鱼学Python
2019/08/06
1.1K0
Android各版本虚拟机的Dexopt区别
从Android 2.1版本到现在的Android 11 , 中间虚拟机变化过三次 :
None_Ling
2020/12/02
3.4K0
Android各版本虚拟机的Dexopt区别
Apk 反编译前期了解
LZ-Says:学习之路,似乎枯燥乏味,唯有耐着性子,独自前行,当光明笼罩的那一刻,一切,也仿佛明亮了许多。
贺biubiu
2019/06/10
1.1K0
从构建工具看 Android APK 编译打包流程
在Android Studio中,我们几乎每天都在用run,generate APK等功能。
码上积木
2021/04/16
4.1K0
安卓逆向系列篇:基本概念&环境配置
DVM指的是Dalvik虚拟机,运行的是.dex文件。Dalvik虚拟机在Android4.4及以前使用的都是Dalivk虚拟机。APK在打包过程中先通过javac编译出.class文件,再使用dx工具处理成.dex文件,此时Dalvik虚拟机才可以解析执行。另外单个dex文件的最大为65535KB,超出需要使用两个及以上的dex文件,这导致在启动时会有个合包的过程,使得apk启动慢。
亿人安全
2022/06/30
9740
安卓逆向系列篇:基本概念&环境配置
「万物生长」一个APK从诞生到活跃在Android手机上
上述之前在其他文章里面也常见的图,而这张图讲述一个APK的诞生流程,可以分为以下的几个流程
ClericYi
2020/10/09
1K0
「万物生长」一个APK从诞生到活跃在Android手机上
Android插件化基础3----Android的编译打包流程详解
.apk文件其实就是一个压缩包,把文件的后缀改成.zip,用压缩软件解压搜就可的下图(我是mac)
隔壁老李头
2018/08/30
2.2K0
Android插件化基础3----Android的编译打包流程详解
深入探索 APKTool:Android 应用的反编译与重打包工具
apktool 是一个非常强大的工具,用于反编译和重新打包 Android 应用程序(APK 文件)。这个工具主要用于应用程序的逆向工程,调试,以及修改已经编译的 APK 文件。本文将详细解释 apktool 的工作原理和使用过程。
陆业聪
2024/10/18
1.1K0
深入探索 APKTool:Android 应用的反编译与重打包工具
Android插件化基础1-----加载SD上APK
大致的意思是: ClassLoader 是一个负责加载classes的对象,ClassLoader类是一个抽象类,需要给出类的二进制名称,ClassLoader尝试定位或者产生一个class数据,一个典型的策略是把二进制名字转换成文件名然后到文件系统中找到该文件 以下是ClassLoader常用到的几个方法及其重载方法:
隔壁老李头
2018/08/30
1.1K0
Android插件化基础1-----加载SD上APK
❤️Android 应用的诞生 ❤️ 只需两幅图
在分析安装过程之前,需要先了解一下 Android 项目是如何经过编译->打包生成最终的 .apk 格式的安装包。谷歌有一张官方图片来描述 apk 的打包流程,如下图所示。
Android 帅次
2021/10/20
1K0
❤️Android  应用的诞生 ❤️ 只需两幅图
推荐阅读
相关推荐
移动安全(二)|APK打包流程及签名安全机制初探
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文