我的猜测是.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的角度来看,单个应用程序拥有:
因此,是的,每个Android应用都有自己的用户,该用户具有访问它的适当权限,该用户位于内部存储(受标准Linux文件系统权限管理保护)中,并且具有自己的DVM进程(无法从外部访问)的应用程序)。
为了使应用程序可以离开沙箱(例如,连接到Internet),使用了Android list 中声明的权限。
安装过程中的步骤
因此,根据以上说明,应该清楚在安装Android应用程序时会发生什么:
.apk
-file的内容。 intent-filter
(例如,应用程序标准入口点的android.intent.category.LAUNCHER
-filter)。