【问题标题】:Determine reason for odex file size bloat确定 odex 文件大小膨胀的原因
【发布时间】:2025-11-25 13:55:02
【问题描述】:

我的 apk 是 13MB,安装时占用空间是 25MB。但是,在进行了一些更改(添加库、创建模块和更好地组织应用程序)之后,apk 大小增加到 14MB,而 odex 文件现在是 56MB。有什么方法可以确定大小增加的原因吗?

我有一个根设备。因此,如果有的话,我也可以使用比传统方法更多的方法。我检查了几个博客和论坛。都解释了 odex-ing 和 deodex-ing 相关的功能。

EDIT:odex 文件的大小随时间增加。 (现在 25MB 到 81MB)。

This SO Q/A 解释了什么是 odex,但我找不到任何地方解释 odex 文件(因为没有更好的词)增长

一种可能的选择是,当使用应用程序的资源时,应用程序 odex 文件会生成更多引用以保持启动时间恒定/更快?

编辑 2:因为很多人通过建议我检查我的库/依赖项并减少它们来回答这个问题。 我想强调观察。 在应用程序的接下来的几次启动中安装后文件大小会增加。如果是因为添加库,APK 大小会增加,这是完全可以理解的。其余文件(.db,共享首选项等)的大小会增加,即预期的。 我无法弄清楚为什么 .odex 在安装后会增加,并且每次启动后都会增加。这种大小的增加适用于 .odex 文件。

我已经检查了这些文件,因为我使用的是 root 设备。

【问题讨论】:

  • 尝试反编译这两个 apk 并检查它们的大小增加
  • 做到了。就像我说的 apk 大小是一样的。通过反编译,classes.jar 的大小也相似。它只是大小不同的 .odex 文件
  • 您使用的是哪个设备和 Android 版本?随着时间的推移,增长如何演变?它是否继续,是否有稳定?
  • 普通的第三方应用没有odex文件。您如何获得应用程序的大小?来自设置?
  • @cuihtlauac 不,它在 3~4 次应用程序启动后达到最大值。基于此,我可以(毫无根据地)得出结论,这是一种索引功能?

标签: android


【解决方案1】:

它增长是因为您添加了库。也许您只需要库中的 1 个函数,但您已经添加了包含大量资源和函数的整个库,因此 apk 增长了。 关于时间增加:您的程序(或您使用的库)可以缓存图像、网络请求、写入数据库等,因此程序的大小会增加。

【讨论】:

  • 请查看上一个答案的评论。应用下载后大小不断增加。
  • 正如我在回答中所说,您的程序(或您使用的库)可以缓存图像、网络请求、写入数据库等,因此程序的大小会增加。
  • 是的,但这会占用.db文件或其他此类文件夹所占用的空间。这将计为数据。下载的图像/外部数据库等静态资源,甚至共享首选项等都存储在外部.odex 文件。
  • 关于臃肿的库,Proguard 也去掉了未使用的方法。所以 apk 大小的增加不可能是因为这个。
【解决方案2】:

我相信它会随着 APK 文件大小的增长而增长,主要是因为添加了库、图像资源等。

您可以尝试使用ProGuard 缩小您的 APK 大小,也许这样 odex 文件也会缩小。

【讨论】:

  • 就像我说的,大小随着时间的推移而增加 应用程序被下载之后。之后没有添加任何库/图像资源。所以proguard/adding 库不应该对这种情况产生影响
【解决方案3】:

尝试在 gralde 构建文件中设置 shrinkResources true 以删除未使用的资源

【讨论】:

  • 这会导致 apk 大小变小,请检查问题的编辑以获取更多上下文。
【解决方案4】:

问题是

进行一些更改(添加库、创建模块和 更好地组织应用程序

现在,想想这个。

您添加不同的库。 当库是外部或第三方库时,代码会与您的 apk 一起打包。 但是当库是 设备上已经可用的 Android 框架库时,它们不会被捆绑在apk中。但是这些将包含在 odex 文件中,这就是您看到膨胀的原因。

所以我在这里的假设是你使用的附加模块和库有很多新的系统库。或者您在内部使用的库使用系统库。您可以通过尝试删除或使用这些库的最小版本来分析这个方向,并查看 odex 文件大小受到影响。

chat中的解释

【讨论】:

  • 你能看到第二次编辑一次吗?我认为这应该有助于解释这种情况。
  • 这正是我试图解释的。所以已经打算在手机上使用的 android 库不会被打包在 apk 中。但是在创建 odex 文件时,设备上的 android 操作系统中已经包含库。
  • 第三方库 unike android 系统库并不意味着在设备上,因此它们将被打包在 apk 中。但不是 android 系统库。
  • 如果可能的话,与您在看到膨胀之前添加的库共享列表库和模块,并尝试断言我的理由是否正确。
  • > 所以已经打算在手机上使用的android库将不会打包在apk中。但是在创建 odex 文件时,会从设备上的 android 操作系统中已经包含的库中包含。,你有任何官方来源吗?至于添加库,它将一个大模块(应用程序)分解为 2 个模块。这一切都改变了
最近更新 更多