Android:了解APK安装过程
我想了解如何在Android上安装apk的过程,特别是通过adb安装(我正在testing的地方)的Android SDK模拟器。
在search的时候,我发现没有满意的答案,“apk只是复制到/ data / app,并且在你运行的时候安装了,这并不令人满意,因为它没有解释apk的图标是如何出现在菜单上的的问题。
从Windows的背景来看,运行.exe或安装程序来安装程序会修改registry,文件,服务等….我需要了解,如果这或类似的事情发生在Android上安装一个apk。
所以如果任何人可以向我解释什么发生特别是当Android安装一个apk我会不胜感激。
另外,我还想知道Dalvik VM“ zygote
”是否参与了安装,还是发生在较低的Linux内核级别?
我的最终目标是使用strace来安装apk的安装过程,以logging系统修改,文件创build,networking活动和其他感兴趣的事件。
主要有两类Android应用程序。
- 系统应用程序:系统初始化时安装
- 用户应用程序:从Play商店安装,使用ADB或在SD卡中复制.apk文件。
以下是一步一步的安装过程。
- parsingAndroidManifest.xml,提取信息并存储到/data/system/packages.xml和/data/system/packages.list
- .apk文件被复制到一个特定的目录,并为这个应用程序创build一个数据存储目录
XMLparsing,资源分析和.apk文件复制都是通过
PackageManageService.java
但是,目录创build是通过
installd.c
PackageManageService.java通过位于/ dev / socket / installed的本地套接字与installd.c进行通信
.apk文件被复制的软件包对于系统应用程序和用户应用程序是不同的。 对于系统应用程序是
/系统/应用程序/
在那里复制到.apk文件的用户应用程序.apk文件复制到
/数据/应用程序
从.apk文件中提取的.dex文件被复制到/ data / dalvik-cache /。
包pipe理器创build数据目录/数据/数据/ /存储数据库,共享首选项,本机库和caching数据
所有你需要知道的是这个http://developer.android.com/tools/building/index.html和了解这里更好的形象。; 你也可以谷歌关于aapt工具和.dex了解更多,因为classes.dex是你的应用程序的substruction – 包含java和类编译。 一个dex文件包含多个类,而java class文件只包含这个类。 dex文件是用DX工具转换的java字节码,它是Android SDK的组成部分。 因此,它允许每个应用程序以其自己的Dalvik虚拟机实例运行。
这是在两个层次上完成1.)PackageInstaller(UI)使用PackageManagerService(系统服务)发送命令到第二部分(Installd)2.)Installd是一个守护程序,它实际上安装了apk。 Installd和PackageManagerService使用套接字通信进行通信。 使用的套接字是installd本身。 您可以在init中引用init.rc来创build套接字。
- 如何在没有公开暴露/ app /文件夹的情况下将Laravel 4安装到虚拟主机子文件夹?
- 无法使用pip安装Pygame
- “无法运行curl-config:安装pycurl时没有这样的文件或目录”
- 如何在R中selectCRAN镜像
- pip安装/usr/local/opt/python/bin/python2.7:糟糕的解释器:没有这样的文件或目录
- 当试图安装pecl扩展时,在mac os x 10.7.3上出现$ PHP_AUTOCONF错误
- 无法在Windows上安装Aptana Studio 3.6
- XCode:7应用程序安装失败:找不到此可执行文件的有效设置configuration文件
- Mac OS X和多个Java版本