"怎么样"Android应用程序(Facebook等)安装到Android手机?

7 java android apk android-package-managers android-install-apk

我知道如何将应用程序安装到Android设备,例如从Play-Store或通过.apk文件.但我想了解实际的安装过程.

例如在Windows上:

  • 序列号等放在注册表中
  • 对软件运行很重要的文件放在Program Files文件夹(.exe文件)中

到目前为止,我对Android应用程序安装过程的了解是:

  • 在执行Android应用程序(安装后)后,新下载的数据将放置在以下位置:Android/dataAndroid/obb等.

  • 如果由Android开发人员明确表达,文件也可以放在其他位置,例如二级存储(存储卡,云存储等)

但除此之外,我对Android安装过程的了解非常渺茫,例如:

  • 我不知道在哪里放置了与Android程序执行相关的重要文件(在Windows的情况下,.exe,相关媒体,库等)

  • 我同样不知道这些文件是如何在Android设备上构建的(安装后),例如这些文件是否构建在文件夹中,如:java,res,menu,layout等,就像在Android Studio等环境中开发一样?

  • 我也不知道应用程序文件类型在安装后(从android安装文件或apk中解压缩后)存储在用户设备上的方式,例如它们存储为.java和/或.xml文件,如开发期间等.

希望有人可以填补空白,谢谢.

Yur*_*ets 12

Beginnning

PackageInstaller调用InstallAppProgress活动以接收来自用户的指令.InstallAppProgress将要求PackageManagerService通过installd安装软件包.源代码可在以下位置获得<Android Source>/packages/apps/PackageInstaller.

当我们安装APK文件,包管理器解析包(APK)文件,并显示确认,当用户按下OK按钮,命名为包管理器调用方法installPackage与这四个参数,即uri,installFlags,观察者installPackageName.软件包管理器启动一个名为"package"的服务,现在所有模糊的事情都发生在这个服务中.您可以检查PackageInstallerActivity.javaInstallAppProgress.java在PackageInstaller源代码.在system_service进程中运行的程序包管理器服务和安装作为本机进程运行的守护程序(installd)都在系统引导时启动.

APK文件存储在哪里Android

  1. APK存储在/ system/app /中的预安装(即摄像头,日历,浏览器等)
  2. 用户安装(ApiDemo,Any.do等)APK存储在 /data/app/
  3. 包管理器创建数据目录/data/data/<package name>/ 以存储数据库,共享首选项,本机库和缓存数据

您可能会看到apk文件和*.odex文件相同APK,ODEX文件是完全不同的讨论和目的.

什么是APK安装过程详细?

以下流程执行Package Manager Service.

  • 等候
  • 将包添加到队列以进行安装过程
  • 确定软件包安装的适当位置
  • 确定安装安装/更新新
  • apk文件的副本到给定目录
  • 确定应用程序的UID
  • 请求安装守护程序进程
  • 创建应用程序目录并设置权限
  • 将dex代码提取到缓存目录
  • 反映和package.list /system/data/packages.xml最新状态
  • 广播到系统的名称与安装的效果是完整的包 Intent.ACTION_PACKAGE_ADDED:如果new(Intent.ACTION_PACKAGE_REPLACED):更新的情况.

在此输入图像描述

包管理器如何存储数据?

包管理器将应用程序信息存储在三个文件中 /data/system.从Android 4 ICS仿真器图像中提取以下样本.

packages.xml:此文件包含权限列表和包/应用程序.这个xml文件存储两件事1.权限2.包(应用程序),权限存储在<permissions>标签下.每个权限都有三个属性,即名称,包和保护.Name属性具有我们正在使用的权限名称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
Run Code Online (Sandbox Code Playgroud)

packages-stoped.xml:此文件包含已停止状态的包列表,Stope声明应用程序无法接收任何广播.

我在哪里可以找到Package Manager和Package Installer的源代码?

包管理器

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
Run Code Online (Sandbox Code Playgroud)

包安装程序

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.
Run Code Online (Sandbox Code Playgroud)

链接参考:链接1链接2.