公司的apk越做越大。。。
作为一个有追求的程序员,我觉得有必要给apk瘦身了。。。

优化之前,先来分析一下apk结构,下面附上一张apk结构图:

apk结构.png

由于我这个项目集成了百度地图、百度导航。。。所以assets和lib各自变态的占了12M+,有种蛋蛋的忧伤。。。
百度地图是在官网上按项目需求集成的,不需要的功能都没有集成进来,实在没什么优化的空间。。。

classes.dex文件有6.5MB,这个倒是可以优化。Facebook 开源了一个 Redex,用于 Android 字节码的优化,经过 Redex 转换后的 apk,体积变得更小,运行速度变得更快。不过在Github上看了一下,Redex目前只能在Mac和Linux上使用,Windows上无法使用,公司的电脑还没装虚拟机,只能等下次再用了。。。

至于资源文件,我之前用TinyPNG压缩过图片,所以图中资源文件并不算很大。这里附上TinyPNG的网址:https://tinypng.com/
除了压缩图片,还可以删掉一些没有用到的资源。用Android Studio打开项目,点击Analyze--》Run Inspection by Name--》搜索Unused resources,可以搜索出无用资源,删除无用资源(记得别误删友盟的资源...)。
网上有人说直接点击Refactor--》Remove Unused Resources直接删除无用资源。对于这个方法,我劝大家要慎重,因为我上次用这个方法把友盟的资源给删了,导致出现一大堆问题,后面又不得不把友盟的资源再补回去。。。

apk的其他文件也不算大,瘦身计划告一段落。

除了apk瘦身,性能优化也很重要。这里给大家安利一下阿里云的移动测试,我选择了深度性能测试。不测不知道,一测吓一跳。。。之前没发现的问题,这里都可以测出来,大家可以根据出现的问题修改代码。

apk优化暂告一段落,以后有时间再继续研究。。。

Android之apk优化的更多相关文章

  1. fir.im Weekly - 如何进行 Android App 性能优化

    关于 Android App 的优化,@anly-jun 用 3 个月完成了这一系列文章,从 性能分析工具 到 ANR .Layout .消除卡顿 到 内存优化.内存分析工具大概十五六篇,并对此做一个 ...

  2. Android UI性能优化实战, 识别View中的性能问题

    出自:[张鸿洋的博客]来源:http://blog.csdn.net/lmj623565791/article/details/45556391 1.概述 2015年初google发布了Android ...

  3. 教你使用Android SDK布局优化工具layoutopt

    创建好看的Android布局是个不小的挑战,当你花了数小时调整好它们适应多种设备后,你通常不想再重新调整,但笨重的嵌套布局效率往往非常低下,幸运的是,在Android SDK中有一个工具可以帮助你优化 ...

  4. 谈谈android 布局 的优化

    来自:http://www.cnblogs.com/youxilua/archive/2012/05/08/2489414.html 导言 设配android的屏幕一定是一个噩梦,就好比那些搞网页设计 ...

  5. Android的布局优化之include、merge 、viewstub

    以前在写布局的时候总是喜欢用自己熟悉的方式去写,从来也没有想过优化怎么的,后来又一次在上班的时候老大拿着我写的一个页面说我这个不行.我说这不是和设计图上的一模一样的么?怎么就不行了?然后他就跟我说了一 ...

  6. android应用的优化建议(转载)

    首先,这是我在http://www.oschina.net/translate/40-developer-tips-for-android-optimization看到的一片文章,感觉挺有道理的,所以 ...

  7. Android之ListView优化

    关于ListView几个方面的优化: ListView的大小设定固定值; 复用convertView, 使用ViewHolder提高在容器中查找组件的效率; 使用分页加载; 快速滚动时, item不显 ...

  8. Android APP 性能优化的一些思考

    说到 Android 系统手机,大部分人的印象是用了一段时间就变得有点卡顿,有些程序在运行期间莫名其妙的出现崩溃,打开系统文件夹一看,发现多了很多文件,然后用手机管家 APP 不断地进行清理优化 ,才 ...

  9. Android之——ListView优化

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47209253 作为client.其最基本的任务就是最直观的和用户交互.从serve ...

随机推荐

  1. javascript 获取用户当前 经纬度 位置

    <!DOCTYPE html> <html> <body><p>http协议支持部分浏览器</p><p>https支持所有浏览器 ...

  2. 如何在jsp和html页面上获取当前时间

    要想在JSP页面中获得当前时间并显示出来,首先得导入相关的Java包,然后创建Date对象. <%@page import="java.text.SimpleDateFormat,ja ...

  3. Jquery中的事件命名机制

    来源:aitangyong的专栏 JQuery中的bind()和unbind(),提供了事件的绑定和取消机制,既可以绑定html默认支持的事件,也能够绑定自定义的事件.JQuery支持自定义事件,这显 ...

  4. 自定义消息的操作方法ON_MESSAGE(..)

  5. 深入浅出javascript(六)对象

    2.为什么一切皆对象? <Javascript权威指南>解释了这个问题,问题的起源在于,如果typeof(字符串)返回的是string,并非object,那么为什么字符串也是对象呢? 简单 ...

  6. java静态代码块、普通代码

    参考文章:http://www.cnblogs.com/qinpengming/p/5227227.html Java中经常有一些静态块,这是用来在生成类之前进行的初始化,无论java还C++语言中的 ...

  7. Codeforces821B Okabe and Banana Trees 2017-06-28 15:18 25人阅读 评论(0) 收藏

    B. Okabe and Banana Trees time limit per test 2 seconds memory limit per test 256 megabytes input st ...

  8. Objective-C:01简介

    1.Objective-C简介 Objective-C是一种面向对象的计算机语言 OC不是一门全新的语言 C语言的基础上增加了一层最小的面向对象语法 OC完全兼容C语言 可以在OC代码中混入C语言代码 ...

  9. nodeclub config

    配置文件,本来想着分成好几个文件,放在一个文件夹中,后来觉得也没必要,原因是,配置文件看一遍也就记住了,分开反而显得繁琐,注释写清楚就好. // 路径模块 var path = require('pa ...

  10. RxSwift学习笔记4:disposeBag/scheduler/AnyObserver/Binder

    let disposeBg = DisposeBag() //直接在创建 //在 subscribe 方法中创建 let ofObserval = Observable.of("a" ...