Apk 安装过程

1、apk结构

我们知道,Apk的本质其实是一个压缩包,我们可以手动把一个Apk文件的后缀名.apk改为.zip,然后就会将apk变为一个压缩包的形式。解压缩之后可以看到apk中的内容,大概是如下图所示的几个部分。

(以上操作也可以简化,直接在Android Studio中打开.apk文件,就可以看到apk内部文件结构了)


META-INF文件夹中存储的是apk签名相关的一些文件。

res文件夹中存储的是项目中用到的一些资源文件,包括color、layout、drawable等等。

classes.dex 就是android系统中的可执行文件,其本质是多个.class文件的集合。

resources.arsc 保存的是资源文件的索引。用AS打开可以看见其内部结构如下图所示。


2、几个重要文件目录

apk的安装主要分为两个部分,拷贝和解析。首先要了解一下android设备几个重要的文件夹的作用。

system/app 系统自带app,访问需要有root权限

vender/app设备厂商提供的app

data/app用户自己安装的app

data/data/packageName用于存储应用数据

data/dalvik-cache将apk中的dex文件放在这个目录中

system/priv-app 存放比system/app中权限更高一级的应用,如Launcher,系统设置等

2.1、system/app中保存系统自带应用,需要有root权限才能访问。所以系统app在root之前是无法删除和修改的。当需要升级系统应用的时候,会将更新版本安装在data/app目录中,当启动app的时候,系统会将应用指向data/app目录中。用户当然可以删除更新版本,但是删除之后,系统会再次将system/app中的版本提供给你,即删除新版,还你旧版。

2.2、当然在root之后,我们是可以对system/app目录进行操作。但是更新时仍将更新版本安装在data/app中。所以如果用户想替换system/app中的版本,就只能手动将新版apk push到system/app中,待系统重启之后,会安装push版本。

3、apk安装过程

3.1、创建应用数据目录data/data/packageName,用于存储譬如数据库、share_preferences、so库等;

3.2、解压缩apk,提取dex可执行文件,存放于data/dalvik-cache目录中,系统会对dex文件做一些优化,生成odex文件,将其存储。

When you install an application on Android, it performs some modifications and optimizations on that application's dex file (the file that contains all the dalvik bytecode for the application). It then caches the resulting odex (optimized dex) file in the /data/dalvik-cache directory, so that it doesn't have to perform the optimization process every time it loads an application.

3.3、检查apk的签名文件;

3.4、使用PMS解析AndroidMenifest.xml文件,包括:四大组件的信息,包括Receiver,默认启动的Activity等;

3.5、根据sharedUserId,为应用分配UID,用户id是唯一的,因为android是一个linux系统。同时会为应用分配用户组id,用户组id指的是各种权限,每个权限都在一个用户组中。分配了哪些用户组,就拥有了哪些权限。

3.6、在Luancher上添加应用图标;

3.7、将app的包名、版本号、安装路径等保存在data/system/packages.xml文件中,以备下次安装时再次使用;

安卓系统在每次重启时,都会将所有app都重新安装一遍。1、首先读取上次安装时保存的xml文件;2、扫描安装保存在特定目录下的apk,包括system/app、vender/app、data/app等;3、为每个app分配UID;4、再次将安装信息保存在本地xml中,便于下次访问。

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