我的猜测是.apk软件包的内容被提取到某个地方,并且该应用程序已在某个目录中注册,以便应用程序启动器或其他可以找到它的目录。但是,这就是全部吗?在这种情况下,是否在每次启动应用程序时将原始manifest.xml读取或将其预处理为其他某种形式?

最佳答案

一些基础
.apk-文件
.apk-文件一点都不神奇。它只是代表Android应用程序内容的一堆文件。如果使用存档工具(如7Zip)打开它,则可以浏览并提取其内容。

Android是Linux

基本的Android系统是Linux系统。 Android使用自定义Linux内核,该内核具有一些省电功能和一些速度改进功能。 Android设备的内部存储使用YAFFS2-filesystem格式化,该文件完全具有类似于Linux的访问概念。

使用的文件系统可能因制造商或Android版本而异。较新的设备通常使用ext3,而三星使用它自己的文件系统:RFS

这是Android使用的Sandbox系统的重要方面。

编译应用
.java-文件会怎样?

首先,它们是由普通的Java编译器编译的。将它们编译(转换为.class -files)后,Android SDK中的dx -tool然后将这些“常规” java类转换/转换为Dalvik-Bytecode。

然后,该“特殊” java代码由基于开源JRE实现Apache Harmony的DVM(Dalvik虚拟机)解释。

更新:在较新的Android版本中,当使用jack时可以跳过转换/转换步骤。这样,.java文件将直接编译为.dx格式。

另外,自4.4版(KitKat)起,Android有了新的ART runtime,正式取代了Android 5(Lollipop)中的Dalvik。

我放入/asset-目录的资源会怎样?

Android提供了/assets-目录来添加一些二进制原始文件(例如SQLite数据库)。放入此目录的文件不是编译或优化的文件。

如果将文件放入此目录,则这是您期望从Android获得的行为。

我放入/res/raw-目录的资源会怎样?

/assets-目录类似,您也可以在此处放置二进制(或其他)原始文件(例如,帮助页面的HTML文件)。这些文件已被编译/优化(如果可能)。

list 文件和其他XML文件会怎样?

Android list 以及其他XML文件(布局,字符串等)被存储并“编译”为二进制XML格式。这是速度优化。

沙盒

从Android OS的角度来看,单个应用程序拥有:

  • 这是它自己的过程
  • 它是自己的OS-用户(如Linux上的用户),
  • 它是自己的DVM,
  • 它在堆和
  • 中是自己的位置
  • 它在文件系统上的位置。

  • 因此,是的,每个Android应用都有自己的用户,该用户具有访问它的适当权限,该用户位于内部存储(受标准Linux文件系统权限管理保护)中,并且具有自己的DVM进程(无法从外部访问)的应用程序)。

    为了使应用程序可以离开沙箱(例如,连接到Internet),使用了Android list 中声明的​​权限。

    安装过程中的步骤

    因此,根据以上说明,应该清楚在安装Android应用程序时会发生什么:
  • 创建该应用程序的新用户。
  • 使用此新用户权限,将在内部存储中创建Applications目录。
  • 在那里提取了.apk -file的内容。
  • 解析Android list 并注册声明的intent-filter(例如,应用程序标准入口点的android.intent.category.LAUNCHER -filter)。
  • 现在该应用程序已准备就绪,可以首次启动。
  • 10-04 23:13
    查看更多