
在Android开发中,以及本章所涉及到的APK安装都需要了解Android的目录所存在的意义,以下就列出常见的目录:
(1)system/app:存放系统的apk,该目录可以通过Environment.getRootDirectory()"/app"来获取。
(2)data/app:用户安装的app,该目录可以通过Environment.getDataDirectory()"app"来获取。
(3)data/data:存放应用程序的数据。
(4)Data/dalvik-cache :将apk中的dexclass.dex文件复制到dalvik-cache下。
(5)system/etc:存放的都是配置文件、权限文件,此目录下保存了所有的诸如wifi、蓝牙、定位、apn、安全等配置。典型的在system/etc/permissions目录下存放的都是相关的权限xml文件。
(6)/data/system/packages.xml文件:此文件是由PackageManagerService.java文件生成,每当新的app被安装时都会在这个文件里注册,具体的参考此博文:
APK即Android Package的缩写,因此在Android中我们通常用的一个概念就是“包”,APK的安装也无非就是对手机设备上的“包”的解析、移动操作,在Android设备上安装主要有以下一种方式:
(1)系统APK安装:系统开机自动完成,由PackageManagerService完成,且没有安装界面。
(2)应用商店(如Google Play)下载的APK安装:由相应的market自动安装,没有安装界面。
(3)ADB工具安装:通常开发人员用这种方式比较多,没有安装界面。
(4)第三方应用安装:即存在手机设备上的APK文件的安装,比如通过浏览器下载一个app到SD卡上,点击就会安装,此时会有安装界面,此过程由系统应用packageinstaller.apk来完成。packageinstaller.apk
当我们在开发Android应用时,最终会生成APK文件安装到Android设备上,那么次APK文件是如何生成的呢?其过程用一张图总结:

由于本文主旨不在APK文件的生成,所以关于这方面的就说这么多了。

一个apk文件在安装的过程中会按照如下步骤,一步一步完成:

我们的apk文件都是有PackageManagerService的进程完成的:
Waiting:PMS处于等待状态。
为安装进程添加一个Package到队列。
确定包安装的合适位置。
确定是安装还是更新(将原来的包替换掉)。
将apk文件复制到指定目录。
为此app确定一个UID。packageinstaller.apk
守护进程开始安装。
创建此应用的目录并且设置权限。
提取dex文件到缓存目录(dalvik-cache目录)。
反射packages.list文件并更新packages.xml文件的状态,即将此app的信息注册到packages.xml中去。
当安装器完成安装以后就将app有效的名称广播出去。
如果是新的app,广播Action就是Intent.ACTION_PACKAGE_ADDED,如果是更新app则广播Action是 ( Intent.ACTION_PACKAGE_REPLACED)。

我们从apk的复制说起!首先将apk拷贝到data/app目录下,解压取出dexclass.dex文件并复制到dalvik-cache目录,然后在data/data目录下创建以apk包名为名字的文件夹。如下图是图解:
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-38912-1.html
吹牛逼
而雷军却又说小米手机在中国占有率第一
美冷战思维坑了别人也害了自己