因此,我一直在围绕AOSP进行挖掘,试图找出如何安装android应用程序。到目前为止,这是我在哪里:了解如何通过PackageManagerService安装android应用程序
apk文件将从PackageInstallerActivity发送到InstallAppProgress,它将在其中调用PackageManager方法installPackage()。
先前对PackageManager的调用被定向到PackageManagerService,带着AIDL的魔力(花了一些时间让我理解这一点)。
在核心方法installPackageWithVerification()的PackageHandler的一个实例被创建和消息传递发生在鲁棒的方式与一群的像INIT_COPY状态码的使用,PACKAGE_VERIFIED等
基于在处理程序中接收的消息的状态代码上进行操作。开始INIT_COPY - 将包添加到挂起的安装列表中,并调用代码为的消息MCS_BOUND。
这复制了从apk文件中提取的基本文件,如数据文件。
在通道的某个地方发出带有标记CHECK_PENDING_VERIFICATION的消息,该消息从待处理列表中解析条目,尤其是AndroidManifest文件。验证和验证包裹签名,包装名称等等。
然后调用updateSettingLI()这反过来又产生3个更重要的函数调用。
- moveDexFilesLI()
- setPermissionsLI() - 提取目录资源/文件,resources.arsc,的Manifest.xml
- updatePermissionsLPw() - 电话grantPermissionLPw - 和增加的组识别从清单文件中解析出的权限
在此时间点,Package对象具有各自的groupid,因此unti我现在能够基本弄清楚权限是如何转换成groupids的。请原谅我的咆哮,我认为这可能对某些用户来说是非常有用的,特别是scanPackageLI方法,它很容易在代码中迷失方向。
现在的实际问题,我知道比喻在android每个应用程序不过是一个Linux进程控制自己的uid和gid。我们从上面的gids中知道如何从PackageManagerService转换到linux进程。
我知道“installd”在安装过程中也起着至关重要的作用。 但我无法找到正在安装的软件包(Linux进程)设置权限或访问权限(根据linux teminology)的链接?
请帮助我。
有没有什么好的博客或者与此相关的东西,会给出更详细的信息,如果是的话请分享。 –
http://coltf.blogspot.it/p/android-os-processes-and-zygote.html这是一个很好的起点 –