Android lint 简介:http://blog.csdn.net/hudashi/article/details/8333349

如何在android studio 中使用 link工具:http://www.cnblogs.com/cheerego/p/5175764.html

1.Inspection Result for Inspection Profile 'Project Default'

2 该项给了两类提示

(1) Image without contentDescription:

问题概要:[Accessibility] Missing contentDescription attribute on image

解决办法:所有的imageview都添加属性 android:contentDescription="@string/desc"  此处字符串不能为“”

其实这个属性是方便一些生理功能有缺陷的人使用应用程序的。比如我们有一个ImageView里面放置一张颜色复杂的图片,可能一些色弱色盲的人,分不清这张图片中画的是什么东西。

如果用户安装了辅助浏览工具比如TalkBack,TalkBack就会大声朗读出用户目前正在浏览的内容。TextView控件TalkBack可以直接读出里面的内容,但是ImageView TalkBack就只能去 读

contentDescription的值,告诉用户这个图片到底是什么。

参考:https://stackoverflow.com/questions/8500544/android-lint-contentdescription-warning

(2) Missing labelFor attribute

问题概要:No label views point to this text field with an android:labelFor="@+id/@+id/editableHeight" attribute

解决办法:EditText添加labelFor属性,其值为对应的id

参考:http://blog.csdn.net/kx_nullpointer/article/details/18499509

3 Android>Lint>Correctness>Message

(1)Potential Plurals

问题概要:在字符串的国际化工程中,有一个英文字符串为:<string name="details_title">%1$d of %2$d items:</string>

lint提示warning:Formatting %d followed by words ("items"): This should probably be a plural rather than a string

解决办法:在该项使用plurals的形式定义该字符串

<plurals name="number_of_albumset_video">

                                  <item quantity="one">%1$d video</item>

                                  <item quantity="other">%1$d videos</item>

                           </plurals >

主要是针对不同语言对单复数等形式的数据进行处理

(2)Unused quantity translations

问题概要: 在中文字string.xml中定义了如下的字符串:

  <plurals name="number_of_albumset_photo">

                      <item quantity="one">%1$d 张照片</item>

                      <item quantity="other">%1$d 张照片</item>

                </plurals >

               lint提示For language "zh" (Chinese) the following quantities are not relevant: one

解决办法:中文中没有单复数的区分,所以,将"<item quantity="one">%1$d 张照片</item>" 删除即可

4.Android>Lint>Usability

(1) Button should be borderless

问题概要:在Button控件设置如下属性android:layout_width="0dp"  android:layout_weight="1" 时,提示warning

            解决办法:添加 style="?android:attr/buttonStyle" 属性

参考:http://blog.csdn.net/lyalei/article/details/48025417

(2) Missing inputType or hint

问题概要:使用EditText时,需要添加一些必备的属性,如hint,inputType等,否则会提示warning

解决办法:添加hint属性 android:hint="";

参考:http://blog.csdn.net/aeolus1019/article/details/8112716

(3)Missing support for Google App Indexing

不知道修改了哪里,改warning消失了 -_-

(4)Text size is too small

问题概要:从用户角度出发,官方建议开发者Avoid using sizes smaller than 12sp.

根据UI设计师的设计,该处没有修改

5.  Android>Lint>Usability>Icons

该项中可以检测重复命名的图片,规范要求必须有的密度文件夹,不同文件夹下应该有针对不同密度的图片等

6.Android>Lint>Security

(1) AllowBackup/FullBackupContent Problems

问题概要:该项显示了清单文件中属性allowBackup=true使得backup/restore会导致数据不安全

解决办法:将allowBackup设置为false

参考:http://blog.csdn.net/qq_17338093/article/details/55506543

https://wenku.baidu.com/view/c43af666f342336c1eb91a37f111f18583d00c79.html(如何使用adb backup 和 adb restore 进行备份)

https://developer.android.com/preview/backup/index.html(一般打不开)

(2) Using setJavaScriptEnabled

问题概要:Using setJavaScriptEnabled can introduce XSS vulnerabilities into you application, review carefully.

解决办法:Your code should not invoke setJavaScriptEnabled if you are not sure that your app really requires JavaScript support.

添加该行:@SuppressLint("SetJavaScriptEnabled")

参考:http://blog.csdn.net/huanongjingchao/article/details/18261611

(3) ConentProvider 安全问题(没有及时现场截图)

问题概要:Exported content providers can provide access to potentially sensitive

解决办法:如果确定要给其他应用调用  设置export = "true" 时,加上tools:ignore="ExportedContentProvider",并在manifest文件开头添加tools命名空间;如果只在应用内使用,设置export = "false"

参考: https://stackoverflow.com/questions/13448480/exported-content-providers-can-provide-access-to-potentially-sensitive-data

(4) Service安全问题(没有及时现场截图)

问题概要:Exported service does not require permission

解决办法:由于我使用的Service不需要给其他app使用,设置android:exported="false"

参考:http://www.cnblogs.com/myorange/p/5425835.html

7 Android > Lint > Internationalization

(1)Hardcoded text:该项主要针对xml布局文件中的硬编码问题,[I18N] Hardcoded string "title", should use @string resource;[I18N] Hardcoded string "这是PreviewLayout", should use @string resource

(2)Overlapping items in RelativeLayout:该项主要针对RelativeLayout中部分空间相互重叠了,只要调整大小和位置即可。

(3)TextView Internationalization:该项主要针对代码中直接使用字符串的问题,尽量提取取来作为资源文件存储在xml中

8.Android > Lint > Performance(性能)

(1)FrameLayout can be replaced with <merge> tag

问题描述:xml布局文件中,FrameLayout作为根布局时,会给出该warning(自己通过观察和对比总结的,不敢保证是否准确)

解决办法:使用merge来代替FrameLayout ;

参考:https://stackoverflow.com/questions/21488027/warning-this-framelayout-can-be-replaced-with-a-merge-tag/21490723

http://blog.csdn.net/time_hunter/article/details/8664665

(2)Handler reference leaks

问题概要:Handler的使用不当引起内存泄漏

解决办法:如果按照下面参考网站的建议,handler被定义为static,那么其中引用的很多变量和方法都必须定义为static,会比较麻烦。笔者在按照提其给定的方法 private final MyHandler mHandler = new MyHandler(this); 实例化静态handler的时候

甚至连编译都无法通过,this处报错。自己通过尝试,使用了如下的方法进行了处理,最终解决了hanler内存泄漏的问题

                   private Handler mHandler = new Handler(getMainLooper());

参考:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1106/1922.html (引用了权威开发者的建议,对handler做了一定深度的剖析)

(3) HashMap can be replaced with SparseArray

问题描述:For maps where the keys are of type integer, it's typically more efficient to use the Android SparseArray API. This check identifies scenarios where you might want to consider using SparseArray instead of HashMap for better performance.

解决办法:如果HashMap中key值为Integer或Long,使用SparseArray来取代

参考:https://stackoverflow.com/questions/25560629/sparsearray-vs-hashmap

(4) Inefficient layout weight

当在一个LinearLayout布局中仅包含一个定义weight属性的view控件时,直接指定0dp到其width或height属性更高效,因为在初始化时不再需要测量这个view控件的尺寸,反正到最后它都会霸占所有剩余空间的了。

(5) Layout has too many views

问题概要:检测某个布局文件,出现warning:activity_share_template_detail.xml has more than 80 views, bad for performance

解决办法:减少单个页面的view个数,少于80个

(6) Missing baselineAligned attribute

问题概要:When a LinearLayout is used to distribute the space proportionally between nested layouts, the baseline alignment property should be turned off to make the layout computation faster.(as中的提示)

解决办法:Set android:baselineAligned="false" on this element for better performance(as中的提示)

参考:http://markjoker.iteye.com/blog/2243398

(7) Missing recycle() calls

问题概要:Many resources, such as TypedArrays, VelocityTrackers, etc., should be recycled (with a recycle() call) after use. This lint check looks for missing recycle() calls.

解决办法:使用完后,回收即可

(8) Nested layout weights

问题概要:在布局进行嵌套使用时,父布局与子布局都使用了android:layout_weight,但不是必须使用时,会报这个warning

解决办法:根据实际情况,去掉部分weight属性

(9) Node can be replaced by a TextView with compound drawables

问题概要      A LinearLayout which contains an ImageView and a TextView can be more efficiently handled as a compound drawable (a single TextView, using the drawableTop, drawableLeft,

及解决方法:drawableRight and/or drawableBottom attributes to draw one or more images adjacent to the text). If the two widgets are offset from each other with margins, this can be replaced with a drawablePadding attribute.

使用一个Textview + compound drawables 可以替代掉 一个LinearLayout 嵌套 textview和imageview的布局,效率和代码量明显极大地优化了

(10) Obsolete layout params

问题概述:The given layout_param is not defined for the given layout, meaning it has no effect. This usually happens when you change the parent layout or move view code around without updating the layout params.

This will cause useless attribute processing at runtime, and is misleading for others reading the layout so the parameter should be removed.

解决办法:把无效的属性删除即可。比如LinearLayout子布局中使用layout_toRightOf属性,属于无效属性

(11)Overdraw: Painting regions more than once

问题概述:如果在布局文件xml中的根布局中使用background属性,会和主题中的background产生重复绘制,导致了“overdraw”

If you set a background drawable on a root view, then you should use a custom theme where the theme background is null. Otherwise, the theme background will be painted first, only to have your custom background completely cover it; this                                     is called "overdraw". NOTE: This detector relies on figuring out which layouts are associated with which activities based on scanning the Java code, and it's currently doing that using an inexact pattern matching algorithm. Therefore, it can                                         incorrectly conclude which activity the layout is associated with and then wrongly complain that a background-theme is hidden. If you want your custom background on multiple pages, then you should consider making a custom theme with                                         your custom background and just using that theme instead of a root element background. Of course it's possible that your custom drawable is translucent and you want it to be mixed with the background. However, you will get better                                                   performance if you pre-mix the background with your drawable and use that resulting image or color as a custom theme background instead.

解决办法:在自定义主题中将background设置为null。因为不是每个界面的根布局都使用同一个背景 ,需要自己定义,所以最好在主题中处理(根据自己的项目中的情况来的)

(12)Unused resources

该处列出了app中的没有使用过的各种资源,包括图片,anim文件,颜色,字符串等

9. Android > Lint > Usability > Typography

该项主要检验一些排版错误

(1) 问题概要:在字符串中用三个"."表示省略号"…" ,导致提示warning:Replace "..." with ellipsis character (…, …) ? (at line 551)

解决办法:使用标准的省略号"…"

(2)问题概要:在字符串中使用了非标准的连字符,导致提示warning:Replace "-" with an "en dash" character (–, –)

解决办法:用“–”(有;没有"")代替“–”;(没有找到此处应该用的标注符号)

参考:部分符号对应的编码 http://www.w3school.com.cn/tags/html_ref_symbols.html

持续更新中...

android studio 使用lint工具优化app时全过程记录相关推荐

  1. Android studio | Android studio下SVN工具(APP版本管理工具)

    /*************************************************************************************** 博主github:ht ...

  2. Android studio 使用NDK工具实现JNI编程

    前言: Android开发中常常会使用到第三方的.so库.在使用.so库的时候就要用到JNI编程.JNI是Java Native Interface的缩写.它提供了若干的API实现了Java和其它语言 ...

  3. android studio debug设置,在Android Studio中使用Flutter进行调试时如何“设置值...”

    问题 使用"New Flutter Project"创建Flutter App时,以下图像和代码是默认设置 . import 'package:flutter/material.d ...

  4. android studio AVD模拟器安装某些app出现 “app not installed(未安装应用程序)”的问题

    android studio AVD模拟器安装某些app出现 "app not installed(未安装应用程序)"的问题 参考: 安装apk时出现INSTALL_FAILED_ ...

  5. android studio 编译遇到报错 app:compileDebugJavaWithJavac 处理办法

    android studio编译遇到报错app:compileDebugJavaWithJavac处理办法 android studio 在编译时经常会遇到如下图片中这个错误,但是程序运行时可以正常运 ...

  6. Android Studio 数据库可视化工具(Database Inspector)报错

    Android Studio 数据库可视化工具(Database Inspector)报错 使用这个工具的时候报了错 ,(诸位还有可能是好奇点了一下),然后,就报错了 提示如下: Database I ...

  7. android studio 中文乱码,字体优化解决之道

    打开Android Studio我们会发现 中文变成了口口口口口... android studio 中文乱码,字体优化解决之道 (转载请标注:源自; Phodal's Blog ) 解决方法如下: ...

  8. 基于Android studio 的学生课堂管理app

    1.还是一如既往的期末考核的作业,当然不是我的,所所实话,这个题目才是符合大一学生课设的标准,难度适中,但是必须要花费大量时间题目: 2.基于Android studio 的掌上课堂app,主要是由学 ...

  9. Android Studio 设置图标LOGO,APP下载到手机以后图标无变化

    Android Studio 设置图标LOGO,APP下载到手机以后显示小机器人 最近刚入门Android studio,一直都是默认图标,今天心血来潮想自定义图标,发现搜索到的各种方法都没办法成功更 ...

  10. Android Studio开发环境下让App自动签名

    Android Studio开发环境下让App自动签名 前言: 分享这个的原因有两个: 第一,在开发的过程中我们会发现关于微信的分享支付或者是支付宝的支付等一些功能的时候必须是要签名包,否则会失败,每 ...

最新文章

  1. Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(Button展示图片事件)
  2. python 英语词频统计软件_Python数据挖掘——文本分析
  3. Python copy模块浅拷贝和深拷贝
  4. 有一个字长32位的浮点数符号位1位_边缘计算专题:(二)别看只有0和1,数学不好的勿进!...
  5. FinalShell SSH工具下载
  6. 2021年中国醋栗果提取物市场趋势报告、技术动态创新及2027年市场预测
  7. 苹果测试集了成语音识别和人脸识别的智能家居?
  8. vsan双主机配置_5千右预算,兼顾Pr剪辑、Ps修图、CAD制图的高性价比DIY主机配置...
  9. Java输出竖排古典文字
  10. IT行业对人才的需求已经饱和了吗?
  11. PDF文件密码怎么解除
  12. 威联通架设php网站_使用 QNAP NAS 虚拟主机功能架设多个网站
  13. 超漂亮的网页图文排版
  14. Tomcat优化经验之谈
  15. java 一行行读取文件_Java中按行读取文件
  16. 麒麟 嵌入式linux操作系统_体验了一下北韩操作系统RedStar红星OS;国产linux优麒麟...
  17. 思科模拟器:cisco路由器密码恢复(密码破解)
  18. ios如何解除dns被劫持_iOS监控:DNS劫持
  19. java配置微信网页授权_玩玩微信公众号Java版之六:微信网页授权
  20. 什么是营销自动化工具?简单的营销自动化流程如何设计?

热门文章

  1. Thinkphp重复字段过滤
  2. Chuck语言学习笔记——2.HelloWorld
  3. ChucK学习笔记(零)——前言
  4. 「松果圆桌派」花式营销能否助力凉茶打好“翻身仗”?
  5. 解决Vscode Unable to start debugging
  6. VirtualBox如何添加ISO文件
  7. 【Computer Organization笔记08】指令系统概述,指令格式,寻址方式
  8. 37. 注入篇——旁注
  9. Deepsort工作原理分析
  10. 读良葛格初心者之路有感