最近本人了解了一些关于Android APK安装包的知识,在此写下一篇博客进行总结。

APK总览

APK是AndroidPackage的缩写,即Android安装包(apk)。APK文件其实是zip格式,但后缀名被修改为apk,我们可以通过更改后缀名的方式来解压缩apk文件,解压后的内容如下图所示:

APK内容

apk文件解压后包含以下内容:
(1)res目录:用于存放Android资源文件的目录,其中的文件均经过编译,有多个子目录用于区分具体的资源文件类型:
  • anim:补间动画和逐帧动画文件
  • animator:属性动画文件
  • color:颜色文件
  • drawable:图片文件
  • layout:布局文件
  • menu:菜单文件
  • mipmap:理论上仅用于存放应用icon图标,用于主屏幕图片展示,其余图片文件应存放在drawable中
  • raw:原生视频、音频资源
  • transition:转场动画效果
  • xml:原生xml文件
值得注意的是,每个子目录都可以拥有标识相应分辨率与机型大小作为后缀,如“xxhdpi”,的子目录。
(2)assets目录:用于存放需要打包到APK中的静态文件,文件没有进行编译,访问时需要使用AssetManager类
(3)META-INF目录:即Metadata infomation元数据(又称中介数据、中继数据,用于描述数据的数据)信息目录,该目录下主要包含以下三个文件:
  • MANIFEST.MF:摘要文件,列出了apk的所有文件,以及这些文件内容所对应的base64-encoded SHA1 哈希值,用于验证apk文件的完整性,判断apk是否被篡改
  • CERT.SF:摘要签名文件,它列出了MANIFEST.MF这个文件中每条信息的hash值,用于验证摘要文件是否被篡改
  • CERT.RSA:该文件保存了解密用的公钥,以及加密算法等信息
(4)AndroidManifest.xml:Android的应用配置文件,描述了应用的总体信息,需要使用的用户权限以及组件等等,已被编译
(5)classes.dex:能用于dalvik执行的字节码,由多个.class的Java字节码文件组合而成
(6)resources.arsc:资源配置文件,用于记录资源文件与资源id之间的映射关系,res/values中的信息大部分被编译在此处
(7)lib目录:Android依赖的Native库的目录,其中会根据不同的cpu架构分为多个子目录

APK编译过程

APK的大致编译过程如下图所示:
  1. 编译器将源代码转换成 DEX(Dalvik Executable) 文件(其中包括运行在 Android 设备上的字节码),将所有其他内容通过aapt(Android Asset Packaging Tool) 转换成已编译资源,编译成二进制文件
  2. APK 打包器将 DEX 文件和已编译资源合并成单个 APK
  3. APK 打包器使用调试或发布密钥库签署您的 APK
  4. 在生成最终 APK 之前,打包器会使用 zipalign 工具对应用进行优化,减少其在设备上运行时的内存占用
官方链接:https://developer.android.google.cn/studio/build/index.html

APK安装过程

Android的应用apk安装涉及如下几个目录:
  • /data/app:存放用户安装的apk目录,安装时会把apk复制到这里
  • /data/data:应用安装完成后,会在该目录下生成与apk包名(packagename)一样的文件夹,用于存放应用数据
  • /data/dalvik-cache:存放apk的odex文件,便于应用启动时直接执行
具体的安装过程如下:
首先,系统会把apk复制到/data/app下,然后通过META-INF下的文件校验apk的签名是否正确,检查apk的结构是否正常,进而解压并校验dex文件。如果dex文件没有被破坏,则会把dex文件优化为odex文件,使得程序的启动时间加快,同时,在/data/data目录下建立与apk包名相同的文件夹。如果apk中有Native库,lib目录的话,系统会判断so库的名字是否正确,并根据系统cpu架构解压对应的so库到/data/data/packagename/lib下。
附,odex的内容如下所示:
odex文件在原来的dex文件头添加了一些数据,在文件尾部添加了程序运行时需要的依赖库和辅助数据,使得程序运行速度加快。

Android APK 安装包相关推荐

  1. 如何生成最终Android APK安装包

    设置android 环境变量 如图所示 打开Cmd输入以下指令 1:cd C:\Program Files\Java\jdk1.7.0_13\bin 2:keytool -genkey -alias ...

  2. 更改apk安装包对android系统等级要求

    此篇文章解决的为问题: █问题1.系统等级与apk等级不匹配. █问题2.更改api等级后的签名问题. ================================= 1.工具准备: 解压缩too ...

  3. Android App 导出APK安装包以及制作App图标讲解及实战(图文解释 简单易懂)

    操作有问题请点赞关注收藏后评论区留言~~~ 一.导出APK安装包 之前在运行App的时候,都是先由数据线连接手机和电脑,再通过Android Studio的Run菜单把App安装到手机上,这种方式只能 ...

  4. android apk自动安装包下载,apk安装包管理app下载-apk安装包文件管理 安卓版v13-PC6安卓网...

    apk安装包文件管理app是一款实用系统应用,apk安装包文件管理app是个小巧好用的手机内安装包管理工具.apk安装包文件管理app让你可快捷的管理手机里有意或无意下载的各种安装包. 软件介绍 ap ...

  5. android 批量安装apk,如何一键批量安装APP应用apk安装包?

    在安卓手机应用市场中,有的用户可能会遇到这样的问题,当我们下载了一堆安卓apk安装包,可是还需要我们一个个的点开去安装,这样非常麻烦,还浪费了用户不少时间.那有用户要问了,如何才能实现一键批量安装ap ...

  6. Sencha学习笔记2:打包您的第一个Sencha安卓应用apk安装包

    通过上一篇翻译的官方文章的介绍我们对sencha有了初步的印象,同时我们也通过该向导生成了第一个示例应用代码框架,那么下一步可能很多人都觉得应该根据该向导所提示的去看一下一个应用是如何建立起来的详细信 ...

  7. 谷歌安卓以AAB替换APK安装包

    6月2日正式发布的华为鸿蒙系统2.0完全兼容安卓应用,6月底微软又刚宣布Windows 11将会支持安装原生安卓应用. 近日传来另一个重大消息,谷歌周三宣布,谷歌应用商店Play Store的APP格 ...

  8. 超详细!apk安装包快速反编译,多种反编译及失败的解决方案(包含classes.dex的反编译,新增加快速反编译)

    如要转载,请贴出原地址:https://blog.csdn.net/Nobody_else_/article/details/83996441 众所周知,我们开发所用的手机App安装包都是apk文件, ...

  9. Android App安装包瘦身计划

    Android App安装包瘦身计划 Android App安装包体积优化: 理由, 指标和可以采用的方法. 本文内容归纳如下图: 为什么要安装包瘦身 安装包需要瘦身吗? 不需要吗? 安装包要瘦身的主 ...

最新文章

  1. 安装VMware vSphere 5.0(使用自带SQL2008Express)
  2. delphi 调用php接口_新浪图床 API 接口调用与请求方法详细教程
  3. FTP服务的简介和配置详解
  4. 我的作品-图书馆信息管理系统
  5. CoreData整理(二)——多线程方案
  6. 彩色烟雾一直是许多摄影师和摄影爱好者的首选武器
  7. MyCat分布式数据库集群架构工作笔记0005---Mycat的安装
  8. MySQL出错信息查询表
  9. 简单易用的安装文件制作工具NSIS的使用demo示例
  10. 基于PHP的汽车租赁网站,基于SSM汽车租赁管理系统
  11. Could not resolve project
  12. python创建一个列表、依次存放每个月对应的天数_python计算天数
  13. Infomages: Embedding Data into Thematic Images
  14. oracle追加imp,imp倒入的数据是追加,而不是替换,需要什么参数?
  15. [KDD 2022]ROLAND Graph Learning Framework for Dynamic Graphs
  16. golang学习之negroni对于第三方中间件的使用分析
  17. opencv-python使用cv2.resize()函数批量放大图片
  18. 计算机如何共享手机网络,怎么把电脑网络共享给手机
  19. Spring的那些事情(二)
  20. Scrapy框架 -- crawlSpider爬虫

热门文章

  1. 19-typedef
  2. 多图详解:如何不停服分库分表
  3. 对于IC封装,你了解多少?
  4. 无领导小组讨论面试真题解析(十)——你会怎么办?
  5. illustrator下载_在Illustrator中为图章形状进行强大的复制
  6. Qlik Sense中处理SQL语句的流程
  7. SolidWorks二次开发的研究
  8. 极客时间专栏:透视HTTP
  9. 计算Math.LOG10
  10. MongoDB入门(1)- MongoDB简介