android - android如何存储和运行程序

标签 android jar zip apk dalvik

Android 以 APK 格式存储它的程序,这是 ZIP/JAR 的修改版本。

安装这些 APK 文件时,它们存储在/system/app/$APKNAME.apk 中。

此目录中的一些应用程序也有一个 $APKNAME.obex 文件。

这些 APK 文件包含一些休闲

META-INF
    MANIFEST.MF
    CERT.RSA
    CERT.SF
SHA1-Digest
res
AndroidManifest.xml
classes.dex
resources.arsc

所以我想知道的是什么是 .obex 文件,Android 程序是在运行时从 APK/ZIP/JAR 中解压缩的吗?

最佳答案

它的工作方式非常有趣,并且提供了对 Android 运行时模型的一些重要见解。我首先推荐观看的是 Dalvik VM internals ,如果你打算用 Android 做任何大量的系统工作。 (尽管它显然已经过时了。)现在,当 Android 包管理器收到需要启动新应用程序的 Intent 时,它会从已经运行的 zygote 进程中 fork 出一个新的虚拟机。这基本上是一种允许系统获得许多不错的内存属性(共享映射的页面等)的技术。然后,系统加载一个(可能是预先优化和验证的)文件进行加载,以便虚拟机可以开始执行它。你应该阅读 this文件,它会告诉你很多关于它是如何工作的。 (也许 this thread 也会有所帮助。)请记住,由于所有系统都是不同的——例如,如果您使用的是新架构,除非您明确编写,否则您不会获得 JIT 支持! -- 您无法确定 Dalvik 将如何加载代码来运行您的应用。

关于android - android如何存储和运行程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9816232/

相关文章:

java - 无法使用 getApplicationInfo 从名称获取子包

android - 在 "sleeping"Android 设备上触发警报

java - 我制作了一个 jar 文件,但它不像以前那样在命令行中运行

java - 错误 - 代码在 NetBeans 中有效,但在 .jar 命令行中无效

java - JAR 版本依赖冲突 - Java

java - 如何在 Java 中读取 .zip 文件中的文件?

java - 是否可以在 Android 中运行时执行 Java 代码字符串?

linux - 如何解压缩我的子目录中的所有 zip 文件夹?

powershell - 为什么 Shopify 在使用 Powershell 压缩时不接受我的主题的 zip 文件

java - 从 Android 中的 ListView 中获取选中项目的总数