使用ClassyShark压缩你的项目
- 原文链接 : Shrinking Your Build With No Rules
 
and do it with Class(yShark)- 原文作者 : Roberto Orgiu
 - 译文出自 : 开发技术前线 www.devtf.cn
 - 转载声明: 本译文已授权开发人员头条享有独家转载权,未经同意,不得转载!
 - 译者 : XWZack
 - 校对者: Mr.Simple
 - 状态 : 校对中 `
 
近期,我们的项目中用到了一个重要的框架。它为我们的产品提供了一个非常关键的功能。
你能够想象一下,这个框架的SDK是相当巨大的,它包括45K的方法:这足以使我们的项目(已经用到了Support Library和Play Services)产生使用MultiDex分包的冲动。
深入引用库
去掉引用库中不须要的部分是相当简单的,可是理解怎样修剪上面提到的框架又是另外一回事了:该框架须要作为我们项目的子模块被引入,从而使4个.so文件和3个.jar包被正确关联。在特定平台上构建的本地库带有一个.so拓展文件,这个文件通常放置在与系统架构,诸如x86或armeabi有关的文件夹中。
如今唯一的选择就是让这个框架脱离ProGuard的混淆范围,可是这样一来,即便不用MultiDex分包。至少终于APK的大小也会达到将近50MB。也就是说,这样做的效果肯定不理想:每当我们公布更新,全部用户必须下载整个APK,之后APK被解压。并在每一个设备上占用很多其它的空间。而这些空间我们本不须要占用。
曾经的处理方法
假设放在几个星期前,我们可能会这样处理:用ApkTool反编译每一个引用库。手动查找全部的引用,然后用Atom或者Sublime Text浏览每一个文件。假设真的这么做了,可能会浪费大量的时间:由于在反编译APK的时候,ApkTool是一个非常棒的工具。但对于这样的特殊情况。我们须要一个更灵活。可能也更有帮助的工具。
ClassyShark介绍
幸运的是,有这样一个工具:ClassyShark。
这个软件是正是我们所须要的:通过简单地打开菜单根文件夹的.jar。我们能够非常easy地跟踪每一个被我们调用的方法的依赖关系。差点儿就像是用IDE浏览源码。

比如,通过双击反编译库中声明的类型,就能够轻松地打开了这个类,并跟踪相关的依赖列表。
此外,假设你由于某种原因无法找到想要的文件。通过窗体顶部的大写和小写敏感的输入框你总能搜到你想要的类。
在ClassyShark的帮助下,我们能够“轻松地”获取我们须要保存的全部依赖。并在非常短的时间内为ProGuard加入正确的规则,使我们从令人头疼的手动跟踪依赖链接,甚至编译一遍仅仅是想看看少了哪些引用中挽救出来。
结语
不幸的是,我们无法摆脱MultiDex库,但我们的确缩小了我们的项目。而且我们发行版本号的APK大小。如今大概13 MB。相比于初始大小降低了约75%。
就算没有完美解决,也算得上是功德圆满了。
感谢我的同事 Giuseppe和我的朋友 Boris, Mario 和 Sebastiano校对这篇文章。
使用ClassyShark压缩你的项目的更多相关文章
- webpack压缩图片之项目资源优化
		
webpack打包时,会根据webpack.config.js 中url-loader中设置的limit大小来对图片进行处理,小于limit的图片转化成base64格式,其余的不做操作.对于比较大的图 ...
 - JS项目快速压缩(windows平台)
		
问题 当下JS项目都有node_modules,从而项目文件多,容量大. 如何快速压缩一个JS项目? 方法 首先对JS项目安装生产环境的依赖npm install --production. 这时不要 ...
 - 【C#公共帮助类】WinRarHelper帮助类,实现文件或文件夹压缩和解压,实战干货
		
关于本文档的说明 本文档使用WinRAR方式来进行简单的压缩和解压动作,纯干货,实际项目这种压缩方式用的少一点,一般我会使用第三方的压缩dll来实现,就如同我上一个压缩类博客,压缩的是zip文件htt ...
 - Alpha阶段项目Postmortem
		
以下对成员名字的简称: 陈鸿超 = 陈1 陈彦吉 = 陈2 石浩然 = 石 韩青长 = 韩 1. 设想和目标 1.1 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? ...
 - [转]Android开源项目第二篇——工具库篇
		
本文为那些不错的Android开源项目第二篇--开发工具库篇,主要介绍常用的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容.多 ...
 - Android开源项目分类汇总
		
目前包括: Android开源项目第一篇——个性化控件(View)篇 包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView. ...
 - Android开源项目(二)
		
第二部分 工具库 主要包括那些不错的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容.多媒体相关及其他. 一.依赖注入DI 通过 ...
 - GitHub上史上最全的Android开源项目分类汇总  (转)
		
GitHub上史上最全的Android开源项目分类汇总 标签: github android 开源 | 发表时间:2014-11-23 23:00 | 作者:u013149325 分享到: 出处:ht ...
 - 【Android】Android开源项目分类汇总
		
第一部分 个性化控件(View) 主要介绍那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.Pro ...
 
随机推荐
- php实现简单算法3
			
php实现简单算法3 这篇文章主要介绍了PHP经典算法集锦,整理了各种常见的算法,包括排序.查找.遍历.运算等各种常见算法原理与实现技巧,需要的朋友可以参考下 1.首先来画个菱形玩玩,很多人学C时在书 ...
 - LinkCutTree详解
			
LCT详解 没有比这再详细的了, 相信我
 - Linux下截图技巧
			
在需要Linux显示图片的场合,最普通的方法,会考虑用数码相,或是用Vmware,或VPc来抓拍,这样以来会比较麻烦,Linux也自带了些工具例如Gimp,ksnapshot这里我介绍一 ...
 - HDU 1716 排列2
			
排列2 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
 - Markdown最简单常用的语法
			
1,文本强调: 文本倾斜,*我是倾斜的文本* 文本加粗,**我是加粗的文本** 文本删除线,~~带删除线的文本~~ 2,链接,分为行内式与参数式,参数式多用于在文章中多次使用相同的链接 行内式写法:[ ...
 - jq实现回车键执行方法
			
$(function(){ $(document).keypress(function (e){ if(e.keyCode == 13){ //执行你想执行的方法,keyCode代表不同的按键 } } ...
 - vue脚手架3.0的搭建
			
一.安装node 打开cmd输入node -v查看是否安装成功 显示node版本号表示安装成功,显示‘node’不是内部或外部命令表示未安装node.node安装地址:http://nodejs.cn ...
 - Activemq去除认证
			
0.背景介绍 由于项目安全性的约束,不能在配置文件中暴露一些密码信息. 默认情况下,ActiveMQ在进行接发消息的时候会用户认证.通过ActiveMQ-client初始化ActiveMQConn ...
 - centos7基础配置
			
记录虚拟机安装完成后的初始配置: 1.网络: 桥接方式,设置静态ip,与物理机同一网段 Ip配置 配置完成 service network restart ,重启网络后 物理机可ssh连接虚拟机系统. ...
 - Interrupt distribution scheme for a computer bus
			
A method of handling processor to processor interrupt requests in a multiprocessing computer bus env ...