我知道如何将应用程序安装到Android
设备上,例如从Play-Store或通过.apk文件。但我想了解安装的实际过程。
例如在Windows上:
.exe
等)中。到目前为止,我对Android
应用程序安装过程的了解是:
但除此之外,我对Android安装过程的了解非常有限,例如:
希望有人能填补空白,谢谢。
发布于 2015-05-21 19:06:43
入门
PackageInstaller调用InstallAppProgress活动来接收用户的指令。InstallAppProgress将要求PackageManager
服务通过分期付款方式安装软件包。源代码可在<Android Source>/packages/apps/PackageInstaller
上获得。
当我们安装APK
文件时,Package解析软件包(APK
)文件并显示确认,当用户按OK按钮时,Package调用方法名为installPackage
,其中包含uri
、installFlags
、观察者、installPackageName
四个参数。启动一个名为" Package“的服务,现在所有模糊的事情都发生在这个服务中。您可以在PackageInstallerActivity.java
源代码中检查PackageInstaller和InstallAppProgress.java
。在system_service进程中运行的和作为本机进程运行的守护进程( Package )都是在系统启动时启动的。
APK
文件存储在 Android
中的
APK
/data/app/
中的APK/data/data/<package name>/
以存储数据库、共享首选项、本机库和缓存数据您可能会看到apk
文件和*.odex
文件用于相同的APK
,ODEX
文件是完全不同的讨论和目的。
详细说明了什么是APK安装过程?
在Package Manager Service
中执行以下进程。
/system/data/packages.xml
的最新状态Intent.ACTION_PACKAGE_ADDED
:如果是新的( Intent.ACTION_PACKAGE_REPLACED
):一个更新的情况。
包管理器如何存储数据?
Package将应用程序信息存储在位于/data/system
中的三个文件中。从Android 4 ICS
仿真器图像中提取以下示例。
packages.xml
:This文件包含权限和包/应用程序的列表。这个xml
文件存储两个东西: 1、权限2、包(应用程序)、权限存储在<permissions>
标记下。每个权限有三个属性,即名称、包和保护。名称属性具有我们在AndroidManifest.xml
中使用的权限名,package属性表示属于包的权限,在大多数情况下,"android“是值,因为<permission>
标记包含默认权限,而保护指示安全级别。
packages.list
:它是一个简单的文本文件,包含包名、用户id、标志和数据目录,我找不到任何完美的描述,但我假设packages.list
文件只保留重要的信息,可以更快地查找已安装的包。
com.android.launcher 10013 0 /data/data/com.android.launcher
com.android.quicksearchbox 10033 0 /data/data/com.android.quicksearchbox
com.android.contacts 10001 0 /data/data/com.android.contacts
com.android.inputmethod.latin 10006 0 /data/data/com.android.inputmethod.latin
packages-stoped.xml
:此文件包含已停止状态的包列表,存储声明的应用程序无法接收任何广播。
,在这里我可以找到Package和Package ?的源代码
包管理器
frameworks/base/services/java/com/android/server/pm/Settings.java
frameworks/base/services/java/com/android/server/pm/PackageManagerService.java
frameworks/base/services/java/com/android/server/pm/IPackageManager.aidl
frameworks/base/services/java/com/android/server/pm/PackageSignatures.java
frameworks/base/services/java/com/android/server/pm/PreferredActivity.java
frameworks/services/java/com/android/server/PreferredComponent.java
frameworks/core/java/android/content/IntentFilter.java
frameworks/base/core/java/android/content/pm/PackageParser.java
frameworks/base/services/java/com/android/server/pm/Installer.java
frameworks/base/core/java/com/android/internal/app/IMediaContainerService.aidl
frameworks/base/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java
包安装程序
packages/apps/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java
packages/apps/PackageInstaller/src/com/android/packageinstaller/PackageUtil.java
packages/apps/PackageInstaller/src/com/android/packageinstaller/InstallAppProgress.java.
https://stackoverflow.com/questions/30358687
复制相似问题