• 使用ClassyShark压缩你的项目


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

    你能够想象一下,这个框架的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反编译

    比如,通过双击反编译库中声明的类型,就能够轻松地打开了这个类,并跟踪相关的依赖列表。

    此外,假设你由于某种原因无法找到想要的文件。通过窗体顶部的大写和小写敏感的输入框你总能搜到你想要的类。

    在ClassyShark的帮助下,我们能够“轻松地”获取我们须要保存的全部依赖。并在非常短的时间内为ProGuard加入正确的规则,使我们从令人头疼的手动跟踪依赖链接,甚至编译一遍仅仅是想看看少了哪些引用中挽救出来。

    结语

    不幸的是,我们无法摆脱MultiDex库,但我们的确缩小了我们的项目。而且我们发行版本号的APK大小。如今大概13 MB。相比于初始大小降低了约75%。

    就算没有完美解决,也算得上是功德圆满了。

    感谢我的同事 Giuseppe和我的朋友 Boris, Mario 和 Sebastiano校对这篇文章。

  • 相关阅读:
    《网络攻防》实验八:Web基础
    《网络攻防》实验七:网络欺诈技术防范
    《网络攻防》实验六:信息搜集与漏洞扫描
    《网络攻防》实验五:MSF基础应用
    《网络攻防》实验四:恶意代码分析
    《网络攻防》实验三:免杀原理与实践
    《网络攻防》实验二:后门原理与实践
    20145213《网络对抗》逆向及Bof基础
    《课程设计》——cupp的使用
    《课程设计》——foremost的使用
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/8324982.html
Copyright © 2020-2023  润新知