Android APK安装过程

应用安装涉及到如下几个目录:
system/app 系统自带的应用程序,无法删除
data/app 用户程序安装的目录,有删除权限。安装时把apk文件复制到此目录
data/data 存放应用程序的数据
Data/dalvik-cache 将apk中的dex文件安装到dalvik-cache目录下(dex文件是dalvik虚拟机的可执行文件,其大小约为原始apk文件大小的四分之一)
安装过程:
复制APK安装包到data/app目录下,解压并扫描安装包,把dex文件(Dalvik字节码)保存到dalvik-cache目录,并data/data目录下创建对应的应用数据目录。

  1. PackageManagerService.java的内部类AppDirObserver实现了监听app目录的功能:当把某个APK拖到app目录下时,可以直接调用scanPackageLI完成安装。
    2.手机数据区目录“data/system/packages.xml”文件中,包含了手机上所有已安装应用的基本信息,如安装路径,申请的permission等信息。

将apk文件复制到data/app目录
解析apk信息
dexopt操作
更新权限信息
完成安装,发送Intent.ACTION_PACKAGE_ADDED广播

Instrumentation只在Activity和ActivityThread中有实例。一个APP启动时会创建一个ActivityThread, 会在ActivityThread的handleBindApplication()创建一个空的Instrumentation对象并保存在ActivityThread的成员变量mInstrumentation, 后续每一个Activity在启动时经过Activity的attach()方法,都会把ActivityThread的mInstrumentation赋给Activity的成员mInstrumentation, 也就是同一个应用进程内,所有Activity共用ActivityThread中的同一个Instrumentation。每一个APP的Application对像也是在handleBindApplication()中经由Instrumentation的newApplication()方法创建,且只有一个。
1. 每一个应用进程中只有唯一的ActivityThread, (ActivityThread中,成员【private static ActivityThread sCurrentActivityThread】, 方法【public static ActivityThread currentActivityThread()】)
2. 每一个应用进程中只有唯一的Application, (ActivityThread中,成员【Application mInitialApplication】, 方法【public Application getApplication()】)
3. 每一个应用进程中只有唯一的Instrumentation, (ActivityThread中,成员【Instrumentation mInstrumentation】, 方法【public Instrumentation getInstrumentation()】)
4. 四大组件第一次启动时都会通过LoadedApk中的getClassLoader()方法,创建当前apk的PathClassLoader对象,后续每次要启组新的组件都会通过该ClassLoader来得到组件实际的Class。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值