【问题标题】:How to reduce GMS size in apk如何减少 apk 中的 GMS 大小
【发布时间】:2017-08-26 11:47:31
【问题描述】:

我正在尝试减小我的免安装应用 apk 的大小。我设法将主模块分成几个较小的模块(功能和库)。构建应用程序后,apk 文件的大小(启用缩小):4.9 MB(基本功能)、5 MB(ui 功能 - 活动、片段、接收器等)和 1.3MB(项目详细信息功能)。问题是我不知道我还能从模块中删除什么,因为使用最大尺寸的包是...... com.google.android.gms.internal(下面的屏幕)。

基本特征:

用户界面功能:

恐怕即使我再拆分这些模块,这个库的问题仍然存在。我真的很接近完成我的应用程序的即时应用程序,但由于文件太大,我无法上传这些文件。谁能知道如何解决这个问题?

【问题讨论】:

  • 如果没有看到你的 Proguard 配置,很难给你建议。确保您 1) 启用重新打包 (-repackageclasses) 并使用短包名称(一个符号左右) 2)去除所有可能的调试属性(例如,默认的 google proguard 配置保留所有注释:-keepattribute *Annotation*,但您可能没有他们也能活)。 3) 没有一些braindead 库或Proguard 配置文件,这会阻止大量代码被proguard 处理。后者尤其重要:手动检查经过保护的 jar 文件并确保将类最小化。
  • 看起来您在“基本”和“用户界面”功能中都有 com.google.android.gms.* 的副本。这应该不是必需的,因为在基本功能中定义的任何类或资源都可以从其他功能访问。

标签: android proguard android-proguard android-instant-apps


【解决方案1】:

一般来说,您可以对reduce APK size 执行以下操作。

文档范围内的方法。

  1. Reduce resource count and size

    缩小 APK 的简单方法之一是减少 它包含的资源的数量和大小。特别是,您可以 删除您的应用不再使用的资源,您可以使用 可伸缩的Drawable 对象代替图像文件。

    • 删除未使用的资源
    • 尽量减少图书馆的资源使用
    • 仅支持特定密度
    • 使用可绘制对象
    • 重用资源
    • 从代码渲染
    • 压缩 PNG 文件
    • 压缩 PNG 和 JPEG 文件
    • 使用 WebP 文件格式
    • 使用矢量图形
    • 对动画图像使用矢量图形
  2. Reduce native and Java code

    • 删除不必要的生成代码
    • 避免枚举
    • 减小本机二进制文件的大小
    • 删除调试符号
    • 避免提取本机库
  3. Maintain multiple lean APKs

您的 APK 可以包含用户下载但从未使用过的内容,例如 区域或语言信息。创建最小下载 您的用户,您可以将您的应用细分为多个 APK,以区分 受屏幕尺寸或 GPU 纹理支持等因素影响。

另一个引用Shrink Your Code and Resources

要使您的 APK 文件尽可能小,您应该启用 缩小以删除发布版本中未使用的代码和资源。 这个页面描述了如何做到这一点以及如何指定什么代码和 在构建过程中保留或丢弃的资源。

【讨论】:

    【解决方案2】:

    如果您使用 AdMob,play-services-ads:19.6.0 大约需要 2.1Mb。 如果适用于您的应用,您可以尝试精简版 ()

    https://developers.google.com/admob/android/lite-sdk

    【讨论】:

      最近更新 更多