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

你能够想象一下,这个框架的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. js ---- 函数防抖

    <!DOCTYPE html> <html> <head> <title></title> </head> <body&g ...

  2. Impala性能优化

    不多说,直接上干货! • 执行计划 – 查询sql执行之前,先对该sql做一个分析,列出需要完成这一项查询的详细方案 – 命令:explain sql.profile 要点: • 1.SQL优化,使用 ...

  3. button按钮下边框有立体效果样式

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. HDU 2689 Tree

    Tree Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  5. centos的dns配置总结

    找的一篇好的存根 DNS正反向解析 DNS(Domain Name Service)域名服务.就是域名解析服务器.所谓名称解析的过程就是某个应用程序基于某个搜索键在指定的数据库中查询.而后查询到某些对 ...

  6. linux系统下的/proc目录介绍

    1. /proc目录 Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构.改变内核设置的机制.proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以 ...

  7. Python修改文件内容

    工作中要写个脚本来修改文件的内容,然后就写了一个刷子: #coding:utf8 import os def modify_file(old_file, new_version, old_versio ...

  8. HDU 4107 Gangster

    Gangster Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ID: 4 ...

  9. web显示winform,web打开winform,IE打开winform

    前言:为什么要用ie打开winform 个人觉得,winform部署client太麻烦如金蝶··用友,winfrom打补丁太麻烦,加入新功能再部署很费时间:于是就想为什么不能用IE打开呢?这样就不须要 ...

  10. 非阻塞键盘检测getchar()

    #include <stdio.h> #include <conio.h> #include <Windows.h> int main() { char c; wh ...