Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[问答] 如何缩减APK包大小? #51

Open
jasonross opened this issue Mar 12, 2015 · 18 comments
Open

[问答] 如何缩减APK包大小? #51

jasonross opened this issue Mar 12, 2015 · 18 comments

Comments

@jasonross
Copy link

No description provided.

@stackvoid
Copy link

这个问题实际上问的是:

如何正确高效使用 Lint 工具(或者别的优化工具如ProGuard)~

目前我主要用 Lint 工具(当然 Lint 工具还有别的强大功能,我只是用了两个):

  1. 查找没有引用的资源文件,清除然后给 apk 瘦身。
  2. 布局优化建议(这个可以直接用 Hierarchy Viewer)。

当然还有一个要点就是:清除一些没用的第三方库。

这篇文章或许能帮忙~
http://stackvoid.com/performance-tuning-on-android/

@yuchuangu85
Copy link

使用图片压缩工具对你apk中的资源文件中的图片进行压缩。一些纯色的图片用颜色值代替。

@jclick
Copy link

jclick commented Mar 12, 2015

proguard代码混淆 可以大大减小apk的大小

@jasonross
Copy link
Author

@henry12
Copy link

henry12 commented Mar 12, 2015

1、去除不再使用的资源
2、使用ProGuard来剔除不需要的代码
3、对最终的APK使用zipalign
4、选择合适的library

@junyuecao
Copy link

对不同平台进行分别打包,只引入本平台的.so文件,缺点是这个apk只能在一个平台上跑

@Jayin
Copy link

Jayin commented Mar 13, 2015

Android APK安装包瘦身

http://hukai.me/android-tips-for-reduce-apk-size/

代码

  • 保持良好的编程习惯,不要重复或者不用的代码,谨慎添加libs,移除使用不到的libs。
  • 使用proguard混淆代码,它会对不用的代码做优化,并且混淆后也能够减少安装包的大小。
  • native code的部分,大多数情况下只需要支持armabi与x86的架构即可。如果非必须,可以考虑拿掉x86的部分。

资源

  • 使用Lint工具查找没有使用到的资源。去除不使用的图片,String,XML等等。
    assets目录下的资源请确保没有用不上的文件。
  • 生成APK的时候,aapt工具本身会对png做优化,但是在此之前还可以使用其他工具如tinypng对图片进行进一步的压缩预处理。
  • jpeg还是png,根据需要做选择,在某些时候jpeg可以减少图片的体积。
    对于9.png的图片,可拉伸区域尽量切小,另外可以通过使用9.png拉伸达到大图效果的时候尽量不要使用整张大图。

策略

  • 有选择性的提供hdpi,xhdpi,xxhdpi的图片资源。建议优先提供xhdpi的图片,对于mdpi,ldpi与xxxhdpi根据需要提供有差异的部分即可。
  • 尽可能的重用已有的图片资源。例如对称的图片,只需要提供一张,另外一张图片可以通过代码旋转的方式实现。
  • 能用代码绘制实现的功能,尽量不要使用大量的图片。例如减少使用多张图片组成animate-list的AnimationDrawable,这种方式提供了多张图片很占空间。

@soyoungboy
Copy link

当然还有个在线压缩美工切图的网站:https://tinypng.com,强烈推荐。
当然还有对于第三方库的选择上,尽可能选择jar包小的,慎重呀
如此APK大小也减轻不少

@shawnlinboy
Copy link

Proguard 可以有效减少 APK 体积。
另外 gradle 1.8 之后支持 ShrinkResources 了,可以在打包的时候去掉没有被引用的 res。但要配合开启 Proguard 使用。

@rayboot
Copy link

rayboot commented Mar 16, 2015

图片资源转为webp,也能有效压缩体积

@samuelcai
Copy link

我写的,适合于iOS和Android,但偏iOS一些,供参考:
减小App大小:图片篇 http://blog.csdn.net/scai_suryani/article/details/44040917

@zmywly8866
Copy link

一个工程最占用资源的地方在于资源,资源的大头是图片,我的经验是:
1、用Lint检测工程中没有用到的资源,全部干掉;
2、对于没有用到过渡效果的图片,用tinypng全部压缩一遍,这个会大大降低APK文件的大小,墙裂建议使用;
3、对于有用到过渡效果的图片,用tinypng压缩会出现失真的现象,所以考虑将其转换为webP格式,SDK 在4.0以下需要用JNI自己编译支持webP格式图片的显示,4.0以上是可以直接支持的,png转webP格式可以用这个工具:isparta
4、用到的音频资源可以考虑用opus格式,不过这个需要Android音频接口支持才行,用这种可以可以在保证音频质量没有变化的情况下,大小缩小50%。

@snowdream
Copy link

http://jayfeng.com/2015/12/29/APK%E7%98%A6%E8%BA%AB%E5%AE%9E%E8%B7%B5/

APK瘦身实践

我觉得这个写的比较详细

@BradLeo
Copy link

BradLeo commented Jun 30, 2016

几个方面吧:
1、图片最占空间了,能用颜色搞定就用颜色写,我们做项目的时候基本上都这么来,好多图标都是画出来的。
2、没用的包,第三方引用什么的都删掉 我们到现在v4包都还用200k的精简包。
3、资源动态加载,这个是看到好些文章里写道,我自己项目中用到不多。
4、看自己app的侧重点 比如音频的app 那可以选择用高压缩率的音频格式来节约空间。

@TracyZhangLei
Copy link

TracyZhangLei commented Aug 15, 2016

写了个简单的脚本实现批量调用tinypng接口压缩图片,https://github.com/TracyZhangLei/pythons/blob/master/tinypng/tinyPics.py

@tanranran
Copy link

compile 'com.android.support:appcompat-v7
compile 'com.android.support:appcompat-v4
这两个包加起来有1.3M以上(打包后)版本越高的V7和V4,包越大。如果是非常小的项目,完全没有必要引用它俩。或者引用低版本的V7/V4

@farmerjohngit
Copy link

可以通过删除R.class文件来达到减少apk大小和dex数量
https://github.com/mogujie/ThinRPlugin

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests