【问题标题】:How to reduce size of an apk file? [duplicate]如何减小apk文件的大小? [复制]
【发布时间】:2018-07-16 05:54:53
【问题描述】:

首先,不要建议我official documentationthis。当我们使用预定义的文本视图从 Android Studio 构建一个应用程序时,它只显示“hello world”,它会生成一个超过 1.2MB 的 APK。但是 Playstore 上的一些应用程序可用不到 500KB 并具有很多功能。我已经应用了 Android Studio 的所有功能,如 proguard、minifyEnabled 等,但这无济于事。那么,我怎样才能达到这种压缩水平呢?

【问题讨论】:

  • 考虑到大多数手机都是几GB的存储空间,你真的关心KB数量级的大小吗?
  • 默认情况下它包含支持库到项目中。只需创建一个没有活动的空白项目,它不会包含支持库。
  • @cricket_007 我说的是 APK 的预安装大小。我们的手机如何显示并不重要。
  • @VladMatvienko 兄弟,我已经提到 Playstore 上的一些应用程序有很多低于 1mb 的功能。然后,编译和构建 APK 看起来就像是跑题了。
  • 我建议你阅读this article

标签: android android-studio minify lint android-proguard


【解决方案1】:

减小 APK 大小的要点:
1.使用矢量可绘制
2.使用xml drawable创建简单视图
3. 使用 xml drawable 旋转图像以重复使用(例如,在箭头按钮的情况下)
4.通过代码创建drawable
5. 使用 aaptOptions { cruncherEnabled = false } 压缩图片
6.大图使用webP格式
7.避免枚举,使用@IntDef注解
8.在gradle中使用shrinkResources true 来移除未使用的资源
9. 在 gradle 中使用 resConfig “en” 来移除其他本地化

【讨论】:

    【解决方案2】:

    从 Android Studio 创建新项目时,IDE 会自动将一些依赖项添加到您的项目中。

    dependencies {
        // ...
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        // implementation 'com.android.support:appcompat-v7:26.1.0'
        // implementation 'com.android.support.constraint:constraint-layout:1.0.2'
        // ...
    }
    

    如果您捆绑support libraryconstraint layout library,即使您不添加任何代码,您的发布apk 大小也会迅速增加。

    如果你删除支持库和约束布局库,只使用所有系统api,你可以获得一个非常小的apk。

    删除支持库后,你应该

    1. 使用Activity 而不是AppCompatActivityYourActivity extends Activity

    2. 不要在您的AndroidManifest.xml中使用支持库中的任何主题

    3. 使用FrameLayout 替换布局中的ConstraintLayout

    【讨论】:

      【解决方案3】:

      问题可能出在support library。将com.android.support:appcompat-v7:27.0.2 添加到空项目中,APK 大小从 80 KB 增加到 1.3 MB。因此,如果您的 minSDK 足够高并且您不需要它的帮助类,则可以摆脱它。

      您可以使用APK Analyzer 查看实际占用空间的内容。

      【讨论】:

        【解决方案4】:

        感谢alijandromakovkastarSanjay Manjoka 各位发帖。在阅读了您的答案并在互联网上苦苦挣扎后,我发现:

        1. 从 build.app(Module: app) 中移除不必要的自动生成库,例如 ConstraintLayout、appcompat、junit 等。
        2. 在 build.gradle 的 defaultConfig 块下使用 resConfig "en"。
        3. 在 buildTypes 的发布块下的 build.gradle 中使用 shrinkResources true。
        4. 在 build.gradle 的 buildTypes 发布块下使用 minifyEnabled true。
        5. 使用 aaptOptions { cruncherEnabled = false } 压缩图片
        6. 对大图使用 webP 格式
        7. 避免枚举并使用@IntDef 注解
        8. 转到构建>分析 APK 并按确定。它显示了我们应用程序的状态,如下图所示。

        【讨论】:

        • 不要发布只是重复其他人已经说过的话的答案。相反,如果你想添加一些东西,你应该对现有答案进行投票并编辑它们
        • @TimCastelijns 感谢您的建议。每个人的答案都不完整,我发现了一些有用的东西。