如何减小apk文件的大小?

13

首先,不要向我建议官方文档这个。当我们在Android Studio中构建一个预定义的文本视图只显示“hello world”的应用时,它会生成一个超过1.2MB的APK文件。但是一些在Play Store上的应用程序拥有许多功能,却只有不到500KB的大小。我已经使用了Android Studio的所有功能,如proguard,minifyEnabled等,但这并没有帮助。那么,我该如何实现那种级别的压缩呢?


1
考虑到大多数手机都有几个GB的存储空间,你真的关心KB级别的大小吗? - OneCricketeer
1
默认情况下,它会将支持库包含到项目中。只需创建一个没有活动的空白项目,它就不会包含支持库。 - Vladyslav Matviienko
@cricket_007,我在说的是APK的预安装大小。我们手机如何显示并不重要。 - Rohit Singh
@VladMatvienko 兄弟,我已经提到Play商店上有一些应用程序在1MB以下拥有很多功能。然后,编译和构建APK看起来像是离题的话题。 - Rohit Singh
3
我建议你阅读这篇文章:https://fractalwrench.co.uk/posts/playing-apk-golf-how-low-can-an-android-app-go/。 - Exerion
4个回答

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

7
从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'
    // ...
}

如果您将“支持库”和“约束布局库”捆绑在一起,即使您没有添加任何代码,您的发布APK大小也会迅速增加。
如果您删除支持库和约束布局库并仅使用所有系统API,则可以获得非常小的APK。
删除支持库后,您应该:
1. 使用Activity而不是AppCompatActivity,YourActivity extends Activity 2. 不要在AndroidManifest.xml中使用支持库中的任何主题 3. 在您的布局中使用FrameLayout来替换ConstraintLayout

6
问题可能出在支持库中。将com.android.support:appcompat-v7:27.0.2添加到一个空项目中,会将APK大小从80 KB增加到1.3 MB。因此,如果您的minSDK足够高并且不需要它的辅助类,则可以摆脱它。
您可以使用APK分析器查看实际占用空间的内容。

-2

感谢 alijandromakovkastarSanjay Manjoka 的分享。在阅读了你们的答案和苦苦搜索互联网后,我发现:

  1. 从build.app(模块:app)中删除不必要的自动生成库,如ConstraintLayout、appcompat、junit等。
  2. 在defaultConfig块下的build.gradle中使用resConfig "en"。
  3. 在release块的build.gradle中使用shrinkResources true。
  4. 在release块的build.gradle中使用minifyEnabled true。
  5. 使用aaptOptions { cruncherEnabled = false }来压缩图片。
  6. 对于大型图片,请使用webP格式。
  7. 避免使用枚举,而是使用@IntDef注解。
  8. 转到Build>Analyze APK并按OK。它会显示我们应用程序的状态,如下图所示。Analyze APK

1
不要发布重复他人已经说过的答案。相反,您应该为现有答案投票并在需要添加内容时编辑它们。 - Tim
@TimCastelijns 谢谢你的建议。虽然每个人的答案都不完整,但我在其中找到了有用的东西。 - Rohit Singh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接