【问题标题】:Android regenerate optimised dex fileAndroid重新生成优化的dex文件
【发布时间】:2013-04-10 12:01:42
【问题描述】:

我试图了解一些关于 dex 文件是如何被 android 处理的。

我所知道的是,一个 APK 发布了一个 dex 文件,系统获取它,在安装时对其进行优化,并将生成的 ODEX 文件(优化的 dex)存储在 /data/dalvik-cache/myOdexfile 中,然后运行从那里申请。

真的是这样吗?

当一个 dex 文件从 Internet 下载并打开一个新的 dex 文件时会发生什么?也优化了吗?

另外 - 系统,afaik,保留原始 APK,对吗?我认为它保存在 /data/app/myAPK-1.apk 中。系统是否以任何方式使用它?什么时候?

您能否在安装后以某种方式手动强制从存储的 APK 文件中重新生成 odex 文件?

【问题讨论】:

    标签: android dex dex-limit


    【解决方案1】:

    是的,Android 在安装时从 DEX 创建 ODEX。

    是的,APK 已保存。 DEX 和 ODEX 只包含代码。 APK 是您所有资源和资产的来源 - 您的标签、图标、布局等。

    据我了解,DEX 优化纯粹是一个安装时过程,不会在任何不属于已安装 APK 的 DEX 上执行。而且由于作为 APK 一部分的 DEX 在不安装新 APK 的情况下无法更改,因此无需在正常安装过程之外重新生成 ODEX。

    【讨论】:

    • 好吧,那为什么APK会一直在系统的/data/app目录下呢?它从来没有用于其他任何事情? AFAIK 资源在 /data/data/nameoftheapp/ 中提取,并在运行时从那里加载,而不是从 apk 中加载。
    • 不,只有应用程序本身放置在 /data/data/packagename/ 中的文件进入该目录。应用程序未提取的应用程序资源和资产不会被提取。 APK 文件中的大部分资源和资产都可以就地使用,无需提取。
    • 我的应用程序play.google.com/store/apps/details?id=by4a.reflect 将向您展示存储在 APK 文件中的一些资源和资产。
    • 好的。所以我改变了我的问题:APK 中的 .dex 和 .so 文件保留在存储的 APK 中,即使它们是从其他目录中提取和使用的。在您卸载应用程序之前,是否会在系统的生命周期内再次使用原始的?
    • 仅供参考,您应该避免更改您的问题。如果问题得到解决,您应该接受答案。如果您还有其他问题,请单独发布。
    【解决方案2】:

    当你动态加载一个dex文件时,dalvik会在第一次加载时对其进行优化。您必须传递应用程序可以写入的目录,以便将缓存的 odex 放入其中,通常在应用程序的数据目录中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-25
      • 2012-01-21
      相关资源
      最近更新 更多