当前位置: 首页 > 科技观察

Android性能优化:使用Lint优化代码,去除冗余资源

时间:2023-03-12 05:03:59 科技观察

前言有野心的程序员除了保证代码没有功能性问题,完成业务开发外,还追求代码的规范性和可维护性。今天,竹心将以“成为一名优秀的程序员”为目标,与大家一起精益求精,学习使用Lint来优化我们的代码。什么是LintLint是AndroidStudio提供的一个代码扫描分析工具,可以帮助我们发现代码结构/质量问题并提供一些解决方案,而且这个过程不需要我们手工编写测试用例。Lint发现的每一个问题都有描述信息和级别(类似于测试发现的bug),所以我们可以很容易的定位到问题,并根据严重程度进行解决。当然,我们可以手动调整“严重性”。有些原则问题是不可侵犯的,必须升级为错误,有些个别问题也可以忽略不计。Lint的工作方式简介Lint会根据预先配置的检测标准对我们Android项目的源文件进行检查,找出潜在的bug或者可以优化的地方。优化的内容主要包括以下几个方面:Correctness:不够完善的编码,如Hardcoding、使用过时的API等Performance:影响性能的编码,如:静态引用、循环引用等Internationalization:国际化,直接使用汉字,没有资源引用等安全性:不安全的编码,比如WebView中allowed使用JavaScriptInterface等Lint检测代码的过程如下图所示:App源文件:包括Java代码,XML代码、图标、ProGuard配置文件等。lint.xml:Lint检测的执行标准配置文件,我们可以修改它来允许或禁止报告一些问题命令行运行LintLint的命令很简单:lint[flags]Lint也可以用Gradle运行:Windows:gradlewlintMac:./gradlewlint具体命令行相关操作这里就不介绍了,因为进程太蛋疼,让你体验一下之前命令行运行Lint后得到的XML文件截图:我们直接进入Lint的GUI操作。在AndroidStudio中使用LintAndroidStudio内置了Lint,我们手小的人可以直接使用。Lint使用路径:Toolbar->Analyze->InspectCode...点击InspectCode后会弹出检查范围对话框:默认是检查整个项目,我们可以点击Customscope自定义检查范围.点击右边的下拉框,会出现以下选项:ProjectFiles:所有项目文件ProjectProductionFiles:项目的代码文件ProjectTestFiles:项目的测试文件OpenFiles:当前打开的文件Module'app':主appModuleCurrentFile:除了当前文件的内置选项外,我们还可以选择特定的类进行检查。点击下图红框:弹出自定义范围选择框,默认为空。我们可以点击左上角的“+”号增加一个新的检查范围:-Local:只能使用当前项目-Shared:其他AndroidStudio项目也可以使用,我们选择Shared,然后给出一个帅气的名字“ShixinCuteLint”,项目默认显示,此时勾选文件数为0:上图右侧四个按钮表示操作类型:Include:将文件包含在当前文件夹,但不包括其子文件夹IncludeRecursively:包括当前文件夹及其子文件夹递归添加所有文件夹Exclude:删除当前文件夹,不包括子文件夹ExcludeRecursive:删除当前文件夹及其所有子文件夹单击左侧的app文件夹后,点击右侧的IncludeRecursively按钮,将app下的所有文件添加到检查列表中:可以看到此时app下的文件都是绿色的,总共有689个文件夹需要扫描。click确定检测,稍等片刻,弹出检测对话框,显示检测结果。没想到我的代码里有1769条警告!这个数字很震撼:我们主要关注红框里的warning,先看看我的代码有什么问题性能:哈哈,没想到我还有那么大的提升空间!从上图可以看出,Lint真的是一个神奇的工具,它可以帮助我们发现我们忽略或没有意识到的问题,尤其是在性能方面。如果您想优化代码但不知道从哪里开始,请让Lint指导您。在团队中建立代码规范工具:提高和降低问题的级别Lint虽然可以帮助我们检查代码问题,但是当多人协作时,我们希望在编写代码时能够发现并解决问题。鉴于团队成员水平参差不齐,有时靠个人意识很难保证质量。这时候你可以针对具体的问题修改Lint的警告等级,用最直观的IDE提示提醒大家。Lint的警告严重程度如下:UnusedEntry:未使用的属性,灰色,非常不显眼Typo:拼写错误,绿色波浪下划线,不太显眼ServerProblem:服务器错误?好像不是Info:注释文档,绿色,比较显眼WeakWarning:较弱的警告,较弱的提示Warning:警告,稍微显眼一点Error:错误,日常开发中最显眼的,好点的程序员会注意Warning的警告,根据警告优化代码,但这只是一小部分。但是红色的Error是不同的。基本上,你看到它就想消除它。让我们以命名拼写错误为例。类、对象、遍历拼写错误可能看起来不是什么大问题,但如果你看到了很多废话或命名错误,你就会同意我接下来要做的事情。默认的错字是Typo,提示很弱,所以经常被忽略:上面的String类型变量login写成logn,Lint默认错字是向下的波浪线,很不显眼。让我们修改它。打开Preferences/Settings,搜索Inspections,会出现Lint检测配置页面:修改拼写警告级别,搜索“spelling”:然后选择出现的Typo,然后点击右边的Severity为严重程度,改成Error,OK。可以看到,现在拼写错误会有红色的错误警告,所以不能正确写变量名!Lint很好,但不能贪心。Lint就像一个洁癖患者。虽然可以让我们的代码简洁很多,但是如果真的要解决所有的提示,只怕老板会生气:天天打电脑给你钱,你怎么不活了?!Lint报告的一些警告确实是不必要的,我们可以选择忽略它们。忽略警告分为两种:在Java代码中在XML文件夹中在Java代码中忽略Lint警告:忽略Lint警告的注解与@SuppressWarnings、@SuppressLint("ignoredwarningname")非常相似。以下代码演示了如何忽略Lint关于使用新API的警告:@SuppressLint("NewApi")@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);}如果你不这样做知道要忽略的警告的具体名称是什么,那么就忽略所有,当然是当前的类/方法/对象:@SuppressLint("all")忽略XML代码中的Lint警告:只需两步:在tools中声明tools命名空间xml使用tools:ignore="Ignoredwarningname"例如:Gradle也可以在GradleKey中配置Lint操作,例如是否启用Lint警告或禁用指定的警告。在module下的build.gradle中添加lintOptions{…},示例代码如下:','RtlEnabled'//仅对问题ID的一个子集启用检查并忽略所有其他问题,//使用'check'属性列出问题ID。此属性覆盖//您使用上述属性启用或禁用的任何问题ID。检查'NewApi','InlinedApi'//如果设置为真,则关闭分析进度报告(通过lintererror.quiettrue/默认/如果设置为真),如果停止为真(abortOnErrorfalse//iftrue,onlyreporterrors.ignoreWarningstrue}}...自动删除发现的无用资源文件。代码迭代次数多,很容易留下一些无用的代码和资源文件。我们可以使用Lint来清除它们。点击AndroidStudio工具栏->Analyze->RunInspectionByName..,输入要检测的内容,这里是无用资源:然后选择Unusedresources,然后选择范围开始检测。检测到这么多无用文件:注意,右边有一个解决办法:RemoveAllUnusedResources,放一张大图更显眼:点击后,咚,世界从此安静。Lint是优秀程序员的朋友,我要一日三省自省,你今天Lint了吗?!