近期,我们的项目中用到了一个重要的框架。它为我们的产品提供了一个非常关键的功能。

你能够想象一下,这个框架的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压缩你的项目的更多相关文章

  1. webpack压缩图片之项目资源优化

    webpack打包时,会根据webpack.config.js 中url-loader中设置的limit大小来对图片进行处理,小于limit的图片转化成base64格式,其余的不做操作.对于比较大的图 ...

  2. JS项目快速压缩(windows平台)

    问题 当下JS项目都有node_modules,从而项目文件多,容量大. 如何快速压缩一个JS项目? 方法 首先对JS项目安装生产环境的依赖npm install --production. 这时不要 ...

  3. 【C#公共帮助类】WinRarHelper帮助类,实现文件或文件夹压缩和解压,实战干货

    关于本文档的说明 本文档使用WinRAR方式来进行简单的压缩和解压动作,纯干货,实际项目这种压缩方式用的少一点,一般我会使用第三方的压缩dll来实现,就如同我上一个压缩类博客,压缩的是zip文件htt ...

  4. Alpha阶段项目Postmortem

    以下对成员名字的简称: 陈鸿超 = 陈1 陈彦吉 = 陈2 石浩然 = 石 韩青长 = 韩 1. 设想和目标 1.1 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? ...

  5. [转]Android开源项目第二篇——工具库篇

    本文为那些不错的Android开源项目第二篇--开发工具库篇,主要介绍常用的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容.多 ...

  6. Android开源项目分类汇总

    目前包括: Android开源项目第一篇——个性化控件(View)篇   包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView. ...

  7. Android开源项目(二)

    第二部分 工具库 主要包括那些不错的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容.多媒体相关及其他. 一.依赖注入DI 通过 ...

  8. GitHub上史上最全的Android开源项目分类汇总 (转)

    GitHub上史上最全的Android开源项目分类汇总 标签: github android 开源 | 发表时间:2014-11-23 23:00 | 作者:u013149325 分享到: 出处:ht ...

  9. 【Android】Android开源项目分类汇总

    第一部分 个性化控件(View) 主要介绍那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.Pro ...

随机推荐

  1. php实现简单算法3

    php实现简单算法3 这篇文章主要介绍了PHP经典算法集锦,整理了各种常见的算法,包括排序.查找.遍历.运算等各种常见算法原理与实现技巧,需要的朋友可以参考下 1.首先来画个菱形玩玩,很多人学C时在书 ...

  2. LinkCutTree详解

    LCT详解 没有比这再详细的了, 相信我

  3. Linux下截图技巧

           在需要Linux显示图片的场合,最普通的方法,会考虑用数码相,或是用Vmware,或VPc来抓拍,这样以来会比较麻烦,Linux也自带了些工具例如Gimp,ksnapshot这里我介绍一 ...

  4. HDU 1716 排列2

    排列2 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  5. Markdown最简单常用的语法

    1,文本强调: 文本倾斜,*我是倾斜的文本* 文本加粗,**我是加粗的文本** 文本删除线,~~带删除线的文本~~ 2,链接,分为行内式与参数式,参数式多用于在文章中多次使用相同的链接 行内式写法:[ ...

  6. jq实现回车键执行方法

    $(function(){ $(document).keypress(function (e){ if(e.keyCode == 13){ //执行你想执行的方法,keyCode代表不同的按键 } } ...

  7. vue脚手架3.0的搭建

    一.安装node 打开cmd输入node -v查看是否安装成功 显示node版本号表示安装成功,显示‘node’不是内部或外部命令表示未安装node.node安装地址:http://nodejs.cn ...

  8. Activemq去除认证

    0.背景介绍 由于项目安全性的约束,不能在配置文件中暴露一些密码信息.   默认情况下,ActiveMQ在进行接发消息的时候会用户认证.通过ActiveMQ-client初始化ActiveMQConn ...

  9. centos7基础配置

    记录虚拟机安装完成后的初始配置: 1.网络: 桥接方式,设置静态ip,与物理机同一网段 Ip配置 配置完成 service network restart ,重启网络后 物理机可ssh连接虚拟机系统. ...

  10. Interrupt distribution scheme for a computer bus

    A method of handling processor to processor interrupt requests in a multiprocessing computer bus env ...