APK性能优化-瘦身计划

apk分析

让我们在瘦身前先瞅一眼apk是什么,里面有啥:
这里是用的工具是Android studio里,build->Analyze apk 这个工具


apk分析

APK包结构如下:

  1. lib/:包含特定于处理器软件层的编译代码。该目录包含了每种平台的子目录,像armeabi,armeabi-v7a, arm64-v8a,x86,x86_64,和mips。这里其实占了很大体积,也是优化起来成效最好的部分。
  2. assets/:包含应用可以使用AssetManager对象检索的应用资源。
  3. res/:包含未编译到的资源 resources.arsc,主要有图片资源文件。
  4. META-INF/:包含CERT.SF和 CERT.RSA签名文件以及MANIFEST.MF 清单文件。
  5. resources.arsc:包含已编译的资源。该文件包含res/values/ 文件夹所有配置中的XML内容。打包工具提取此XML内容,将其编译为二进制格式,并将内容归档。此内容包括语言字符串和样式,以及直接包含在resources.arsc文件中的内容路径 ,例如布局文件和图像。
  6. classes.dex:包含以Dalvik / ART虚拟机可理解的DEX文件格式编译的类。
  7. AndroidManifest.xml:包含核心Android清单文件。该文件列出应用程序的名称,版本,访问权限和引用的库文件。该文件使用Android的二进制XML格式。

资源文件

资源文件的缩小主要还是对图片进行处理。在未学习之前,我的图片资源都是导出三种dpi的:


图片资源

看看!是不是很疯狂!我也觉得,同一个图片我要复制粘贴三次,又慢又占空间。想要瘦身的话,有两种方法:

  • WebP 谷歌提供的一种支持有损压缩和无损压缩的图片文件格式,而且可以提供比JPEG或PNG更好的压缩。
  • SVG 目前最最火热的图像文件格式了,它的英文全称为Scalable Vector Graphics,意思为可缩放的矢量图形。SVG是一种用XML定义的语言,用来描述二维矢量及矢量/栅格图形。

特点:

  • SVG:
    1.矢量图使用点和线来描述图形,所有文件会比较小,同时也能提供高清晰的画面。
    2.矢量图缩放自由且不会是真,完全适配于任何分辨率的屏幕。
    3.矢量图是以xml语言来描述的,所以它修改自如。
    4.矢量图色彩分辨率非常高清,同时支持滤镜。
    5.跨平台,因为矢量图是纯文本格式来描述的,所以不受平台的限制。
  • WebP:
    1.精细度不降低的前提下缩小图片体积;

我们先来说说简单的webp:

先说说简单的webp格式
目前Android studio已经支持了webp转换,所以只需要在文件点击右键然后covert to webp就可以了。点击之后会展示一个前后对比图:


webp

基本看不出有任何失真!!而且图片体积从362 KB缩小到了104 KB!使用方法解释超级简单,导入图片后直接把整个目录下的图片all covert就完事了!

再说说svg格式
svg很棒的地方就在于,把图片用xml代码表示了。在res上右键new一个vector asset。选择你的svg文件,然后就会自动生成一个xml文件


svg

svg.xml

svg比较适合与应用内小图标的使用,可以动态更改图标的颜色,背景色等等,想换图标颜色再也不用重新找美工导图了,代码就可以解决。
关于svg还有更多可拓展的使用,比如动画着色器之类的,这些都可以自己摸索。
将图片使用这两种格式替代之后,apk体积会减少很多,由于我的老项目太大了我懒得去弄,就不放对比了,新项目建议使用这种图片格式,让apk缩减到最小!

lib

首先看我们的lib目录
这里一大堆都表示的是CPU类型,当一个应用安装在设备上,不同CPU架构的Android手机加载时会在libs下找自己对应的目录,从对应的目录下寻找需要的.so文件。
但是你的APP真的需要适配这么多cpu么?答案当然不可能。


lib目录

Android 设备的CPU类型(ABIs)

  • armeabiv-v7a: 第7代及以上的 ARM 处理器。2011年15月以后的生产的大部分Android设备都使用它.
  • arm64-v8a: 第8代、64位ARM处理器,很少设备,三星 Galaxy S6是其中之一。
  • armeabi: 第5代、第6代的ARM处理器,早期的手机用的比较多。
  • x86: 平板、模拟器用得比较多。
  • x86_64: 64位的平板。

所以各位自己做取舍,我瞅了一眼微信的apk,他们只用了v7。这么大用户量的软件只用了v7,中小公司的话v7应该也是足够的,所以我只保留了v7一个。
这里在APP的build gradle里面添加

 ndk {
            //设置支持的so库架构
            abiFilters "armeabi-v7a"
        }

然后我们打包试一下:


lib瘦身

效果惊人哦!!!!!!!

19.9变成了11.2MB!!!!!

代码缩减

1.使用resConfigs去除无用语言资源

瞅一眼apk里面的语言文件,超级多种类,那我们肯定不能都用,所以我这里只保留中文和英文。


语言资源

解决办法:
在APP的build gradle里的defaultConfig加入下面代码

resConfigs "zh-rCN", "en-rUS"

重新打包后可以看到其余的语言被我们舍弃了,同时安装包少了几百K的大小,因为我的项目小没有乖乖使用@String所以效果不大,如果严格使用@String效果会更好。


2.开启混淆和minifyEnable,shrinkResources

混淆的作用不仅仅是混淆代码,还有压缩优化的功能,他会遍历所有代码并找出没有引用到的代码,这些代码不会生成在apk中;另外混淆的效果是使用简短的字母替代原来的类名属性名等,一定程度上也可以减小代码体积。
剩下两个是移除没有用过的资源,但是要慎重使用,如果是动态使用的文件有可能被删除,这一点我还没有仔细去测试,之后再详细测试一下。
然后混淆后打包会很久,我现在就是一直在打包......

//混淆
minifyEnabled true
// 移除无用的resource文件
shrinkResources true
minifyEnable true

差不多就这些了!over

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,185评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,652评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,524评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,339评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,387评论 6 391
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,287评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,130评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,985评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,420评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,617评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,779评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,477评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,088评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,716评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,857评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,876评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,700评论 2 354