接手二手项目是一件非常痛苦的事情,更别说是流转了四手五手,且还为了项目进度而直接引入其他部门的代码、模块的项目,更更麻烦的是在AS中还依赖了Eclipse的模块。
项目最近的发布版本大小有47.6M
![](https://img.haomeiwen.com/i9261086/a725dd917695ae54.png)
项目共使用了个17Module,不包括注释了的5个Module,总共有22个Module
![](https://img.haomeiwen.com/i9261086/ad918cbc18ca4774.png)
在没修改逻辑的前提下,清理后apk大小为40.4M
![](https://img.haomeiwen.com/i9261086/cb9551b8277e66c7.png)
下面就记录下清理的逻辑
分支
为不影响正常的开发工作和清理所带来的不确定隐患,清理的工作还是另开一分支将风险降为0比较保险。
目前所处develop分支
![](https://img.haomeiwen.com/i9261086/6003c010eac11e85.png)
新建分支clean2
![](https://img.haomeiwen.com/i9261086/182f5784511b7e21.png)
将gradle修改下
![](https://img.haomeiwen.com/i9261086/0bc0d2dc94f5fd87.png)
清理工作到一半,测试提了个bug,切回develop分支修改
![](https://img.haomeiwen.com/i9261086/c0a1a88e6497e6fa.png)
结果在clean2分支修改的代码被带到了develop分支,创建分支的目的就是要将修改操作分离,现在却起了反作用。
常用AS的git插件的话可能对stash比较陌生,问题出现时我也很懵,多亏同事指点
![](https://img.haomeiwen.com/i9261086/6c884ca414902de6.png)
git常用的提交操作有:commit提交本地仓库、push提交本地仓库到远程仓库,还有一种stash。
commit是将小修改提交本地仓库,多次commit后一个功能完成了,此时将多次commit合成的功能push到远程仓库,多次push后一个版本就出来了。
当我的修改做到一半导致整体不能运行,且非切换分支不可的情况,如我上述遇到的,代码删了大半但有紧急bug需要修改,commit的话不合适,直接切换分支又会将修改的代码带入到develop分支内,此时就需要将clean2分支内的修改用stash的方式缓存
![](https://img.haomeiwen.com/i9261086/84d221a416c6cc15.png)
![](https://img.haomeiwen.com/i9261086/2e2d8b5c572658e6.png)
Create Stash 后代码回到了修改前的状态,不要担心你的修改还在的。
![](https://img.haomeiwen.com/i9261086/f312abb14d731ab4.png)
切到develop这次修改没有被带过来,安心的修改bug,commit,push
![](https://img.haomeiwen.com/i9261086/ec1ad8063e61ee8c.png)
bug告一段落,回到clean2分支继续清理代码,需要将之前缓存的修改放出来
![](https://img.haomeiwen.com/i9261086/857fb6792df5d21e.png)
找到存放的stash
![](https://img.haomeiwen.com/i9261086/18f8efe52bab205d.png)
若不勾选Pop stash,则缓存的修改应用在代码上,且缓存的修改还缓存着。pop后则修改应用在代码上,缓存的修改被删除。
![](https://img.haomeiwen.com/i9261086/fbd02f0c34c46d57.png)
之前的修改又回来了。
但develop分支修改的bug需要同步过来
通过工具栏按钮
![](https://img.haomeiwen.com/i9261086/b53dbe09491e69fe.png)
报错了
![](https://img.haomeiwen.com/i9261086/79a6beedae13c0bf.png)
通过菜单项
![](https://img.haomeiwen.com/i9261086/2a9a7820dc88d783.png)
需要选择分支
![](https://img.haomeiwen.com/i9261086/e996681691fe1064.png)
为什么呢?
分支clean2没有关联其他分支,属于单独分支何来的pull
![](https://img.haomeiwen.com/i9261086/353edcfadafc568d.png)
按提示操作
![](https://img.haomeiwen.com/i9261086/cec3476e6711d865.png)
但是我们要从develop分支pull下来,所以要修改下命令
git branch --set-upstream-to origin/develop clean2
这时再看看
![](https://img.haomeiwen.com/i9261086/bac1bd7b7fad2e36.png)
pull下试试
![](https://img.haomeiwen.com/i9261086/e1b0fc3401487c32.png)
出现这种问题的原因是创建分支的时候没有指定,新分支的上一个节点,安全的操作是这种
![](https://img.haomeiwen.com/i9261086/737bb3b2e9a41cc6.png)
这种方式新建的分支就会有上一个节点。
至于pull和stash孰先孰后的问题都是可以的,当出现冲突就需要手动解决了。
Code Cleanup
终于可以安心的清理代码了,第一步
![](https://img.haomeiwen.com/i9261086/6218bffcfd087b80.png)
主要用于整理代码中不规范的书写
![](https://img.haomeiwen.com/i9261086/ab26477313ec0d3e.png)
跑一遍程序,commit,小心一点总没错
Optimize Import
第二步,删除多余import
![](https://img.haomeiwen.com/i9261086/f6b6698e029007b8.png)
如当前打开某文件则执行文件操作,没有打开则是整个项目
![](https://img.haomeiwen.com/i9261086/2e4e2ccc38f810e5.png)
跑一遍程序,commit,小心一点总没错
Reformat Code
第三步,格式化代码
![](https://img.haomeiwen.com/i9261086/a02d50c88adcd474.png)
跑一遍程序,commit,小心一点总没错
Unused Resources
第四步,删除无用的资源文件
![](https://img.haomeiwen.com/i9261086/8b22c7472500720d.png)
![](https://img.haomeiwen.com/i9261086/1bfac8d195b90cb7.png)
![](https://img.haomeiwen.com/i9261086/3051f6e053fe8890.png)
跑一遍程序,commit,小心一点总没错
看看出错了吧!!!!!!
删除未使用的资源文件,并没有那么智能,我遇到两个问题:
1、项目中和Kotlin相关的布局文件,所有的控件id被删除。由于Kotlin Extensions插件的原因,控件id并没有被显式引用,所以AS误以为控件id为无用资源
2、menu文件被删除,代码中引用了menu文件中的id但没有引用menu文件导致文件被删除
当明显知道删除错了,还要手动还原回去
Gradle
作为Android构建工具的Gradle,也可以设置打包时资源文件的压缩。
![](https://img.haomeiwen.com/i9261086/9923a4a4154dd4eb.png)
将false修改为true,打包是就不会将使用不到的资源文件打入包内。与此同时,还会将代码混淆预防反编译。
运行时的APP为debug模式,所以打包测试下
又出错了!!!!
由于第四步,删除无用的资源时,导致一string.xml文件内容被删除,打包时发现此文件为空报错,确认文件无用时将文件删除即可。
打包成功,将apk放入手机运行。
又出错了!!!!
出错信息没在代码内,但有一个重点信息ClassLoader找不到类,定位原因在混淆规则上,看看具体找不到那个类,第三方的话很好解决找找官网的混淆规则。但但但但但我们公司买了**公司的订制服务SaaS,坑爹了,找了半天终于找到一行的混淆规则。
到此只是对项目进行了最简单的清理,代码逻辑啊!无用的Activity、Fragment是没有被清理掉的,路还很长。
网友评论
不同情景下要变通,优化必须建立在能够全部掌握项目的基础上。