Android 安装包

1. /data/system/packages.xml

++/data/system/packages.xml++由PackageManagerService.java生成,里面记录了系统当中安装的APK的所有属性,权限等信息。

当系统中的APK安装、删除、升级时,文件就会被更新,不要手动修改。

package代表一个APK的属性,它的属性含义如下:

name:APK的包名

codePath:安装路径。有/system/app系统APK和/data/app两种,

system:如果APK被安装在/system/app下,system的值为true;安装在/data/app下面的话,值为false

ts:时间戳

version:APK的版本号

sharedUserId/userId:Android系统启动一个普通的APK时,会为这个APK分配一个独立的UID,这就是userId。如果APK要和系统中其它APK使用相同的UID的话,那就是sharedUserId。

2 .安装目录

一个最一般的apk包(不是系统app,没有共享lib,不是装在sd上或是forward-lock的app)装完后内容会体现在这么几个目录:

/data/app // apk包

/data/app-lib// native lib

/data/data //数据目录,其中的lib目录指向上面的/data/app-lib目录/data/dalvik-cache/data@[email protected]@classes.dex //优化或编译后的Java bytecode

3.启动时安装

Android启动时会把已有的app安装一遍,过程主要分三部分:读取安装信息,扫描安装,写回安装信息。读取和写回主要是针对于一坨安装信息文件。
这些信息保证了启动后app与上一次的一致。关键步是扫描指定目录下的apk并安装。
Android中apk主要分布在以下几个目录,意味着启动时要扫描的主要也是这几个目录:

系统核心应用:/system/priv-app

系统app:/system/app

非系统app:/data/app(安装于手机存储的一般app)或/mnt/asec//pkg.apk(sdcard或forward-locked)

受DRM保护app:/data/app-private

vendor-specific的app: /vendor/app

资源型app:/system/framework

4.PMS 服务

System Server开始,实现在/frameworks/base/services/java/com/android/server/SystemServer.java
调用PMS的main()函数,其实现位于/frameworks/base/services/java/com/android/server/pm/PackageManagerService.java:
这里构造了PMS并加到ServiceManager中,这样其它的组件就可以用该服务了

5.android:persistent, 常驻的应用

在AndroidManifest.xml定义中,application有这么一个属性android:persistent

application PhoneApp既没有被Broadcast唤醒,也没有被其他service调用,
那么是android是通过什么方式来启动PhoneApp,是因为属性android:persistent。

在AndroidManifest.xml定义中,application有这么一个属性android:persistent,
根据字面意思来理解就是说该应用是可持久的,也即是。其实就是这么个理解,
被android:persistent修饰的应用会在系统启动之后被AM启动。

startProcessLocked in ActivityManagerService.java

ActivityManagerService
APP 定义为persistent就不kill

           for (int ia=0; ia

你可能感兴趣的:(Android 安装包)