我正在尝试了解如何在Android上安装apk的过程,特别是通过adb install(我正在测试的地方)安装Android SDK模拟器。
在搜索中,我发现没有令人满意的答案“将apk简单地复制到/ data / app并在运行时安装。这对我来说并不令人满意,因为它没有解释apk的图标是如何出现在菜单和其他问题。
来自Windows背景,运行.exe或安装程序来安装程序会修改注册表,文件,服务等....我需要了解在Android上安装apk时是否发生此类或类似情况。
因此,如果有人能够向我解释在Android上安装apk时具体发生什么,我会非常感激。
另外,我还想知道Dalvik VM“zygote
”是否参与安装,还是发生在较低的Linux内核级别?
我的最终目标是使用strace来控制apk的安装过程,以记录系统修改,文件创建,网络活动和其他感兴趣的事件。
答案 0 :(得分:23)
主要有两类Android应用程序。
以下是逐步安装过程。
XML解析,资源分析和.apk文件复制由
完成PackageManageService.java
但是,目录创建由
完成installd.c
PackageManageService.java通过位于/ dev / socket / installed的本地套接字与installd.c进行通信
复制.apk文件的包对于系统应用和用户应用是不同的。对于系统应用程序来说
/系统/应用程序/
将复制到.apk文件中的用户app .apk文件复制到
<。> .dex文件,从.apk文件中提取,被复制到/ data / dalvik-cache /。/数据/应用
程序包管理器创建数据目录/数据/数据//以存储数据库,共享首选项,本机库和缓存数据
答案 1 :(得分:10)
我想,你想知道的一切都在Android开发者网站http://developer.android.com/tools/building/index.html中,并了解应用程序本身的包装,这里是更好的图像(这不是APK安装过程,但它可以帮助你了解apk结构和安装)。 你也可以谷歌关于aapt工具和.dex来了解更多,因为classes.dex是你的应用程序的子结构 - 包含java和编译的类。一个dex文件包含多个类,而java类文件只包含那个类。 dex文件是用DX工具转换的java字节码,它是Android SDK的组成部分。因此,它允许每个应用程序作为自己的进程运行,并具有自己的Dalvik虚拟机实例。
答案 2 :(得分:0)
这是在两个级别完成的 1.)PackageInstaller(UI)使用PackageManagerService(系统服务)向第二部分发送命令(Installd) 2.)Installd是一个实际安装apk的守护进程。 Installd和PackageManagerService使用套接字通信进行通信。使用的套接字是installd本身。您可以在init中引用init.rc来创建套接字。