APK打包和安装之间有着千丝万缕的联系。APK打包就是将程序中的各种文件处理,压缩的过程;应用安装就是对APK解压,并分析的过程。
一、APK中的文件结构
一个APK文件解压后的结构如下所示
UC浏览器APK解压后的目录
-
AndroidManifest.xml 程序全局配置文件(就像window中的注册表,保存应用的各种名称,权限,四大组件等信息)
-
classes.dex 适配Dalvik的字节码(安卓中的字节码和Java虚拟机中的运行的字节码结构有所不同)
-
resources.arsc 资源索引表(用于查找资源)
- res\ 存放资源文件(文件、图片、xml)
-
assets\ 存放配置文件
-
src\ 存放java源文件
-
libs\ 存放应用程序所依赖的库
二、APK的打包
谷歌提供的APK打包流程如下图所示
APK打包流程
打包过程分为以下几个步骤:
- AAPT(Android Asset Packaging Tool)将图片、xml等资源编译成二进制文件,为所有的xml生成唯一的ID号,并生成resources.arsc(资源索引)和R.java(资源和id号的映射)。
- 将所有aidl编译成Java
- 将所有java文件编译成class文件
- 将所有class文件(保存项目源码编译成的class、第三方lib)打包成dex文件(一个或多个)
- apkbuilder工具将所有的文件打包成一个APK
- jarsigner对APK进行签名
三、APK的安装
APK安装分为以下几个步骤
一、拷贝apk到指定目录
第三方apk会被拷贝到data/app/应用包名下面。系统APK会放到system/app/应用包名下面。硬件厂商的APK会被放到system/vendor/app下面
二、解压APK、拷贝文件、创建应用的数据目录
解压APK,将dex文件拷贝到/data/dalvik-chche目录下,在/data/data/应用包名下创建应用数据目录,用于存放数据库,xml文件,so库。
三、解析AndroidManifest.xml文件
PackageManagerService将APK的权限,应用包名,APK安装位置,版本,四大组件等重要信息保存在/data/system/packages.xml文件中。
四、在桌面显示icon
在桌面应用上显示icon,并提供跳转接口
网友评论