2017-08-26 186 views
1

我正试图减少我的即时应用程序的大小。我设法将主模块分成几个较小的模块(功能和库)。一旦应用程序建立,apk文件的大小(启用缩小):4.9 MB(基本功能),5 MB(UI功能 - 活动,片段,接收器等)和1.3MB(项目详细信息功能)。问题是,我不知道我还能从模块中删除什么,因为使用最多大小的包是... com.google.android.gms.internal(下面的屏幕)。如何减少apk中的GMS大小

BaseFeature: enter image description here

UI功能: ui feature

恐怕即使我分裂这些模块多,与此库的问题依然存在。我真的很接近完成我的应用程序的即时应用程序,但由于尺寸太大,我无法上传这些文件。任何人都可以知道如何解决这个问题?

+1

如果没有看到Proguard配置,很难给出建议。确保你1)使用短包名称(一个符号左右)启用重新打包('-repackageclasses')2)去掉所有可能的调试属性(例如,默认的google proguard config保留所有注释:'-keepattribute * Annotation * ',但你可能可以没有他们的生活)。 3)不要有一些braindead库或Proguard配置文件,它可以让很多代码不被proguard处理。后者尤其重要:手动检查已编译的jar文件并确保将类最小化。 – user1643723

+0

看起来您在“Base”和“UI”功能中都有com.google.android.gms。*的副本。这不应该是必要的,因为基本特征中定义的任何类或资源都可以从其他特征访问。 – dchai

回答

1

通常,您可以对reduce APK size执行以下操作。

在文档范围内的方法。

  1. Reduce resource count and size

    其中一个简单的方法,让您的APK小是降低它包含了资源的 数量和规模。特别是,您可以删除您的应用不再使用的资源,并且可以使用 可伸缩的Drawable对象代替图像文件。

    • 删除未使用的资源
    • 最小化从图书馆资源利用
    • 只支持特定密度
    • 使用拖拉的对象
    • 重用资源
    • 从代码渲染
    • 紧缩PNG文件
    • C ompress PNG和JPEG文件
    • 使用WebP的文件格式
    • 使用矢量图形
    • 使用矢量图形的动画图像
  2. Reduce native and Java code

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

您的APK包含用户下载,但从来没有使用内容,如 区域或语言信息。要为您的用户创建最小的 下载,您可以将您的应用分成几个APK,并通过诸如屏幕尺寸或GPU纹理支持等因素区分 。

另一个参考Shrink Your Code and Resources

为了使您的APK文件尽可能小,应该启用 萎缩,除去在发布版本无用的代码和资源。 本页面描述了如何做到这一点,以及如何指定在构建期间保留或放弃哪些代码和 资源。