1
+ < html > < head > </ head > < body id ="md " style ="visibility: visible; "> < meta charset ="UTF-8 "> < meta http-equiv ="content-type " content ="text/html;charset=UTF-8 "> < meta name ="viewport " content ="width=600, initial-scale=1 "> < style > body {max-width : 680px ;margin : auto;padding : 20px ;text-align : justify;line-height : 140% ;-webkit-font-smoothing : antialiased;-moz-osx-font-smoothing : grayscale;font-smoothing : antialiased;color : # 222 ;font-family : Palatino, Georgia, "Times New Roman" , serif}</ style > < style > @media print{* {-webkit-print-color-adjust : exact;text-shadow : none !important }}body {counter-reset : h1 paragraph line item list-item}@page {margin : 0 ;size : auto}# mdContextMenu {position : absolute;background : # 383838 ;cursor : default;border : 1px solid # 999 ;color : # fff ;padding : 4px 0px ;font-family : -apple-system, BlinkMacSystemFont, "Segoe UI" , Roboto, Oxygen, Ubuntu, "Helvetica Neue" , sans-serif;font-size : 85% ;font-weight : 600 ;border-radius : 4px ;box-shadow : 0px 3px 10px rgba (0 , 0 , 0 , 35% )}# mdContextMenu div {padding : 0px 20px }# mdContextMenu div : hover {background : # 1659d1 }.md code , .md pre {font-family : Menlo, Consolas, monospace;font-size : 85% ;text-align : left;line-height : 140% }.md .mediumToc code , .md longToc code , .md .shortToc code , .md h1 code , .md h2 code , .md h3 code , .md h4 code , .md h5 code , .md h6 code {font-size : unset}.md div .title {font-size : 26px ;font-weight : 800 ;line-height : 120% ;text-align : center}.md div .afterTitles {height : 10px }.md div .subtitle {text-align : center}.md iframe .textinsert , .md object .textinsert , .md iframe : not (.markdeep ){display : block;margin-top : 10px ;margin-bottom : 10px ;width : 100% ;height : 75vh ;border : 1px solid # 000 ;border-radius : 4px ;background : # f5f5f4 }.md .image {display : inline-block}.md img {max-width : 100% ;page-break-inside : avoid}.md li {text-align : left;text-indent : 0 }.md pre .listing {width : 100% ;tab-size : 4 ;-moz-tab-size : 4 ;-o-tab-size : 4 ;counter-reset : line;overflow-x : auto;resize : horizontal}.md pre .listing .linenumbers span .line : before {width : 30px ;margin-left : -28px ;font-size : 80% ;text-align : right;counter-increment : line;content : counter (line);display : inline-block;padding-right : 13px ;margin-right : 8px ;color : # ccc }.md div .tilde {margin : 20px 0 -10px ;text-align : center}.md .imagecaption , .md .tablecaption , .md .listingcaption {display : inline-block;margin : 7px 5px 12px ;text-align : justify;font-style : italic}.md img .pixel {image-rendering : -moz-crisp-edges;image-rendering : pixelated}.md blockquote .fancyquote {margin : 25px 0 25px ;text-align : left;line-height : 160% }.md blockquote .fancyquote ::before {content : "“" ;color : # DDD ;font-family : Times New Roman;font-size : 45px ;line-height : 0 ;margin-right : 6px ;vertical-align : -0.3em }.md span .fancyquote {font-size : 118% ;color : # 777 ;font-style : italic}.md span .fancyquote ::after {content : "”" ;font-style : normal;color : # DDD ;font-family : Times New Roman;font-size : 45px ;line-height : 0 ;margin-left : 6px ;vertical-align : -0.3em }.md blockquote .fancyquote .author {width : 100% ;margin-top : 10px ;display : inline-block;text-align : right}.md small {font-size : 60% }.md big {font-size : 150% }.md div .title , contents , .md .tocHeader , .md h1 , .md h2 , .md h3 , .md h4 , .md h5 , .md h6 , .md .shortTOC , .md .mediumTOC , .nonumberh1 , .nonumberh2 , .nonumberh3 , .nonumberh4 , .nonumberh5 , .nonumberh6 {font-family : Verdana, Helvetica, Arial, sans-serif;margin : 13.4px 0 13.4px ;padding : 15px 0 3px ;border-top : none;clear : both}.md .tocTop {display : none}.md h1 , .md h2 , .md h3 , .md h4 , .md h5 , .md h6 , .md .nonumberh1 , .md .nonumberh2 , .md .nonumberh3 , .md .nonumberh4 , .md .nonumberh5 , .md .nonumberh6 {page-break-after : avoid;break-after : avoid}.md svg .diagram {display : block;font-family : Menlo, Consolas, monospace;font-size : 85% ;text-align : center;stroke-linecap : round;stroke-width : 2px ;page-break-inside : avoid;stroke : # 000 ;fill : # 000 }.md svg .diagram .opendot {fill : # fff }.md svg .diagram .shadeddot {fill : # CCC }.md svg .diagram .dotteddot {stroke : # 000 ;stroke-dasharray : 4 ;fill : none}.md svg .diagram text {stroke : none}@media print{@page {margin : 1in 5mm ;transform : scale (150% )}}@media print{.md .pagebreak {page-break-after : always;visibility : hidden}}.md a {font-family : Georgia, Palatino, 'Times New Roman' }.md h1 , .md .tocHeader , .md .nonumberh1 {border-bottom : 3px solid;font-size : 20px ;font-weight : bold;}.md h1 , .md .nonumberh1 {counter-reset : h2 h3 h4 h5 h6}.md h2 , .md .nonumberh2 {counter-reset : h3 h4 h5 h6;border-bottom : 2px solid # 999 ;color : # 555 ;font-weight : bold;font-size : 18px ;}.md h3 , .md h4 , .md h5 , .md h6 , .md .nonumberh3 , .md .nonumberh4 , .md .nonumberh5 , .md .nonumberh6 {font-family : Verdana, Helvetica, Arial, sans-serif;color : # 555 ;font-size : 16px ;}.md h3 {counter-reset : h4 h5 h6}.md h4 {counter-reset : h5 h6}.md h5 {counter-reset : h6}.md div .table {margin : 16px 0 16px 0 }.md table {border-collapse : collapse;line-height : 140% ;page-break-inside : avoid}.md table .table {margin : auto}.md table .calendar {width : 100% ;margin : auto;font-size : 11px ;font-family : Verdana, Helvetica, Arial, sans-serif}.md table .calendar th {font-size : 16px }.md .today {background : # ECF8FA }.md .calendar .parenthesized {color : # 999 ;font-style : italic}.md table .table th {color : # FFF ;background-color : # AAA ;border : 1px solid # 888 ;padding : 8px 15px 8px 15px }.md table .table td {padding : 5px 15px 5px 15px ;border : 1px solid # 888 }.md table .table tr : nth-child (even){background : # EEE }.md pre .tilde {border-top : 1px solid # CCC ;border-bottom : 1px solid # CCC ;padding : 5px 0 5px 20px ;margin : 0 0 0 0 ;background : # FCFCFC ;page-break-inside : avoid}.md a .target {width : 0px ;height : 0px ;visibility : hidden;font-size : 0px ;display : inline-block}.md a : link , .md a : visited {color : # 38A ;text-decoration : none}.md a : link : hover {text-decoration : underline}.md dt {font-weight : 700 }.md dl > dd {margin-top : -8px ; margin-bottom : 8px }.md dl > table {margin : 35px 0 30px }.md code {page-break-inside : avoid;} @media print{.md .listing code {white-space : pre-wrap}}.md .endnote {font-size : 13px ;line-height : 15px ;padding-left : 10px ;text-indent : -10px }.md .bib {padding-left : 80px ;text-indent : -80px ;text-align : left}.markdeepFooter {font-size : 9px ;text-align : right;padding-top : 80px ;color : # 999 }.md .mediumTOC {float : right;font-size : 12px ;line-height : 15px ;border-left : 1px solid # CCC ;padding-left : 15px ;margin : 15px 0px 15px 25px }.md .mediumTOC .level1 {font-weight : 600 }.md .longTOC .level1 {font-weight : 600 ;display : block;padding-top : 12px ;margin : 0 0 -20px }.md .shortTOC {text-align : center;font-weight : bold;margin-top : 15px ;font-size : 14px }.md .admonition {position : relative;margin : 1em 0 ;padding : .4rem 1rem ;border-radius : .2rem ;border-left : 2.5rem solid rgba (68 , 138 , 255 , .4 );background-color : rgba (68 , 138 , 255 , .15 );}.md .admonition-title {font-weight : bold;border-bottom : solid 1px rgba (68 , 138 , 255 , .4 );padding-bottom : 4px ;margin-bottom : 4px ;margin-left : -1rem ;padding-left : 1rem ;margin-right : -1rem ;border-color : rgba (68 , 138 , 255 , .4 )}.md .admonition .tip {border-left : 2.5rem solid rgba (50 , 255 , 90 , .4 );background-color : rgba (50 , 255 , 90 , .15 )}.md .admonition .tip ::before {content : "\24d8" ;font-weight : bold;font-size : 150% ;position : relative;top : 3px ;color : rgba (26 , 128 , 46 , .8 );left : -2.95rem ;display : block;width : 0 ;height : 0 }.md .admonition .tip > .admonition-title {border-color : rgba (50 , 255 , 90 , .4 )}.md .admonition .warn , .md .admonition .warning {border-left : 2.5rem solid rgba (255 , 145 , 0 , .4 );background-color : rgba (255 , 145 , 0 , .15 )}.md .admonition .warn ::before , .md .admonition .warning ::before {content : "\26A0" ;font-weight : bold;font-size : 150% ;position : relative;top : 2px ;color : rgba (128 , 73 , 0 , .8 );left : -2.95rem ;display : block;width : 0 ;height : 0 }.md .admonition .warn > .admonition-title , .md .admonition .warning > .admonition-title {border-color : rgba (255 , 145 , 0 , .4 )}.md .admonition .error {border-left : 2.5rem solid rgba (255 , 23 , 68 , .4 );background-color : rgba (255 , 23 , 68 , .15 )}.md .admonition .error > .admonition-title {border-color : rgba (255 , 23 , 68 , .4 )}.md .admonition .error ::before {content : "\2612" ;font-family : "Arial" ;font-size : 200% ;position : relative;color : rgba (128 , 12 , 34 , .8 );top : -2px ;left : -3rem ;display : block;width : 0 ;height : 0 }.md .admonition p : last-child {margin-bottom : 0 }.md li .checked , .md li .unchecked {list-style : none;overflow : visible;text-indent : -1.2em }.md li .checked : before , .md li .unchecked : before {content : "\2611" ;display : block;float : left;width : 1em ;font-size : 120% }.md li .unchecked : before {content : "\2610" }</ style > < style > .md h1 ::before {
2
+ content : counter (h1) " " ;
3
+ counter-increment : h1;margin-right : 10px }
4
+
5
+ .md h2 ::before {
6
+ content : counter (h1) "." counter (h2) " " ;
7
+ counter-increment : h2;margin-right : 10px }
8
+
9
+ .md h3 ::before {
10
+ content : counter (h1) "." counter (h2) "." counter (h3) " " ;
11
+ counter-increment : h3;margin-right : 10px }
12
+
13
+ .md h4 ::before {
14
+ content : counter (h1) "." counter (h2) "." counter (h3) "." counter (h4) " " ;
15
+ counter-increment : h4;margin-right : 10px }
16
+
17
+ .md h5 ::before {
18
+ content : counter (h1) "." counter (h2) "." counter (h3) "." counter (h4) "." counter (h5) " " ;
19
+ counter-increment : h5;margin-right : 10px }
20
+
21
+ .md h6 ::before {
22
+ content : counter (h1) "." counter (h2) "." counter (h3) "." counter (h4) "." counter (h5) "." counter (h6) " " ;
23
+ counter-increment : h6;margin-right : 10px }
24
+
25
+ </ style > < style > .hljs {display : block;overflow-x : auto;padding : 0.5em ;background : # fff ;color : # 000 ;-webkit-text-size-adjust : none}.hljs-comment {color : # 006a00 }.hljs-keyword {color : # 02E }.hljs-literal , .nginx .hljs-title {color : # aa0d91 }.method , .hljs-list .hljs-title , .hljs-tag .hljs-title , .setting .hljs-value , .hljs-winutils , .tex .hljs-command , .http .hljs-title , .hljs-request , .hljs-status , .hljs-name {color : # 008 }.hljs-envvar , .tex .hljs-special {color : # 660 }.hljs-string {color : # c41a16 }.hljs-tag .hljs-value , .hljs-cdata , .hljs-filter .hljs-argument , .hljs-attr_selector , .apache .hljs-cbracket , .hljs-date , .hljs-regexp {color : # 080 }.hljs-sub .hljs-identifier , .hljs-pi , .hljs-tag , .hljs-tag .hljs-keyword , .hljs-decorator , .ini .hljs-title , .hljs-shebang , .hljs-prompt , .hljs-hexcolor , .hljs-rule .hljs-value , .hljs-symbol , .hljs-symbol .hljs-string , .hljs-number , .css .hljs-function , .hljs-function .hljs-title , .coffeescript .hljs-attribute {color : # A0C }.hljs-function .hljs-title {font-weight : bold;color : # 000 }.hljs-class .hljs-title , .smalltalk .hljs-class , .hljs-type , .hljs-typename , .hljs-tag .hljs-attribute , .hljs-doctype , .hljs-class .hljs-id , .hljs-built_in , .setting , .hljs-params , .clojure .hljs-attribute {color : # 5c2699 }.hljs-variable {color : # 3f6e74 }.css .hljs-tag , .hljs-rule .hljs-property , .hljs-pseudo , .hljs-subst {color : # 000 }.css .hljs-class , .css .hljs-id {color : # 9b703f }.hljs-value .hljs-important {color : # ff7700 ;font-weight : bold}.hljs-rule .hljs-keyword {color : # c5af75 }.hljs-annotation , .apache .hljs-sqbracket , .nginx .hljs-built_in {color : # 9b859d }.hljs-preprocessor , .hljs-preprocessor * , .hljs-pragma {color : # 643820 }.tex .hljs-formula {background-color : # eee ;font-style : italic}.diff .hljs-header , .hljs-chunk {color : # 808080 ;font-weight : bold}.diff .hljs-change {background-color : # bccff9 }.hljs-addition {background-color : # baeeba }.hljs-deletion {background-color : # ffc8bd }.hljs-comment .hljs-doctag {font-weight : bold}.method .hljs-id {color : # 000 }</ style > < style > div .title { padding-top : 40px ; } div .afterTitles { height : 15px ; }</ style > < span class ="md "> < p >
26
+ < a class ="target " name ="androidlint "> </ a > < a class ="target " name ="androidlint "> </ a > < a class ="target " name ="toc1 "> </ a > </ p > < h1 > Android Lint</ h1 >
27
+ < p >
28
+
29
+
30
+ Android Lint is a static analysis tool (which despite the name is not
31
+ limited to Android, and within Google for example is used to analyze
32
+ Java and Kotlin server side code as well as Android and even desktop
33
+ software like IDEs.)
34
+
35
+ </ p > < p >
36
+
37
+ Lint's focus is on finding bugs (whether they are related to
38
+ correctness, performance, security, internationalization, usability and
39
+ so on); it's not a source code style checker.
40
+
41
+ </ p > < p >
42
+
43
+ Available documentation:
44
+
45
+ </ p > < p >
46
+
47
+ </ p > < ul >
48
+ < li class ="asterisk "> < a href ="features.md.html "> Lint Features</ a >
49
+ </ li >
50
+ < li class ="asterisk "> < a href ="changes.md.html "> Recent Changes</ a >
51
+ </ li >
52
+ < li class ="asterisk "> Documents for users of lint, in the < code > usage</ code > folder:
53
+ < ul >
54
+ < li class ="minus "> < a href ="usage/suppressing.md.html "> How to suppress incidents</ a >
55
+ </ li >
56
+ < li class ="minus "> < a href ="usage/baselines.md.html "> How to use baselines</ a >
57
+ </ li >
58
+ < li class ="minus "> < a href ="usage/lintxml.md.html "> How to use < code > lint.xml</ code > files</ a >
59
+ </ li >
60
+ < li class ="minus "> < a href ="usage/variables.md.html "> Environment variables and properties</ a >
61
+ </ li > </ ul >
62
+ </ li > < li class ="asterisk "> Documents for authors of additional lint checks, in the
63
+ < code > api-guide</ code > folder:
64
+ < ul >
65
+ < li class ="minus "> < a href ="book.md.html "> Complete Book</ a > , containing all of the below
66
+ documents as chapters, suitable for offline reading
67
+ </ li >
68
+ < li class ="minus "> < a href ="api-guide/basics.md.html "> Basics</ a >
69
+ </ li >
70
+ < li class ="minus "> < a href ="api-guide/example.md.html "> A Sample Lint Check</ a >
71
+ </ li >
72
+ < li class ="minus "> < a href ="api-guide/publishing.md.html "> Publishing a Lint check</ a >
73
+ </ li >
74
+ < li class ="minus "> < a href ="api-guide/unit-testing.md.html "> Unit Testing</ a >
75
+ </ li >
76
+ < li class ="minus "> < a href ="api-guide/quickfixes.md.html "> Adding Quick Fixes</ a >
77
+ </ li >
78
+ < li class ="minus "> < a href ="api-guide/terminology.md.html "> Terminology</ a >
79
+ </ li >
80
+ < li class ="minus "> < a href ="api-guide/partial-analysis.md.html "> Partial analysis</ a >
81
+ </ li >
82
+ < li class ="minus "> < a href ="api-guide/faq.md.html "> Frequently Asked Questions</ a >
83
+ </ li > </ ul >
84
+ </ li > < li class ="asterisk "> Documents for lint internals, intended for developers of lint
85
+ itself, in the < code > internal</ code > folder:
86
+ < ul >
87
+ < li class ="minus "> < a href ="internal/guidelines.md.html "> Guidelines</ a > </ li > </ ul > </ li > </ ul >
88
+
89
+ < p > </ p > < p >
90
+
91
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
92
+
93
+ </ p > < p >
94
+
95
+ Documentation History:
96
+
97
+ </ p > < p >
98
+
99
+ </ p > < ul >
100
+ < li class ="asterisk "> March 2021: Initial version</ li > </ ul >
101
+
102
+ < p > </ p > < p >
103
+
104
+ </ p > </ span > < div id ="mdContextMenu " style ="visibility:hidden "> </ div > < div class ="markdeepFooter "> < i > formatted by < a href ="https://casual-effects.com/markdeep " style ="color:#999 "> Markdeep 1.13 </ a > </ i > < div style ="display:inline-block;font-size:13px;font-family:'Times New Roman',serif;vertical-align:middle;transform:translate(-3px,-1px)rotate(135deg); "> ✒</ div > </ div > </ body > </ html >
0 commit comments