如何减less应用程序(.apk)大小
帮帮我!
当我在手机上安装我的应用程序进行testing时, 它显示为一个巨大的大小,11.35 MB 。 这是一个非常简单的应用程序,让用户浏览有趣的事实。 我能想到的唯一原因是在drawable中有14个JPEG文件作为fun-facts的背景图片。 这些平均大小约为500 KB。
我想调整我的应用程序的大小,以便用尽用户设备上的宝贵资源。 除了摆脱图片,有没有办法来优化apk文件的大小?
编辑:图片是我使用Android手机本身拍摄的照片。
我build议您尽可能压缩.jpg
文件,这将大大减less.apk
文件的大小。 免费的Paint.NET等工具可以帮助您做到这一点。 它有很大的调整选项。
其他答案提到缩小的图像。 您也可以考虑尝试使用ProGuard缩小您的字节码。 以下是关于将ProGuard应用到Android应用程序的文章 。
确保您的jpg没有以高于必要的分辨率存储。 一个不错的Android手机的屏幕分辨率为1920×1200或2560×1440(大约2015年) 800 x 480 ,所以你的背景不应该包含比这更多的像素(除非你的应用程序支持某种缩放)。 另外,背景照片? 如果没有,您可能会发现使用像svg这样的基于vector的图像格式,或者使用像gif这样的dynamic调色板格式,将会减小文件的大小。
UPDATE
随着Support Library 23.2的推出,现在您可以用SVG(w / or w / oanimation)replace许多Image资源,以进一步缩小apk大小。
原版的
这可能是一个迟到的答复,但可能有助于未来的用户。
参考这个链接 。 总结一下这个页面,它提到了下面的几个关键点,这将有助于减lessapk的大小:
- 使用ProGaurd
- 删除应用程序中的任何debugging信息 (诸如Log.i())之类的语句。 他们可以被包装在一个条件,只有在testing应用程序时才能启用。
- 使用推荐的媒体格式
- 图片:PNG orJPG
- audio:AAC
- video:H264 AVC
- 使用OptiPNG或PNGCrush 压缩图像
- 使用9patch来缩放图像
- 使用此工具 查找未使用的资源并将其删除 。
- 避免使用多个资源来实现相同的function。 资源不仅限于图像,还扩展到API。 有时一个单独的API可以提供多个结果,而不是使用两个或三个不同的API。 重复的string和资产也是浪费空间。
除了优化图像之外,我还发现validation您使用的支持库非常有用。 我有一个相对简单的API> = 10的应用程序目标平台,我的APK最终成为2.2M,或使用ProGuard 1.4M后。 当我查看APK时,代码是1.5M,并且包含了很多其他资源(abc_ *),我对此一无所知。
然后我发现这个: https : //developer.android.com/tools/support-library/features.html
事实certificate,我并不需要appcompat-v7,只支持-v4,而对我的依赖进行这种更改将APK大小缩减为1.7M(使用ProGuard为0.9M)。 可以理解的是,支持库带有很多额外的代码和资源,所以确保你只使用你需要的那些。
(尽pipe对于一个11M的应用程序来说,-0.5M并不重要,但是我在这里发布这个信息是因为我在search解决scheme时一直在这个页面上结束…)
- 使用tinypng压缩你的项目的PNG或JPG格式的图像文件,它可以大大减less图像的大小,而不会损失图像质量;
- 有些图片使用tinypng压缩可能会失真,可以转换
这些图像以webP格式,使用智图或iSparta可以将其他格式转换为webP; - 使用Lint勾选不使用资源并删除它;
还有一件事要添加图像文件的大小 – 不同的algorithm可以对最终的大小有显着的影响。 我发现雅虎的www.smushit.com比现在我的计算机上的压缩器和编解码器更有效(至less对于.png)。
我可以从经验中指出两件事。
- 如果你使用eclipse来创buildapk文件,那么资源是重复的(至less它发生在我的情况),你可以尝试使用ant和build.xml来创buildapk和比较大小。
- 还要考虑别名资源。 它的链接在这里 。
我知道我在这里迟到回答这个问题,但我减less我的应用程序的大小,使用下面的技术,所以我想与所有分享这些东西。
1) – 使用WebP图像而不是Jpeg图像,如果使用多个图像,它将对apk大小产生巨大的影响。
2) – 如果您在应用程序中使用简单的小图标,请使用VectorDrawables。
3) – 在xml中使用视图的tint属性,以避免多个相同的图标,但颜色不同。
searchDrawableTint和TintableImageview
4) – 使用9个补丁的图像,避免在应用程序代码中重复图像或任何东西。
以下是指减lessAPK大小的链接。
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
我认为这个post会给你一个更好的想法,所有可能的方法来减less你的apk大小的巨大利润。
我会给你一个相同的摘录。
- 只使用Google Play服务中所需的库。
- 将ProGuard应用到您的应用程序。
- 缩小和缩小。
- 采用vector绘图。
- 使用android lint。
- 根据体系结构拆分你的apk
- 在您的gradle文件中添加resConfigs以指定本地化语言。
这将删除所有其他string文件,这些文件可能已经被其他库甚至不支持的语言添加。
WebP图像格式:提供有损压缩(如JPEG)以及透明度(如PNG),但可以提供比JPEG或PNG更好的压缩
将图像转换为WebP
这里是你可以做的减less图像的构build大小(也可以为iOS工作)在这里我分享了称为“OPTIPNG”(你可以从这里下载),这将有助于我们特别减less了使用图像,这将减less我们正在使用的PNG的图像大小,而不会降低图像的质量(分辨率和颜色)。
例子 – 如果你的图片大小是closures的698 KB,那么它将简单的缩小到564 KB
这是OPTIPNG 0.7.5的执行步骤
1)OPTIPNG的terminal – > CD / YourLocalpath
2)input“./configure”
3)input“sudo make install”
应该立即进行心动训练
4)input“optipng /你的图片path
你会得到字节的结果,也可以检查你的大小
我使用了Trimage图像压缩器来压缩图像,并减小apk的大小。它具有良好的压缩率,易于使用,保留图像的质量,也可在Ubuntu中使用。除此之外,我启用了ProGuard,并在Lint问题上努力减lessAPK尺寸。
以下是减less应用程序大小的方法。 详细解释在下面的链接。
https://medium.com/@fahimsakri/put-your-apks-on-diet-cc3f40843c84#.m860q8s1u
Proguard的
vector绘制
APK分裂
优化PNG图像
删除未使用的资源
9个补丁的图像
压缩Jpeg图像
删除debugging信息
避免重复
广泛使用棉绒
尽可能重用资源
推荐的媒体格式
您可以通过del R.class减小apk大小,并将参考replace为常量。
看到这个: https : //github.com/mogujie/ThinRPlugin
APK包含您的移动应用程序所包含的所有东西(包括Java类文件,资源文件等等)的zip文件。
使APK变小的一个简单方法是减less包含的资源的数量和大小。 尤其是,您可以删除应用程序不再使用的资源,并且可以使用可缩放的可绘制对象来代替图像文件。
使用MinifyEnable true和ShrinkResources true
MinifyEnabled会减less你的代码压缩它。 而shrinkResources收缩资源。
要使用ShrinkResources,必须将minifyEnbled设置为true。
使用SVG图像,而不是JPG,以减lessapk的大小。 把你的图像文件在数据库..所以你的应用程序的用户可以从数据库中下载它,它会大大减less应用程序的大小..
- onConfigurationChanged没有被调用
- Progressbar与asyncTask结合使用
- java.lang.NoClassDefFoundError:com.google.android.gms.internal.zzmp
- 如何从软键盘上按下“完成”键
- 如何在Android中将文件写入外部公共存储,以便从Windows中可见?
- 如何将AIRPLANE_MODE_ON设置为“True”或ON?
- 在Android中禁用button单击声音
- 如何根据Android中的API级别进行条件invalidateOptionsMenu()调用?
- Android Studio / Intellij Idea:一个类的“目录”