您的位置:网站首页 > 源码环境 > 正文

如何进行APK瘦身

类别:源码环境 日期:2018-12-29 9:12:58 人气: 来源:

  7月25日,前乐视CEO梁军发布微博,称自己“时隔两年,再次有机会去参观FF”,同时还跟贾跃亭见面,梁军表示自己跟贾跃亭学到了很多东西,最后祝愿贾跃亭以及FF获得成功。

  APK的大小对于app载入速度、占用内存大小以及耗电量有着很大的影响。一般而言,用户并不太喜欢下载APK体积太大的app。尤其是对于流量、手机内存有限的用户来讲,太大的APK往往会让他们望而却步。那么如何让APK的体积降下来呢?

  想要对APK进行瘦身,你必须得先了解APK的组成结构,只有了解APK由哪些部分组成,你才能有所针对性的进行APK瘦身。

  从上图来看,占用空间的主要是代码、res 和 lib ,因为我的assets中没有放文件,所以看起来并没有占用什么空间,其实assets中文件放的多,一样会占用很大空间。所以APK瘦身时,主要就从代码、res 、 lib和assets这几个方面考虑。

  使用 lint 工具来检测res/中是否有没有使用到的资源。然而对于一些第三方库来说,使用lint可能无法检测到,我们可以使用shrinkResources来删除库文件中无用的资源,配合proguard压缩代码使用。

  移除未使用的备用资源。例如对于一些第三库来说,因为国际化的问题,它们可能会支持了几十种语言,但我们的应用可能只需要支持中文就行了,这时候我们就可以使用resConfig或resConfigs来解决。

  使用ProGuard压缩代码,然后配合shrinkResources使用,方法见shrinkResources的使用。然而ProGuard只能压缩库本身的一些没有用到的代码,但库内部本身可能仍依赖了其他的第三方库,对于这些库ProGuard却无法进行有效去除。

  很多第三方库会提供多种版本,例如完整版、精简版、针对某个功能的特殊版,你只需要选择能包含你需要功能的体积最小版本库。当然如果你能获得源码,自己提炼出你所需要的功能就更好了。

  形状颜色一样,但角度不一样的Image;可以使用rotate等来调整角度达到复用效果。例如:

  你也可以通过代码渲染来代替使用图片,例如使用自定义View绘制。图片减少了,APK自秦勇老婆王芳然瘦身了。

  AAPT工具会在构建期间自动对res/drawable/文件夹下的PNG图片资源做无损压缩。例如,一张true-color的PNG图片,如果它实际需要的颜色不大于256种,那么就有可能会被转换成一张8位的调色板图片(PNG8)。转换之后的图片质量未减却只占用更小的内存。

  你可以使用 WebP 来代替JPG和PNG图片。WebP 保留了JPG和PNG优点的同时,能提供更好的压缩,达到更小的体积。

  你可以使用矢量图形来绘制分辨率无关图标及其他可伸缩文件。整个屏幕那么大的清晰图片,如果使用矢量图可能只需要100-byte大小。然而使用矢量图形会让系统花更多的时间来进行绘制,所以最好只在比较小的images上使用矢量图。

  要确保能够了解自动生成的代码用途,例如有很多的protocol buffer tools会自动生成大量你可能用不到的代码。

  一个单独的枚举可以将apk增加1.0 到1.4 KB大小,对于复杂的系统或者共享库来说,累积下来可能会增加相当大的APK体积。如果可能的话,可以考虑使用@IntDef注解和ProGuard来剥离枚举并将它们转换为整数。这种类型转换保留了枚举的类型安全优势。

  如果你的APP使用native code 和 Android NDK,那么可以通过两种方法优化代码,达到减小APK大小的效果。

  在 Android 6.0 之前, so 文件会压缩到 apk 中,系统在安装应用的时候,会把 so文件解压到 data 分区,这样同一个 so 文件会有两份存在,一个在 apk 中一个在 data 区中, 导致多占用了一倍空间。 从 Android 6.0 开始,你可以在 AndroidManifest.xml 中使用一个新的属性:

  你的APP中可能会包含许多用户根本不会使用的内容,例如区域和语言信息。你可以根据屏幕尺寸或GPU纹理支持等因素针对性提供不同版本的APK。当用户下载APK的时候,会根据手机的特性和设置有针对性的下载特定版本APK,这样的话用户就不会下载到他根本不需要的内容。

  的话是从官网翻译过来的,看不太懂没关系,其实就是按需提供资源支持,根据手机的不同提供不同版本的APK,我们直接来看例子

  首先屏幕密度有三个版本(mdpi,x86_64,gralde还会生成一个包含所有屏幕密度资源的默认版本),ABI指令集有两个版本(gralde默认编译不会添加包含所有ABI指令集版本的APK,如果你想添加,需要在abi代码块中加上universalApk true),它们两两组合为6种。每个APK里只会包含它对应的资源,例如app-hdpiX86-debug.apk中只会存在屏幕密度为hdpi的资源以及X86的库文件。

  本文由来源于财鼎国际(www.hengpunai.cn)

0
0
0
0
0
0
0
0
下一篇:没有资料

网友评论 ()条 查看

姓名: 验证码: 看不清楚,换一个

推荐文章更多

热门图文更多

最新文章更多

关于联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助

CopyRight 2002-2012 技术支持 源码吧 FXT All Rights Reserved

赞助合作: