Android项目的优化(清理篇)

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

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

《Android项目的优化(清理篇)》 上一版本

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

《Android项目的优化(清理篇)》 项目结构

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

《Android项目的优化(清理篇)》 整理后

下面就记录下清理的逻辑

分支

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

目前所处develop分支

《Android项目的优化(清理篇)》

新建分支clean2

《Android项目的优化(清理篇)》

将gradle修改下

《Android项目的优化(清理篇)》

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

《Android项目的优化(清理篇)》

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

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

《Android项目的优化(清理篇)》

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

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

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

《Android项目的优化(清理篇)》
《Android项目的优化(清理篇)》

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

《Android项目的优化(清理篇)》

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

《Android项目的优化(清理篇)》

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

《Android项目的优化(清理篇)》

找到存放的stash

《Android项目的优化(清理篇)》

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

《Android项目的优化(清理篇)》

之前的修改又回来了。

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

通过工具栏按钮

《Android项目的优化(清理篇)》

报错了

《Android项目的优化(清理篇)》

通过菜单项

《Android项目的优化(清理篇)》

需要选择分支

《Android项目的优化(清理篇)》

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

《Android项目的优化(清理篇)》

按提示操作

《Android项目的优化(清理篇)》

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

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

这时再看看

《Android项目的优化(清理篇)》 image.png

pull下试试

《Android项目的优化(清理篇)》

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

《Android项目的优化(清理篇)》

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

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

Code Cleanup

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

《Android项目的优化(清理篇)》

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

《Android项目的优化(清理篇)》 典型代表

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

Optimize Import

第二步,删除多余import

《Android项目的优化(清理篇)》

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

《Android项目的优化(清理篇)》

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

Reformat Code

第三步,格式化代码

《Android项目的优化(清理篇)》

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

Unused Resources

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

《Android项目的优化(清理篇)》
《Android项目的优化(清理篇)》
《Android项目的优化(清理篇)》

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

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

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

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

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

Gradle

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

《Android项目的优化(清理篇)》 原配置

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

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

又出错了!!!!

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

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

又出错了!!!!

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

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

    原文作者:s1991721
    原文地址: https://www.jianshu.com/p/c6766b73df5f
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞