问题描述
我知道如何从安装应用程序的安卓
设备如的播放商店的或通过的 .apk文件文件。但我想了解安装的实际过程。
例如。在Windows上:
- 串行codeS等放置在注册表中
- 文件重要软件的运行置于内的程序文件的文件夹(主
的.exe
等)
到目前为止,我所知道的关于安卓
应用程序的安装过程是什么:
-
在一个Android应用程序已经被执行(安装后),刚下载的数据被放置在这样的位置:的Android /数据或安卓/ OBB 的等
-
如果通过Android开发pssed专门EX $ P $,文件也可以放在其他地方,例如上的二级存储的(存储卡,云存储等)
但除此之外,我的关于Android的安装过程的知识是pretty的纤薄如:
-
我不知道有关的Android程序的执行重要的文件都放置(在Windows的情况下,的 .exe文件的,相关媒体,图书馆等。)
-
我同样不知道这些文件是如何在Android设备结构(安装后),如在这些文件结构是文件夹,如:的Java 的 RES 的菜单的布局的等开发过程中内环境Android这样的工作室?
-
我也不知道怎么样应用程序的文件类型存储在用户的设备安装后,如(从Android安装文件或 APK 的正解压缩后)是他们为的的.java 的存储和(或)的的.xml 的文件,在开发过程中等等。
希望有人可以填空,谢谢。
Beginnning 的
PackageInstaller调用InstallAppProgress活性接收来自用户的指令。 InstallAppProgress会问 PackageManager
服务通过INSTALLD安装包。来源$ C $ C可在< Android源> /封装/应用程序/ PackageInstaller
当我们安装 APK
文件,包管理器解析包( APK
)文件,并显示确认,当用户preSS确定按钮,命名软件包管理器调用方法 installPackage
与这四个参数,即 URI
, installFlags
,观察者, installPackageName
。软件包管理器启动名为包一个服务,现在所有模糊的事情发生在这个服务。你可以检查 PackageInstallerActivity.java
和 InstallAppProgress.java
在PackageInstaller源$ C $ C。在运行过程中system_service软件包管理器服务和安装守护程序(INSTALLD),作为本机进程既开始在系统启动时运行。
其中, APK
文件存储在安卓
?的
- pre-安装(即相机,日历,浏览器,等等。)
APK
存储在/系统/应用/ - 在用户安装(ApiDemo,Any.do等),APK存储在
/数据/应用/
- 在包管理器创建数据目录
/数据/数据/<包名称> /
来存储数据库,共享preference,本地库和缓存数据
您可能会看到 APK
文件和 *。ODEX
文件相同的 APK
, ODEX
文件是完全不同的讨论和目的。
什么是详细APK安装过程?的
继进程中执行的软件包管理器服务
。
- 在等待
- 添加一个包的队列安装过程
- 确定包安装的适当位置
- 确定安装的安装/更新新的
- 的apk文件的副本给定的目录
- 确定应用程序的UID
- 请求INSTALLD守护进程
- 创建应用程序目录,并设置权限
- 提取DEX code到缓存目录
- 要反映和packages.list
/system/data/packages.xml
最新状态 - 广播到系统一起安装的效果的名称为完整的包
Intent.ACTION_PACKAGE_ADDED
:如果新的(Intent.ACTION_PACKAGE_REPLACED
):更新的情况下
如何包管理器存储数据?的
在三个文件,位于包管理器存储应用程序的信息 /数据/系统
。下面的示例是从安卓4.0 ICS
仿真图像中提取。
packages.xml
:此文件包含的权限和程序包/应用程序的列表。这 XML
文件存储两件事权限1. 2.包(应用程序),允许正在&LT店;权限>
标签。每个权限有三个属性,即名称,包装和保护。名称属性有我们在的AndroidManifest.xml
使用许可的名称,包装属性表明许可属于包,在多数情况下,机器人的值,因为 <许可>
标签包含默认权限和保护注明安全水平
packages.list
:这是简单的文本文件包含包名,用户名,标志和数据目录,我找不到任何完美的描述,但我相信它是 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
包-stoped.xml
:该文件包含已停止状态包列表,采场表示应用程序无法接收任何广播
我在哪里可以找到软件包管理器和安装程序包的源$ C $ C?的
软件包管理器
框架/基/服务/爪哇/ COM /安卓/服务器/ PM / Settings.java
框架/基/服务/爪哇/ COM /安卓/服务器/ PM / PackageManagerService.java
框架/基/服务/爪哇/ COM /安卓/服务器/ PM / IPackageManager.aidl
框架/基/服务/爪哇/ COM /安卓/服务器/ PM / PackageSignatures.java
框架/基/服务/爪哇/ COM /安卓/服务器/ PM / preferredActivity.java
框架/服务/爪哇/ COM /安卓/服务器/ preferredComponent.java
框架/核心/爪哇/安卓/内容/ IntentFilter.java
框架/基/核心/爪哇/安卓/内容/ PM / PackageParser.java
框架/基/服务/爪哇/ COM /安卓/服务器/ PM / Installer.java
框架/基/核心/的Java / COM /安卓/内部/ APP / IMediaContainerService.aidl
frameworks/base/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java
包安装程序
<$p$p><$c$c>packages/apps/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java封装/应用程序/ PackageInstaller / src目录/ COM /安卓/ packageinstaller / PackageUtil.java封装/应用程序/ PackageInstaller / src目录/ COM /安卓/ packageinstaller / InstallAppProgress.java。链接引用的:和链接2 。
I know how to install an application to an Android
device e.g from Play-Store or via an .apk file. But I'd like to understand the actual process of installation.
E.g. on Windows:
- Serial codes etc. are placed in the registry
- Files important to the running of software are placed within the Program Files folder (the main
.exe
etc.)
So far, what I do know about the Android
application installation process is:
After an android application has been executed (post-installation), data freshly downloaded is placed in locations like: Android/data or Android/obb etc.
If specifically expressed by an Android developer, files can also be placed elsewhere e.g. on secondary storage (memory cards, cloud storage etc.)
But other than that, my knowledge concerning the Android installation process is pretty slim e.g.:
I don't know where important files relating to an Android program's execution are placed (in the case of Windows, the .exe, related media, libraries etc.)
I similarly don't know how these files are structured upon an Android device (post-installation) e.g. are these files structured in folders like: java, res, menu, layout etc. as during development within environments like Android Studio?
Neither do I know how what application file-types are stored on a user's device post-installation (after being unpacked from the android installation file or apk) e.g. are they stored as .java and or .xml files, as during development etc.
Hopefully someone can fill in the blanks, thank you.
Beginnning
PackageInstaller calls InstallAppProgress activity to receives an instruction from the user. InstallAppProgress will ask PackageManager
Service to install package via installd. Source code is available at <Android Source>/packages/apps/PackageInstaller
.
When we install APK
file, Package Manager parse the package(APK
) file and display confirmation, When user press OK button, Package Manager call method named installPackage
with these four parameters namely uri
, installFlags
, observer, installPackageName
. Package Manager start one service named "package", now all fuzzy things happen in this service. you can check PackageInstallerActivity.java
and InstallAppProgress.java
in PackageInstaller source code. Package Manager Service running in system_service process and install daemon (installd) that runs as a native process both start at system boot time.
Where APK
files stores in Android
?
- Pre-Install (i.e. Camera, Calendar, Browser,etc.)
APK
stored in /system/app/ - User Install (ApiDemo, Any.do, etc.) APK stored in
/data/app/
- Package Manager create data directory
/data/data/<package name>/
to store database, shared preference, native library and cache data
You might see apk
file and *.odex
file for same APK
, ODEX
file is totally different discussion and purpose.
What is APK installation process in detail ?
Following process execute in Package Manager Service
.
- Waiting
- Add a package to the queue for the installation process
- Determine the appropriate location of the package installation
- Determine installation Install / Update new
- A copy of the apk file to a given directory
- Determine the UID of the app
- Request to installd daemon process
- Create the application directory and set permissions
- Extraction of dex code to the cache directory
- To reflect and packages.list
/system/data/packages.xml
the latest status - Broadcast to the system along with the name of the effect of the installation is complete package
Intent.ACTION_PACKAGE_ADDED
: If the new (Intent.ACTION_PACKAGE_REPLACED
): the case of an update.
How Package Manager store data ?
Package Manager store application information in three files, located in /data/system
. Following sample is extracted from Android 4 ICS
emulator image.
packages.xml
:This file contain list of permissions and Packages/Applications.This xml
file stores two things 1. permissions 2. package (application), permission are store under <permissions>
tag. Each Permission has three attributes namely name, package and protection. Name attribute has permission name which we are using in AndroidManifest.xml
, package attribute indicate permission belong to package, In majority cases "android" is values because <permission>
tag contain default permissions and protection indicate level of security.
packages.list
: It is simple text file contain package name, user id, flag and data directory, I can't find any perfect description but I assume it that packages.list
file may provide faster lookup of installed package because it file keep important information only.
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
: This file contain package list which has stopped state, Stope stated applications can not receive any broadcast.
Where I can find the source code of Package Manager and Package Installer ?
Package Manager
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
Package Installer
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.
Links to refer: link 1 and link 2.
这篇关于&QUOT;如何是&QUOT; Android应用程序(脸谱等)安装到Android手机?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!