如何减小应用程序(.apk)大小

47

救命啊!

当我安装我的应用程序进行测试时,它显示的大小是巨大的,11.35 MB。它是一个非常简单的应用程序,让用户浏览有趣的事实信息。我能想到的唯一原因就是drawable中有14个JPEG文件,它们作为有趣事实的背景图片。其中这些图片的平均大小约为500 KB。

我想要缩小我的应用程序的大小,以免占用用户设备上的宝贵资源。除了删除图片之外,还有没有优化apk文件大小的方法呢?

编辑:这些照片是我使用Android手机拍摄的。


5
请尽可能地在Android应用程序中仅使用PNG格式的图片! - james
4
我曾试图将 JPEG 文件以 PNG 格式保存,但 PNG 文件的大小要大得多。所以不确定在这种情况下使用 PNG 会更好。 - OceanBlue
2
这是一个非常古老的帖子,我知道,但它出现在我的搜索结果中,我想补充一下:当您首次将.jpeg转换为.png时,png文件的大小可能会更大。但是,png文件非常“可压缩”,容易被压缩。像TinyPNG.com这样的易于使用的服务可以显著减小图像大小,特别是如果您的图像具有大块相似颜色。 - TBridges42
你也可以尝试这个:https://dev59.com/uJvga4cB1Zd3GeqP7cwv#49472760 - Aashish Kumar
23个回答

36

其他答案提到了缩小图像。你也可以考虑尝试使用ProGuard来缩小您的字节码。 这里有一篇文章介绍如何将ProGuard应用于Android应用程序。


缩小字节码对APK大小的影响几乎不会被注意到,特别是与削减10MB以上的JPEG文件大小相比。 - Christopher Orr
11
@Christopher:其他答案已经提到了缩小图片,但没有人提到缩小代码,所以我给OP提供另一个考虑的工具。 - Mauricio Scheffer
1
我明白了,但我猜没人提到使用ProGuard进行优化,因为对于这样的应用程序几乎没有任何好处。 - Christopher Orr
谢谢你的建议!这个应用程序中的代码相当简单和直接,但我会记住这个建议,以备将来之需。 - OceanBlue

24

我建议您尽可能地压缩 .jpg 文件,这将大大减小您的 .apk 文件大小。一个免费的工具,比如 Paint.NET,可以帮助您完成此操作。它有很多优秀的调整大小选项。


2
我会说减小JPEG大小(即JPEG质量),而不是压缩它们。JPEG图片并不是很有弹性。 - Christopher Orr
不错的观点,但是根据图像中的压缩级别,除了减小尺寸之外,可能还有额外的压缩空间。 - Nate
Nate Bross,Christopher,谢谢。我安装了Paint.NET(好工具!)。在保存时同时减少质量或调整大小选项,可以在不显著改变图片的情况下减小其尺寸。至于压缩选项,我不确定如何操作(我假设你不是指压缩到.7z或其他格式)。但这对我来说没问题。 - OceanBlue
1
大多数人在JPEG图像中看到“质量”设置,有些人正确地称之为压缩。这与您愿意失去多少信息有关。当您降低“质量”时,只是让JPEG算法决定它可以猜测颜色的像素。猜测越多,尺寸越小。 - Cycles McHurtz
@Tom Slick。好的,这很有意义。很好的信息。谢谢! - OceanBlue
请参考JPEG 优化工具?以获取其他推荐的工具。 - Joe

13

请确保您的JPG文件没有储存比必要更高的分辨率。一个好的Android手机的屏幕分辨率为1920x1200或2560x1440(约于2015年),因此您的背景不应该包含比这更多的像素(除非您的应用程序支持某种形式的缩放)。另外,您的背景是否是照片?如果不是,您可以尝试使用基于矢量图的格式,如SVG,或具有动态调色板的格式,如GIF,以进一步减小文件大小。


点赞 这些背景确实是照片。我在使用另一位用户建议的工具时遵循了您的建议,并将像素大小降至约800 x 480。感谢您的回答。 - OceanBlue
是的,你说得对。我已经更新了问题,使其更加准确。 - Dana the Sane

12

更新

随着Support Library 23.2的推出,现在你可以使用带或不带动画的SVG图像来替换许多图像资源,以进一步减小apk大小。

原始内容

这可能是晚回复了,但对于未来的用户可能会有帮助。

请参阅此链接。 总结页面,它提到了以下关键点,这些关键点将有助于整体减少apk大小:

  • 使用 ProGaurd
  • 删除应用中的任何调试信息(例如Log.i()之类的语句)。可以将它们包装在仅在测试应用程序时启用的条件中。
  • 使用推荐媒体格式
    • 图像:PNG或JPG
    • 音频:AAC
    • 视频:H264 AVC
  • 使用OptiPNGPNGCrush压缩图像
  • 使用9patch缩放图像
  • 使用此工具查找未使用的资源并将其删除。
  • 避免使用多个资源来实现相同的功能。资源不仅限于图像,还包括API。有时,一个单一的API可以提供多个结果,而不是使用两个或三个不同的API。重复的字符串和资产也是浪费空间的。

8

将图片转换为WebP格式,可大幅减小应用程序大小

这使得我的应用程序从40 mb减小到了25 mb

步骤:

  • 右键单击res
  • 转换为WebP

作用: 将png格式的图片转换为WebP格式,同时不会破坏其质量。


enter image description here


6
除了优化图像外,我还发现验证您使用的支持库非常有用。我的应用程序相对简单,目标平台为API >= 10,但我的APK最终达到了2.2M,在使用ProGuard后,大小为1.4M。当我查看APK时,代码占1.5M,还包括了许多我不知道的其他资源(abc_*)。
然后我找到了这个链接:https://developer.android.com/tools/support-library/features.html 原来我不需要appcompat-v7,只需要support-v4,将依赖项更改为此后,APK大小减小到了1.7M(使用ProGuard后为0.9M)。可以理解的是,支持库会携带许多额外的代码和资源,因此确保您仅使用所需的库可能会有所帮助。
(即使对于一个11M的应用程序来说,-0.5M也不算太大,但我在这里发布此内容是因为在寻找解决方案时,我一直在这个页面上浏览...)

4
您好,以下是您需要翻译的内容:

四种方法,使您的应用程序大小从11.35 MB减小到约5 MB。

第一步,通过Android Studio中内置的App分析器(App Analyzer)检查应用程序组件,只需点击顶部的“Build”然后点击“Analyze APK”即可。它会显示您的apk正在使用的所有组件。

  1. 启用Proguard
  2. 启用ShrinkResource
  3. resConfigs(命名为,如果您的应用程序仅使用一种语言例如英语,则简单地指定resConfigs“en”)
  4. 将所有图像从.png或.jpg转换为webp格式(非常重要)。

实现这些步骤的方法:

1&2.对于Proguard和ShrinkResource

在gradle中,只需添加

               release {
                       minifyEnabled true
                       proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                       shrinkResources true
                }
  1. For resConfigs

        defaultConfig {
        applicationId "com.goparties.gpuser"
        minSdkVersion 19
        targetSdkVersion 27
        resConfigs "en"
    

    }

  2. TO convert all Images from .png or.jpg to webp

非常简单的过程:只需右键单击drawable文件夹(drawable, drawable-hdpi, drawable-xhdpi等),然后单击convertToWebP(最后一个选项)。
最小SDK版本应为18。
这里我们开始:现在分析您的应用程序大小。
嘿!!!成功了!!!

4
  • 使用Tinypng压缩您项目中的png或jpg格式图像文件,它可以大幅减少图像的大小而不会损失图像质量;
  • 有些图片使用Tinypng压缩可能会出现畸变,您可以将这些图片转换为webP格式,使用智图iSparta可以将其他格式转换为webP;
  • 使用Lint检查未使用的资源并将其删除;

3

关于图片文件大小,还有一件事要补充 - 不同的算法对最终大小会产生显着影响。我发现雅虎的www.smushit.com对.png格式的图片比我电脑上的压缩器和编解码器更有效。


有趣。谢谢信息! - OceanBlue
不幸的是,雅虎在很短的时间内关闭了Smushit的托管。有许多替代方案,例如https://kraken.io/web-interface、https://tinypng.com/、http://nitrosmush.com/。我还没有进行比较,但看到有一个网站认为TinyPNG比Kraken更适合最终文件大小。 - ProjectJourneyman

2

我知道我回答这个问题有点晚,但是我使用以下技术来减小我的应用程序大小,所以我想与大家分享这些内容。

1)- 使用WebP图像而不是Jpeg图像,如果您使用多个图像,则对apk大小会产生巨大影响。

2)- 如果您的应用程序中使用简单的小图标,请使用VectorDrawables。

3)- 在xml中使用View的tint属性,以避免多个相同的图标但颜色不同。

搜索DrawableTint和TintableImageview

4)- 使用9-patch图像,避免在应用程序代码中重复图像或任何内容。

以下是减小APK大小的参考链接。

https://developer.android.com/topic/performance/reduce-apk-size.html

https://developer.android.com/studio/build/configure-apk-splits.html#configure-split

https://developer.android.com/training/multiple-apks/index.html


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