如何减小 apk 文件的大小?

How to reduce size of an apk file?

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

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

问题可能出在 support library。将 com.android.support:appcompat-v7:27.0.2 添加到空项目会使 APK 大小从 80 KB 增加到 1.3 MB。所以如果你的minSDK足够高,你不需要它的助手类,你可以去掉它。

您可以使用 APK Analyzer 查看 space 的实际情况。

当从 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 大小也会增加 rapidly。

去掉support库和constraint layout库,只用整个系统就可以得到一个非常小的apk api。

移除支持库后,你应该

  1. 使用Activity而不是AppCompatActivityYourActivity extends Activity

  2. 不要在您的 AndroidManifest.xml

  3. 中使用支持库中的任何主题
  4. 使用 FrameLayout 替换布局中的 ConstraintLayout

感谢发帖 alijandro, makovkastar and Sanjay Manjoka 个人。在阅读了您的答案并在互联网上苦苦挣扎后,我发现:

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