"如何是" Android应用程序(脸谱等)安装到Android手机? [英] "How are" Android applications (Facebook etc.) installed to an android phone?

查看:223
本文介绍了"如何是" Android应用程序(脸谱等)安装到Android手机?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我知道如何从安装应用程序的安卓设备如的播放商店的或通过的 .apk文件文件。但我想了解安装的实际过程。

例如。在Windows上:

  • 串行codeS等放置在注册表中
  • 文件重要软件的运行置于内的程序文件的文件夹(的.exe

到目前为止,我所知道的关于安卓应用程序的安装过程是什么:

  • 在一个Android应用程序已经被执行(安装后),刚下载的数据被放置在这样的位置:的Andr​​oid /数据安卓/ OBB 的等

  • 如果通过Android开发pssed专门EX $ P $,文件也可以放在其他地方,例如上的二级存储的(存储卡,云存储等)

但除此之外,我的关于Android的安装过程的知识是pretty的纤薄如:

  • 我不知道有关的Andr​​oid程序的执行重要的文件都放置(在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 文件存储在安卓

  1. pre-安装(即相机,日历,浏览器,等等。) APK 存储在/系统/应用/
  2. 在用户安装(ApiDemo,Any.do等),APK存储在 /数据/应用/
  3. 在包管理器创建数据目录 /数据/数据​​/<包名称> / 来存储数据库,共享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店;权限> 标签。每个权限有三个属性,即名称,包装和保护。名称属性有我们在的Andr​​oidManifest.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。

链接引用链接1 链接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 ?

  1. Pre-Install (i.e. Camera, Calendar, Browser,etc.) APK stored in /system/app/
  2. User Install (ApiDemo, Any.do, etc.) APK stored in /data/app/
  3. 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手机?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆