Android项目的优化(清理篇)

作者: s1991721 | 来源:发表于2018-07-04 16:25 被阅读276次

    接手二手项目是一件非常痛苦的事情,更别说是流转了四手五手,且还为了项目进度而直接引入其他部门的代码、模块的项目,更更麻烦的是在AS中还依赖了Eclipse的模块。

    项目最近的发布版本大小有47.6M

    上一版本

    项目共使用了个17Module,不包括注释了的5个Module,总共有22个Module

    项目结构

    在没修改逻辑的前提下,清理后apk大小为40.4M

    整理后

    下面就记录下清理的逻辑

    分支

    为不影响正常的开发工作和清理所带来的不确定隐患,清理的工作还是另开一分支将风险降为0比较保险。

    目前所处develop分支

    新建分支clean2

    将gradle修改下

    清理工作到一半,测试提了个bug,切回develop分支修改

    结果在clean2分支修改的代码被带到了develop分支,创建分支的目的就是要将修改操作分离,现在却起了反作用。

    常用AS的git插件的话可能对stash比较陌生,问题出现时我也很懵,多亏同事指点

    git常用的提交操作有:commit提交本地仓库、push提交本地仓库到远程仓库,还有一种stash。

    commit是将小修改提交本地仓库,多次commit后一个功能完成了,此时将多次commit合成的功能push到远程仓库,多次push后一个版本就出来了。

    当我的修改做到一半导致整体不能运行,且非切换分支不可的情况,如我上述遇到的,代码删了大半但有紧急bug需要修改,commit的话不合适,直接切换分支又会将修改的代码带入到develop分支内,此时就需要将clean2分支内的修改用stash的方式缓存

    Create Stash 后代码回到了修改前的状态,不要担心你的修改还在的。

    切到develop这次修改没有被带过来,安心的修改bug,commit,push

    bug告一段落,回到clean2分支继续清理代码,需要将之前缓存的修改放出来

    找到存放的stash

    若不勾选Pop stash,则缓存的修改应用在代码上,且缓存的修改还缓存着。pop后则修改应用在代码上,缓存的修改被删除。

    之前的修改又回来了。

    但develop分支修改的bug需要同步过来

    通过工具栏按钮


    报错了


    通过菜单项


    需要选择分支


    为什么呢?
    分支clean2没有关联其他分支,属于单独分支何来的pull


    按提示操作

    但是我们要从develop分支pull下来,所以要修改下命令

    git branch --set-upstream-to origin/develop clean2

    这时再看看

    image.png

    pull下试试

    出现这种问题的原因是创建分支的时候没有指定,新分支的上一个节点,安全的操作是这种

    这种方式新建的分支就会有上一个节点。

    至于pull和stash孰先孰后的问题都是可以的,当出现冲突就需要手动解决了。

    Code Cleanup

    终于可以安心的清理代码了,第一步

    主要用于整理代码中不规范的书写

    典型代表

    跑一遍程序,commit,小心一点总没错

    Optimize Import

    第二步,删除多余import

    如当前打开某文件则执行文件操作,没有打开则是整个项目

    跑一遍程序,commit,小心一点总没错

    Reformat Code

    第三步,格式化代码

    跑一遍程序,commit,小心一点总没错

    Unused Resources

    第四步,删除无用的资源文件

    跑一遍程序,commit,小心一点总没错

    看看出错了吧!!!!!!

    删除未使用的资源文件,并没有那么智能,我遇到两个问题:

    1、项目中和Kotlin相关的布局文件,所有的控件id被删除。由于Kotlin Extensions插件的原因,控件id并没有被显式引用,所以AS误以为控件id为无用资源
    2、menu文件被删除,代码中引用了menu文件中的id但没有引用menu文件导致文件被删除

    当明显知道删除错了,还要手动还原回去

    Gradle

    作为Android构建工具的Gradle,也可以设置打包时资源文件的压缩。

    原配置

    将false修改为true,打包是就不会将使用不到的资源文件打入包内。与此同时,还会将代码混淆预防反编译。

    运行时的APP为debug模式,所以打包测试下

    又出错了!!!!

    由于第四步,删除无用的资源时,导致一string.xml文件内容被删除,打包时发现此文件为空报错,确认文件无用时将文件删除即可。

    打包成功,将apk放入手机运行。

    又出错了!!!!

    出错信息没在代码内,但有一个重点信息ClassLoader找不到类,定位原因在混淆规则上,看看具体找不到那个类,第三方的话很好解决找找官网的混淆规则。但但但但但我们公司买了**公司的订制服务SaaS,坑爹了,找了半天终于找到一行的混淆规则。

    到此只是对项目进行了最简单的清理,代码逻辑啊!无用的Activity、Fragment是没有被清理掉的,路还很长。

    相关文章

      网友评论

      • RicoX2016:你这一上来就混淆,会出很多问题,尝试过。 先精简代码再做混淆配置等其他的操作比较好。
        s1991721:@RicoX2016 在缺失rule的情况下是会发生你所说的情况,就像文中所说的saas服务。一般引用的第三方都会提供相应的rule,如果是自己写反射相关功能的话就比较麻烦,需要一个个去找。
        不同情景下要变通,优化必须建立在能够全部掌握项目的基础上。
      • 深爱着伊豆的流云:是这样的,特别是外包公司,很正常,有能力就跳吧,外包不是长久之计!不成体系,上限低!

      本文标题:Android项目的优化(清理篇)

      本文链接:https://www.haomeiwen.com/subject/umoduftx.html