【问题标题】:how to reduce android app size that is using pdf files in assets folder如何减小在资产文件夹中使用 pdf 文件的 android 应用程序大小
【发布时间】:2020-07-12 22:14:18
【问题描述】:

我正在使用资产文件夹中的 pdf 文件制作图书应用程序。压缩后所有文件为10-20mb。如何使应用程序的大小保持较小? 目前是 500+mb。

【问题讨论】:

  • 如果您的 PDF 文件被压缩到尽可能高的高度,那么如果不将 PDF 文件存储在云上并下载它们,您将无能为力。您可以考虑将它们存储在 Firebase 或您自己的服务器平台上。您需要从在线资源加载 PDF 列表,并在用户单击 PDF 后下载它们。

标签: android android-studio resize apk android-assets


【解决方案1】:

Android Studio 提供了一些工具:APK Analyser APK Analyzer 将拆解您的应用程序,并让您知道 .apk 文件中的哪个组件占用了较大的空间?让我们看看没有应用任何优化的防盗锁屏apk文件。

从 apk 分析器输出中,您可以看到应用程序原始大小约为 3.1MB。应用 Play 商店压缩后,应用程序大小约为 2.5 MB。 从屏幕截图中可以看出,有 3 个主要文件夹占用了应用程序的大部分大小。

  • classes.dex — 这是包含将在 DVM 或 ART 上运行的 Java 代码的所有字节码文件的 dex 文件。
  • res — 此文件夹包括 res 文件夹下的所有文件。大多数情况下,这将包含所有图像、图标和原始文件、菜单文件和布局。
  • resources.arsc — 此文件包含所有价值资源。该文件包含您在不同值文件夹下的所有数据。此资源包含字符串、尺寸、样式、整数、ID 等。

所以,现在您知道 APK 是由什么组成的了。让我们看看,我们如何通过一个一个组件的优化来减小应用程序的大小。

减少 classes.dex:

正如我们所讨论的,它包含所有的 java 代码。在构建应用程序时,gradle 将合并所有模块中的所有 .class 文件,并将这些 .class 文件转换为 .dex 文件,并将它们合并到单个 classes.dex 文件中。 单个 classes.dex 文件可以容纳大约 64K 的方法。如果超过此限制,则必须在项目中启用 multidexing。这将创建另一个 classes1.dex 文件以包含所有剩余的方法。因此 classes.dex 文件的数量取决于您拥有的方法数量。

如您所见,目前“防盗锁屏”包含 4392 个类和 29897 个方法。这个结果是没有应用proguard的。您有两个可以应用的默认 proguard 文件。

- proguard-android-optimize.txt

- proguard-android.txt

顾名思义“proguard-android-optimize.txt”是更激进的progurard配置。我们使用它作为默认的 proguard 配置。您可以在 /app 目录中的 proguard-rules.pro 文件中添加自定义的 proguard 配置

Compression Gist 1

通过将 minifyEnabled 设置为 true(在 Compression Gist 1 中),您是在告诉 proguard 删除所有未使用的方法、指令并精简 classes.dex 文件.

这是启用了 minify 的 APK 的结果,

正如您所见,通过在我们项目的每个模块中启用 proguard,我们可以将 classes.dex 文件大小减少近 50%。此外,您可以看到方法计数从 29897 减少到 15168(几乎 50%)。

大小从 3.1 MB 减少到 1.98MB。 (减少约 50%)

减少资源:

您的 apk 大小中的第二大组件是您的 res 文件夹,其中包含所有图像、原始文件和 XML。您不能添加/删除/修改您的 XML,因为它们包含您的布局。但是我们可以减少图片文件。

  • “shrinkResources” 属性将删除所有在项目中未使用的资源。通过添加以下行在您的 build.gradle 文件中启用此功能:

Compression Gist 2

  • “resConfigs” 属性将在构建应用程序时删除所有其他本地化资源。在我们的例子中,“防盗锁屏”只支持英文。虽然所有支持库都可能具有其他语言的本地化文件夹。我们不需要。因此,添加以下行以仅允许在 APK 文件中添加英文资源。

Compression Gist 3

  • Android Studio 2.3,并且你的应用最低版本为18或以上,你应该使用webp而不是png。 webp 图像的大小比 png 文件小,而且它保留了原始图像质量。更重要的是,Android 原生支持 webp 图像。因此,您可以像其他光栅图像一样在 ImageView 中加载 webp 图像。因此,您不必更改布局。

你可以从你的项目中选择drawable和mipmap文件夹,右击并选择convert to webp。这将打开下面的配置对话框。

按确定,它会将所有 png 图像一一转换为 webp 格式。如果 webp 图片比 png 大,Android Studio 会自动跳过该文件。

让我们看看最终结果:

  • res 文件夹的大小从 710KB 减少到 597KB。

通过应用上述简单技巧​​,应用程序大小从 3.19 MB 减少到 1.89 MB。

快乐编码?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    相关资源
    最近更新 更多