一、使用APK Analyzer分析您的APK
Android Studio提供了一个简单的工具:APK Analyzer。APK分析仪将会检测您的应用程序,并让您知道.apk文件中的哪个组件占用较大的空间?
从截图中可以看出,主要有3个文件夹占用了大部分的应用程序大小。
classes.dex - 这是dex文件,其中包含将在您的DVM或ART上运行的所有Java代码的字节码文件。
res - 此文件夹包含res文件夹下的所有文件。大多数情况下,这将包含所有图像,图标和原始文件,菜单文件和布局。
resources.arsc - 此文件保存值资源。此文件包含您的不同值文件夹下的所有数据。此资源包含字符串,维度,样式,整数,ids等。
现在我们已经分析出apk中占空间的文件和文件夹,接下来我们一步一步来减少他们的大小。
二、减少dex文件大小
在构建应用程序时,gradle将组合所有模块的所有.class文件,并将.class文件转换为.dex文件,并将它们封装在单个classes.dex文件中。
单个classes.dex文件可以容纳大约64K个方法。如果超过此限制,则必须在项目中创建另一个classes1.dex文件以包括所有剩余的方法。因此,classes.dex文件的数量取决于你拥有的方法的数量。
-
- 你可以看到当前的“防盗屏幕锁”应用包含4392个类和29897个方法。这个结果是可能没有应用proguard。您有两个可以应用的默认proguard文件。
proguard-android-optimize.txt
proguard-android.txt
顾名思义,“ proguard-android-optimize.tx t”是优化的进阶配置。我们使用它作为默认的proguard配置。您可以在/ app目录中的proguard-rules.pro文件中添加自定义proguard 配置。
- /build.gradle
-
release { //Enable the proguard minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),"proguard-rules.pro" //Other parameters debuggable false jniDebuggable false renderscriptDebuggable false signingConfig playStoreConfig //Add your own signing config pseudoLocalesEnabled false zipAlignEnabled true }
- 通过将minifyEnabled设置为true,是告诉Proguard删除所有未使用的方法和类,以此来减少classes.dex文件大小。
-
- 可以看到经过优化后的dex文件中类和方法明显减少,dex大小也减少了。
-
三、减少res
apk文件中的第二大占空间文件夹是res文件夹,其中包含所有图像,原始文件和XML。您不能添加/删除/修改您的XML,因为它们包含您的布局。但是我们可以减少图像文件。
“ shrinkResources ”属性将删除所有那些在项目中不会使用的资源。在您的build.gradle文件中添加以下行:
-
在构建应用程序时, “ resConfigs ”属性将删除所有其他本地化资源。在我们的例子中,“防盗屏幕锁”只支持英文。而所有支持库可能具有其他语言的本地化文件夹。我们不需要 所以,添加以下行,只允许在APK文件中添加英文资源。release{ //... //... shrinkResources true //... }
-
对于 res 文件夹,通常占空间最大的就是图片了。如果你的 Android Studio 为 2.3,并且项目的 minimum version 为 18 或以上,应该使用 webp 而不是 png 图片。webp 图片有更小的体积,图片质量还没有什么损失。我们可以选中 drawable 和 mipmap 文件夹,右键后选择 convert to webp,将图片转为 webp 格式。defaultConfig { //strip other than english resources resConfigs "en","zh"//仅支持中英文 }
-
- 按【确定】,它将一个一个地将所有的png图像转换为webp格式。如果webp图像的尺寸比png大,Android Studio会自动跳过该文件。
- 总结:
- 1.在发行版构建配置(release)中添加minifyEnabled属性为true,启用proguard。
2.在发行版构建配置(release)中,启用shrinkResources,删除不使用的文件。
3.通过在“resConfigs”中自定义设置所需要的语言配置资源。
4.将所有图像转换为webp或vector drawables(矢量图)。
本文介绍如何通过优化配置、清理未使用的资源及转换图片格式等手段,显著减小Android应用程序的APK文件大小。

326

被折叠的 条评论
为什么被折叠?



