android系统中存在一个特殊的区域,在开机的时候,加载这块区域的信息,通过系统扫描这块区域,把对应的内容加载都内存中去,每个安装一个新的应用,就会重新更新此区域,这样就能保持最新的状态,这就是为什么在手机桌面点击一个图标就能快速启动一个app的原因,因为内存中已经有此信息,包括缓存、包名、签名、权限等等基本信息。

apk分为两大类,一种是系统app,一种是第三方app,系统应用必须是root权限才能操作

1.system/app : 系统自带的应用程序,获得root权限才能删除。

2.data/app : 用户程序安装目录,安装时会把apk文件复制到此目录下。

3.data/data : 存放应用程序的数据。

4.data/dalvik-cache : 将apk中的dex文件安装到该目录下(dex文件是dalvik虚拟机的可执行文件,大小约为原始apk的四分之一)。

apk存储信息的地方:

packages.xml:记录了系统中所有安装的应用信息,包括基本信息、签名和权限。

pakcages-back.xml:packages.xml文件的备份。

pakcages-stoped.xml:记录系统中被强制停止的运行的应用信息,系统在强制停止某个应用的时候,会将应用的信息记录在该文件中。

pakcages-stoped-backup.xml:pakcages-stoped.xml文件的备份。

packages.list:保存普通应用的数据目录和uid等信息。

这5个文件中pakcages-back.xml和pakcages-stoped-backup.xml是备份文件。当Android对文件packages.xml和pakcages-stoped.xml写之前,会先把它们备份,如果写文件成功了,再把备份文件删除。如果写的时候,系统出问题了,重启后在需要读取这两个文件时,如果发现备份文件存在,会使用备份文件的内容,因为源文件可能已经损坏了。其中packages.xml是PackageManagerServcie启动时,需要用到的文件。

在梳理源码之前先大概说一下apk安装的四大步骤:

(1)拷贝apk到指定的目录:默认情况下,用户安装的apk首先会拷贝到/data/app下,用户有访问/data/app目录的权限,但系统出厂的apk文件会被放到/system分区下,包括/system/app,/system/vendor/app,以及/system/priv-app等,该分区需要root权限的用户才能访问。

(2)加载apk、拷贝文件、创建应用的数据目录:为了加快APP的启动速度,apk在安装的时候,会首先将APP的可执行文件(dex)拷贝到/data/dalvik-cache目录下,缓存起来。再在/data/data/目录下创建应用程序的数据目录(以应用包名命令),用来存放应用的数据库、xml文件、cache、二进制的so动态库等。

(3)解析apk的AndroidManifest.xml文件:在安装apk的过程中,会解析apk的AndroidManifest.xml文件,将apk的权限、应用包名、apk的安装位置、版本、userID等重要信息保存在/data/system/packages.xml文件中。这些操作都是在PackageManagerService中完成

的。

(4)显示icon图标:应用程序经过PMS中的逻辑处理后,相当于已经注册好了,如果想要在Android桌面上看到icon图标,则需要Launcher将系统中已经安装的程序展现在桌面上。

复制APK安装包到/data/app目录下,解压缩并扫描安装包,向资源管理器注入APK资源,解析AndroidManifest文件,并在/data/data目录下创建对应的应用数据目录,然后针对Dalvik/ART环境优化dex文件,保存到dalvik-cache目录,将AndroidManifest文件解析出的组件、权限注册到PackageManagerService并发送广播。

android apk 安装流程相关推荐

  1. Android中APK安装流程解析

    前言:大家都知道,手机关机以后,就是一个冰冷的砖头,只能用来做防身的利器,但是开机后,点击桌面上的任何一个图片,都能开启一个APP,这说明在开机过程中,系统把已经安装好的APP加载到内存中,这到底是怎 ...

  2. android11安装第三方,Android Apk安装(兼容Android11 Api30)

    Apk安装 Android11之前可通过 Intent.ACTION_INSTALL_PACKAGE 进行传递Apk的URI进行安装 但是在Android11版本 Intent.ACTION_INST ...

  3. Android应用安装流程理解

    在应用安装的时候,界面一般是等待状态,我们需要等一会,这个时候,系统是在做什么呢? 抓log可以看到,安装流程比较复杂,我们可以从最本质的地方去理解, 如果一个可执行程序要安装到PC上,直接是复制一下 ...

  4. 一文看懂Android APK安装的原理

    一文看懂Android APK安装的原理 前言 APK包的构成 安装APK 总结 前言 大家有没有想过一个应用的APK是怎么被安装到安卓手机上的,安装的本质是什么?我们知道,Windows应用程序的安 ...

  5. Android APK安装失败错误代码含义

    Android APK安装失败错误代码含义 名称 value 描述 INSTALL_FAILED_ALREADY_EXISTS -1 已经安装 INSTALL_FAILED_INVALID_APK - ...

  6. android获取apk名称_安卓逆向——APK安装流程

    制丨文生 整理丨阿星 很多学习安卓逆向的朋友大多都会卡在安卓apk上,今天小生就来给大家讲解一下,安装apk的流程,希望能帮助到大家. 安装方式: ⑴系统程序安装 ⑵通过Android市场安装 ⑶手机 ...

  7. Android 安装apk流程,Android PMS(二)-Apk安装流程

    原创内容,转载请注明出处,多谢配合. 一.APK组成 在APK的安装流程,在此之前先简单了解下APK组成: 目录/文件 描述 assert 存放的原生资源文件,通过AssetManager类访问. l ...

  8. 4 安卓安装路径_安卓逆向——APK安装流程

    很多学习安卓逆向的朋友大多都会卡在安卓apk上,今天小生就来给大家讲解一下,安装apk的流程,希望能帮助到大家. 安装方式: ⑴系统程序安装 ⑵通过Android市场安装 ⑶手机自带安装 ⑷使用ADB ...

  9. Android apk安装过程

    Android安装包.APK是类似Symbian Sis或Sisx的文件格式.通过将APK文件直接传到Android模拟器或Android手机中执行即可安装. Android应用安装有如下四种方式 1 ...

最新文章

  1. 你对Java网络编程了解的如何?Java BIO 网络编程 | Netty 前期知识
  2. Android屏幕大小适配问题解决
  3. META-INF目录是干啥用的?
  4. (BFS)Catch That Cow(poj3278)
  5. 去别人共享目录下拷贝东西,怎么进入别人的机器
  6. 推荐几本jquery书
  7. JAVA多线程任务详解笔记
  8. vue路由守卫的执行顺序
  9. 专业能力和表达能力,你觉得哪个更重要?
  10. java 拼图_拼图延迟的历史-Oracle正式将Java 9的发布日期推迟到2017年
  11. jquery服务器文件保存到本地,jQuery本地存储
  12. 多元函数的极限,连续,偏导数,全微分之间的关系(学习笔记)
  13. 谷氨酰胺(Glutamine)检测实验分析方案
  14. 五分钟you-get入门
  15. 1nm晶体管诞生 秒杀当前14nm主流芯片制程
  16. 初中计算机科目三必背,科目三实用十句口诀,临考提分必背!建议收藏
  17. Beef-xss安装及使用
  18. python程序设计黄锐军测验答案_Python程序设计
  19. 卡西欧计算机怎么算反函数,卡西欧fx-9750GII计算器-卡西欧计算器
  20. python获取相对路径的绝对路径_python之:绝对路径相对路径的应用

热门文章

  1. 修改文件属性chmod,chown,utime,truncate
  2. 杂论——wly_sh调查笔记
  3. js关闭微信浏览器页面
  4. 新世纪大学英语(第二版)综合教程第一册 Unit 2 重点单词
  5. 川核哆唯VR “元”教育|让教学活过来,让学习身临其境
  6. Eclipse 报错A child container failed during start?
  7. 勒索病毒java解密_被CrazyCrypt2.1勒索病毒加密了?已有一键解密工具!
  8. PyCharm代码格式调整
  9. 体验平安免费车身划痕补漆服务
  10. Chrome浏览器清除js缓存