- 浏览: 74349 次
- 性别:
- 来自: 重庆
文章分类
最新评论
-
成大大的:
Android自动化测试从入门到精通网盘地址1:https:/ ...
Android自动化测试 -
opadnjmdl:
Android自动化测试从入门到精通:http://pan.b ...
Android自动化测试 -
lxfgrace:
都是可以的,我验证过的
使用monkeyrunner命令行、文件、eclipse平台运行全解 -
噬魂:
为啥上面和下面的配置不一样呢,哪个是正确的:1.2 配置Pyt ...
使用monkeyrunner命令行、文件、eclipse平台运行全解
1. Correctness
===========
1.1 AdapterViewChildren
-------------------
Summary: Checksthat AdapterViews do not define their children in XML
Priority: 10 / 10
Severity: Warning
Category:Correctness
AdapterViews such as ListViews must be configured with datafrom Java code, such as a ListAdapter.
More information:http://developer.android.com/reference/android/widget/AdapterView.html
1.2 OnClick
-------
Summary: Ensuresthat onClick attribute values refer to real methods
Priority: 10 / 10
Severity: Error
Category:Correctness
The onClick attribute value should be the name of a methodin this View's context to invoke when the view is clicked. This name mustcorrespond to a public method that takes exactly one parameter of type View.
Must be a string value, using '\;' to escape characters suchas '\n' or '\uxxxx' for a unicode character.
1.3 SuspiciousImport
----------------
Summary: Checksfor 'import android.R' statements, which are usually accidental
Priority: 9 / 10
Severity: Warning
Category:Correctness
Importing android.R is usually not intentional; it sometimeshappens when you use an IDE and ask it to automatically add imports at a timewhen your project's R class it not present.
Once the import is there you might get a lot of"confusing" error messages because of course the fields available onandroid.R are not the ones you'd expect from just looking at your own R class.
1.4 WrongViewCast
-------------
Summary: Looksfor incorrect casts to views that according to the XML are of a different type
Priority: 9 / 10
Severity: Error
Category:Correctness
Keeps track of the view types associated with ids and if itfinds a usage of the id in the Java code it ensures that it is treated as thesame type.
1.5 MissingPrefix
-------------
Summary: DetectXML attributes not using the Android namespace
Priority: 8 / 10
Severity: Warning
Category:Correctness
Most Android views have attributes in the Android namespace.When referencing these attributes you *must* include the namespace prefix, oryour attribute will be interpreted by aapt as just a custom attribute.
1.6 NamespaceTypo
-------------
Summary: Looksfor misspellings in namespace declarations
Priority: 8 / 10
Severity: Warning
Category: Correctness
Accidental misspellings in namespace declarations can leadto some very obscure error messages. This check looks for potentialmisspellings to help track these down.
1.7 Proguard
--------
Summary: Looksfor problems in proguard config files
Priority: 8 / 10
Severity: Fatal
Category:Correctness
Using -keepclasseswithmembernames in a proguard config fileis not correct; it can cause some symbols to be renamed which should not be.
Earlier versions of ADT used to create proguard.cfg fileswith the wrong format. Instead of -keepclasseswithmembernames use-keepclasseswithmembers, since the old flags also implies "allowshrinking" which means symbols only referred to from XML and not Java(such as possibly CustomViews) can get deleted.
More information: http://http://code.google.com/p/android/issues/detail?id=16384
1.8 ScrollViewCount
---------------
Summary: Checksthat ScrollViews have exactly one child widget
Priority: 8 / 10
Severity: Warning
Category:Correctness
ScrollViews can only have one child widget. If you want morechildren, wrap them in a container layout.
1.9 StyleCycle
----------
Summary: Looksfor cycles in style definitions
Priority: 8 / 10
Severity: Fatal
Category:Correctness
There should be no cycles in style definitions as this canlead to runtime exceptions.
More information:http://developer.android.com/guide/topics/ui/themes.html#Inheritance
1.10 UnknownId
---------
Summary: Checksfor id references in RelativeLayouts that are not defined elsewhere
Priority: 8 / 10
Severity: Fatal
Category:Correctness
The "@+id/" syntax refers to an existing id, orcreates a new one if it has not already been defined elsewhere. However, thismeans that if you have a typo in your reference, or if the referred view nolonger exists, you do not get a warning since the id will be created on demand.This check catches errors where you have renamed an id without updating all ofthe references to it.
1.11 DuplicateIds
------------
一个Layout内部的id应该是唯一的。
Summary: Checksfor duplicate ids within a single layout
Priority: 7 / 10
Severity: Warning
Category:Correctness
Within a layout, id's should be unique since otherwisefindViewById() can return an unexpected view.
1.12 InconsistentArrays
------------------
字符串国际化中,同一名字的的String-Array对应的item值不相同
Summary: Checksfor inconsistencies in the number of elements in arrays
Priority: 7 / 10
Severity: Warning
Category:Correctness
When an array is translated in a different locale, it shouldnormally have the same number of elements as the original array. When adding orremoving elements to an array, it is easy to forget to update all the locales,and this lint warning finds inconsistencies like these.
Note however that there may be cases where you really wantto declare a different number of array items in each configuration (for examplewhere the array represents available options, and those options differ fordifferent layout orientations and so on), so use your own judgement to decideif this is really an error.
You can suppress this error type if it finds false errors inyour project.
1.13 NestedScrolling
---------------
Summary: Checkswhether a scrolling widget has any nested scrolling widgets within
Priority: 7 / 10
Severity: Warning
Category:Correctness
A scrolling widget such as a ScrollView should not containany nested scrolling widgets since this has various usability issues
1.14 ResourceAsColor
---------------
Summary: Looksfor calls to setColor where a resource id is passed instead of a resolved color
Priority: 7 / 10
Severity: Error
Category: Correctness
Methods that take a color in the form of an integer shouldbe passed an RGB triple, not the actual color resource id. You must call getResources().getColor(resource)to resolve the actual color value first.
1.15 ScrollViewSize
--------------
Summary: Checksthat ScrollViews use wrap_content in scrolling dimension
Priority: 7 / 10
Severity: Warning
Category:Correctness
ScrollView children must set their layout_width orlayout_height attributes to wrap_content rather than fill_parent or match_parentin the scrolling dimension
1.16 TextViewEdits
-------------
Summary: Looksfor TextViews being used for input
Priority: 7 / 10
Severity: Warning
Category:Correctness
Using a <TextView> to input text is generally anerror, you should be using <EditText> instead. EditText is a subclass of TextView, and someof the editing support is provided by TextView, so it's possible to set some input-relatedproperties on a TextView. However, using a TextView along with input attributesis usually a cut & paste error. To input text you should be using<EditText>.
This check also checks subclasses of TextView, such asButton and CheckBox, since these have the same issue: they should not be usedwith editable attributes.
1.17 CommitPrefEdits
---------------
Summary: Looksfor code editing a SharedPreference but forgetting to call commit() on it
Priority: 6 / 10
Severity: Warning
Category:Correctness
After calling edit() on a SharedPreference, you must callcommit() or apply() on the editor to save the results.
1.18 DuplicateIncludedIds
--------------------
Summary: Checksfor duplicate ids across layouts that are combined with include tags
Priority: 6 / 10
Severity: Warning
Category:Correctness
It's okay for two independent layouts to use the same ids.However, if layouts are combined with include tags, then the id's need to beunique within any chain of included layouts, or Activity#findViewById() canreturn an unexpected view.
1.19 LibraryCustomView
-----------------
Summary: Flagscustom attributes in libraries, which must use the res-auto-namespace instead
Priority: 6 / 10
Severity: Error
Category:Correctness
When using a custom view with custom attributes in a libraryproject, the layout must use the special namespacehttp://schemas.android.com/apk/res-auto instead of a URI which includes thelibrary project's own package. This will be used to automatically adjust thenamespace of the attributes when the library resources are merged into theapplication project.
1.20 MultipleUsesSdk
---------------
Summary: Checksthat the <uses-sdk> element appears at most once
Priority: 6 / 10
Severity: Fatal
Category:Correctness
The <uses-sdk> element should appear just once; thetools will *not* merge the contents of all the elements so if you split up theatttributes across multiple elements, only one of them will take effect. To fixthis, just merge all the attributes from the various elements into a single<uses-sdk> element.
More information:http://developer.android.com/guide/topics/manifest/uses-sdk-element.html
1.21 NewApi
------
代码中使用的某些API高于Manifest中的MinSDK
Summary: FindsAPI accesses to APIs that are not supported in all targeted API versions
Priority: 6 / 10
Severity: Error
Category:Correctness
This check scans through all the Android API calls in the applicationand warns about any calls that are not available on *all* versions targeted by thisapplication (according to its minimum SDK attribute in the manifest).
If your code is *deliberately* accessing newer APIs, and youhave ensured (e.g. with conditional execution) that this code will only ever becalled on a supported platform, then you can annotate your class or method withthe @TargetApi annotation specifying the local minimum SDK to apply, such as@TargetApi(11),such that this check considers 11 rather than your manifest file's minimum SDKas the required API level.
1.22 Registered
----------
Activity/Service/ContentProvider没有通过AndroidManifest注册
Summary: Ensuresthat Activities, Services and Content Providers are registered in the manifest
Priority: 6 / 10
Severity: Warning
Category:Correctness
Activities, services and content providers should beregistered in the AndroidManifext.xml file using <activity>,<service> and <provider> tags.
If your activity is simply a parent class intended to be subclassedby other "real" activities, make it an abstract class.
More information:http://developer.android.com/guide/topics/manifest/manifest-intro.html
1.23 SdCardPath
----------
Summary: Looksfor hardcoded references to /sdcard
Priority: 6 / 10
Severity: Warning
Category:Correctness
Your code should not reference the /sdcard path directly;instead use Environment.getExternalStorageDirectory().getPath()
More information:http://developer.android.com/guide/topics/data/data-storage.html#filesExternal
1.24 ShowToast
---------
Summary: Looksfor code creating a Toast but forgetting to call show() on it
Priority: 6 / 10
Severity: Warning
Category:Correctness
Toast.makeText() creates a Toast but does *not* show it. Youmust call show() on the resulting object to actually make the Toast appear.
1.25 ValidFragment
-------------
Summary: Ensuresthat Fragment subclasses can be instantiated
Priority: 6 / 10
Severity: Warning
Category:Correctness
From the Fragment documentation: *Every* fragment must havean empty constructor, so it can be instantiated when restoring its activity'sstate. It is strongly recommended that subclasses do not have otherconstructors with parameters, since these constructors will not be called whenthe fragment is re-instantiated; instead, arguments can be supplied by thecaller with setArguments(Bundle) and later retrieved by the Fragment withgetArguments().
More information:http://developer.android.com/reference/android/app/Fragment.html#Fragment()
1.26 WrongManifestParent
-------------------
Summary: Checksthat various manifest elements are declared in the right place
Priority: 6 / 10
Severity: Fatal
Category:Correctness
The <uses-library> element should be defined as adirect child of the <application> tag, not the <manifest> tag or an<activity> tag. Similarly, a <uses-sdk> tag much be declared at theroot level, and so on. This check looks for incorrect declaration locations inthe manifest, and complains if an element is found in the wrong place.
More information:http://developer.android.com/guide/topics/manifest/manifest-intro.html
1.27 DuplicateActivity
-----------------
Summary: Checksthat an activity is registered only once in the manifest
Priority: 5 / 10
Severity: Error
Category:Correctness
An activity should only be registered once in the manifest.If it is accidentally registered more than once, then subtle errors can occur,since attribute declarations from the two elements are not merged, so you may accidentallyremove previous declarations.
1.28 ManifestOrder
-------------
Summary: Checksfor manifest problems like <uses-sdk> after the <application> tag
Priority: 5 / 10
Severity: Warning
Category:Correctness
The <application> tag should appear after the elementswhich declare which version you need, which features you need, which librariesyou need, and so on. In the past there have been subtle bugs (such as themesnot getting applied correctly) when the <application> tag appears beforesome of these other elements, so it's best to order your manifest in thelogical dependency order.
1.29 StateListReachable
------------------
Summary: Looksfor unreachable states in a <selector>
Priority: 5 / 10
Severity: Warning
Category:Correctness
In a selector, only the last child in the state list shouldomit a state qualifier. If not, all subsequent items in the list will beignored since the given item will match all.
1.30 UnknownIdInLayout
-----------------
Summary: Makessure that @+id references refer to views in the same layout
Priority: 5 / 10
Severity: Warning
Category:Correctness
The "@+id/" syntax refers to an existing id, orcreates a new one if it has not already been defined elsewhere. However, thismeans that if you have a typo in your reference, or if the referred view nolonger exists, you do not get a warning since the id will be created on demand.
This is sometimes intentional, for example where you arereferring to a view which is provided in a different layout via an include.However, it is usually an accident where you have a typo or you have renamed aview without updating all the references to it.
1.31 UnlocalizedSms
--------------
Summary: Looksfor code sending text messages to unlocalized phone numbers
Priority: 5 / 10
Severity: Warning
Category:Correctness
SMS destination numbers must start with a country code orthe application code must ensure that the SMS is only sent when the user is inthe same country as the receiver.
1.32 GridLayout
----------
Summary: Checksfor potential GridLayout errors like declaring rows and columns outside thedeclared grid dimensions
Priority: 4 / 10
Severity: Fatal
Category:Correctness
Declaring a layout_row or layout_column that falls outsidethe declared size of a GridLayout's rowCount or columnCount is usually anunintentional error.
1.33 ExtraText
---------
Summary: Looksfor extraneous text in layout files
Priority: 3 / 10
Severity: Warning
Category:Correctness
Layout resource files should only contain elements andattributes. Any XML text content found in the file is likely accidental (andpotentially dangerous if the text resembles XML and the developer believes thetext to be functional)
1.34 PrivateResource
---------------
Summary: Looksfor references to private resources
Priority: 3 / 10
Severity: Fatal
Category: Correctness
Private resources should not be referenced; the may not bepresent everywhere, and even where they are they may disappear without notice.
To fix this, copy the resource into your own project. Youcan find the platform resources under $ANDROID_SK/platforms/android-$VERSION/data/res/.
1.35 ProguardSplit
-------------
Summary: Checksfor old proguard.cfg files that contain generic Android rules
Priority: 3 / 10
Severity: Warning
Category:Correctness
Earlier versions of the Android tools bundled a single"proguard.cfg" file containing a ProGuard configuration file suitablefor Android shrinking and obfuscation. However, that version was copied intonew projects, which means that it does not continue to get updated as weimprove the default ProGuard rules for Android.
In the new version of the tools, we have split the ProGuardconfiguration into two halves:
* A simple configuration file containing onlyproject-specific flags, in your project
* A generic configuration file containing the recommendedset of ProGuard options for Android projects. This generic file lives in theSDK install directory which means that it gets updated along with the tools.
In order for this to work, the proguard.config property inthe project.properties file now refers to a path, so you can reference both thegeneric file as well as your own (and any additional files too).
To migrate your project to the new setup, create a newproguard-project.txt file in your project containing any project specificProGuard flags as well as any customizations you have made, then update yourproject.properties file to contain:
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-projec.txt
1.36 Deprecated
----------
使用已经废弃的API
Summary: Looksfor usages of deprecated layouts, attributes, and so on.
Priority: 2 / 10
Severity: Warning
Category:Correctness
Deprecated views, attributes and so on are deprecatedbecause there is a better way to do something. Do it that new way. You've beenwarned.
1.37 PxUsage
-------
避免使用px,使用dp代替
Summary: Looksfor use of the "px" dimension
Priority: 2 / 10
Severity: Warning
Category:Correctness
For performance reasons and to keep the code simpler, theAndroid system uses pixels as the standard unit for expressing dimension orcoordinate values.
That means that the dimensions of a view are alwaysexpressed in the code using pixels, but always based on the current screendensity. For instance, if myView.getWidth() returns 10, the view is 10 pixelswide on the current screen, but on a device with a higher density screen, thevalue returned might be 15. If you use pixel values in your application code towork with bitmaps that are not pre-scaled for the current screen density, youmight need to scale the pixel values that you use in your code to match theun-scaled bitmap source.
More information:http://developer.android.com/guide/practices/screens_support.html#screen-independence
1.38 UsesMinSdkAttributes
--------------------
Summary: Checksthat the minimum SDK and target SDK attributes are defined
Priority: 2 / 10
Severity: Warning
Category:Correctness
The manifest should contain a <uses-sdk> element whichdefines the minimum minimum API Level required for the application to run, aswell as the target version (the highest API level you have tested the versionfor.)
More information:http://developer.android.com/guide/topics/manifest/uses-sdk-element.html
1.39 UnusedNamespace
---------------
Summary: Findsunused namespaces in XML documents
Priority: 1 / 10
Severity: Warning
Category:Correctness
Unused namespace declarations take up space and requireprocessing that is not necessary
2. Correctness:Messages
====================
2.1 StringFormatInvalid
-------------------
Summary: Checksthat format strings are valid
Priority: 9 / 10
Severity: Error
Category:Correctness:Messages
If a string contains a '%' character, then the string may bea formatting string which will be passed to String.format from Java code toreplace each '%' occurrence with specific values.
This lint warning checks for two related problems:
(1) Formatting strings that are invalid, meaning thatString.format will throw exceptions at runtime when attempting to use theformat string.
(2) Strings containing '%' that are not formatting stringsgetting passed to a String.format call. In this case the '%' will need to beescaped as '%%'.
NOTE: Not all Strings which look like formatting strings areintended for use by String.format; for example, they may contain date formatsintended for android.text.format.Time#format(). Lint cannot always figure outthat a String is a date format, so you may get false warnings in thosescenarios. See the suppress help topic for information on how to suppresserrors in that case.
2.2 StringFormatMatches
-------------------
Summary: Ensuresthat the format used in <string> definitions is compatible with theString.format call
Priority: 9 / 10
Severity: Error
Category:Correctness:Messages
This lint check ensures the following:
(1) If there are multiple translations of the format string,then all translations use the same type for the same numbered arguments
(2) The usage of the format string in Java is consistentwith the format string, meaning that the parameter types passed toString.format matches those in the format string.
2.3 MissingTranslation
------------------
字符串国际化不完全
Summary: Checksfor incomplete translations where not all strings are translated
Priority: 8 / 10
Severity: Fatal
Category:Correctness:Messages
If an application has more than one locale, then all thestrings declared in one language should also be translated in all otherlanguages.
By default this detector allows regions of a language tojust provide a subset of the strings and fall back to the standard languagestrings. You can require all regions to provide a full translation by settingthe environment variable ANDROID_LINT_COMPLETE_REGIONS.
2.4 ExtraTranslation
----------------
国际化的字符串,在默认位置(defaultlocale)中没有定义
Summary: Checksfor translations that appear to be unused (no default language string)
Priority: 6 / 10
Severity: Warning
Category:Correctness:Messages
If a string appears in a specific language translation file,but there is no corresponding string in the default locale, then this string isprobably unused. (It's technically possible that your application is only intendedto run in a specific locale, but it's still a good idea to provide a fallback.)
2.5 StringFormatCount
-----------------
Summary: Ensuresthat all format strings are used and that the same number is defined acrosstranslations
Priority: 5 / 10
Severity: Warning
Category:Correctness:Messages
When a formatted string takes arguments, it usually needs toreference the same arguments in all translations. There are cases where this isnot the case, so this issue is a warning rather than an error by default.However, this usually happens when a language is not translated or updatedcorrectly.
3. Security
========
3.1 GrantAllUris
------------
Summary: Checksfor <grant-uri-permission> elements where everything is shared
Priority: 7 / 10
Severity: Warning
Category:Security
The <grant-uri-permission> element allows specificpaths to be shared. This detector checks for a path URL of just '/'(everything), which is probably not what you want; you should limit access to asubset.
3.2 SetJavaScriptEnabled
--------------------
不确定你的程序中确实需要JavaScript就不要执行SetJavaScriptEnabled。
Summary: Looksfor invocations of android.webkit.WebSettings.setJavaScriptEnabled
Priority: 6 / 10
Severity: Warning
Category:Security
Your code should not invoke setJavaScriptEnabled if you arenot sure that your app really requires JavaScript support.
More information:http://developer.android.com/guide/practices/security.html
3.3 ExportedContentProvider
-----------------------
ContentProvider exported为true时,设置一个Permission,让使用者获取了Permission才能使用。
Summary: Checksfor exported content providers that do not require permissions
Priority: 5 / 10
Severity: Warning
Category:Security
Content providers are exported by default and anyapplication on the system can potentially use them to read and write data. Ifthe contentprovider provides access to sensitive data, it should be protectedby specifying export=false in the manifest or by protecting it with apermission that can be granted to other applications.
3.4 ExportedReceiver
----------------
Receiver的exported为true时,设置一个Permission,让使用者获取了Permission才能使用。
Summary: Checksfor exported receivers that do not require permissions
Priority: 5 / 10
Severity: Warning
Category:Security
Exported receivers (receivers which either set exported=trueor contain an intent-filter and do not specify exported=false) should define apermission that an entity must have in order to launch the receiver or bind toit. Without this, any application can use this receiver.
3.5 ExportedService
---------------
Service的exported为true时,设置一个Permission,让使用者获取了Permission才能使用。
Summary: Checksfor exported services that do not require permissions
Priority: 5 / 10
Severity: Warning
Category:Security
Exported services (services which either set exported=trueor contain an intent-filter and do not specify exported=false) should define apermission that an entity must have in order to launch the service or bind toit. Without this, any application can use this service.
3.6 HardcodedDebugMode
------------------
不要在manifest中设置android:debuggable。
设置它,编译的任何版本都要采用指定的debug模式。不设置,编译Eng版本采用debug模式;编译User版本采用release模式。
Summary: Checksfor hardcoded values of android:debuggable in the manifest
Priority: 5 / 10
Severity: Warning
Category:Security
It's best to leave out the android:debuggable attribute fromthe manifest. If you do, then the tools will automatically insertandroid:debuggable=true when building an APK to debug on an emulator or device.And when you perform a release build, such as Exporting APK, it willautomatically set it to false.
If on the other hand you specify a specific value in themanifest file, then the tools will always use it. This can lead to accidentallypublishing your app with debug information.
3.7 WorldReadableFiles
------------------
Summary: Checksfor openFileOutput() and getSharedPreferences() calls passing MODE_WORLD_READABLE
Priority: 4 / 10
Severity: Warning
Category:Security
There are cases where it is appropriate for an applicationto write world readable files, but these should be reviewed carefully to ensurethat they contain no private data that is leaked to other applications.
3.8 WorldWriteableFiles
-------------------
Summary: Checksfor openFileOutput() and getSharedPreferences() calls passing MODE_WORLD_WRITEABLE
Priority: 4 / 10
Severity: Warning
Category:Security
There are cases where it is appropriate for an applicationto write world writeable files, but these should be reviewed carefully toensure that they contain no private data, and that if the file is modified by amalicious application it does not trick or compromise your application.
3.9 ExportedActivity
----------------
Activity的exported为true时,设置一个Permission,让使用者获取了Permission才能使用。
Summary: Checksfor exported activities that do not require permissions
Priority: 2 / 10
Severity: Warning
Category:Security
Exported activities (activities which either setexported=true or contain an intent-filter and do not specify exported=false)should define a permission that an entity must have in order to launch theactivity or bind to it. Without this, any application can use this activity.
4. Performance
===========
4.1 DrawAllocation
--------------
避免在绘制或者解析布局(draw/layout)时分配对象。E.g.,Ondraw()中实例化Paint对象。
Summary: Looksfor memory allocations within drawing code
Priority: 9 / 10
Severity: Warning
Category:Performance
You should avoid allocating objects during a drawing orlayout operation. These are called frequently, so a smooth UI can beinterrupted by garbage collection pauses caused by the object allocations.
The way this is generally handled is to allocate the neededobjects up front and to reuse them for each drawing operation.
Some methods allocate memory on your behalf (such asBitmap.create), and these should be handled in the same way.
4.2 ObsoleteLayoutParam
-------------------
Layout中有无用的参数。
Summary: Looksfor layout params that are not valid for the given parent layout
Priority: 6 / 10
Severity: Warning
Category:Performance
The given layout_param is not defined for the given layout,meaning it has no effect. This usually happens when you change the parentlayout or move view code around without updating the layout params. This willcause useless attribute processing at runtime, and is misleading for othersreading the layout so the parameter should be removed.
4.3 UseCompoundDrawables
--------------------
可优化的布局:如包含一个Imageview和一个TextView的线性布局,可被采用CompoundDrawable的TextView代替。
Summary: Checkswhether the current node can be replaced by a TextView using compounddrawables.
Priority: 6 / 10
Severity: Warning
Category: Performance
A LinearLayout which contains an ImageView and a TextViewcan be more efficiently handled as a compound drawable.
There's a lint quickfix to perform this conversion in theEclipse plugin.
4.4 FieldGetter
-----------
直接访问类里的内部域,不要用getter方法。这样会快3倍。
Summary: Suggestsreplacing uses of getters with direct field access within a class
Priority: 4 / 10
Severity: Warning
Category:Performance
NOTE: This issue is disabled by default! You can enable itby adding --enable FieldGetter
Accessing a field within the class that defines a getter forthat field is at least 3 times faster than calling the getter. For simplegetters that do nothing other than return the field, you might want to justreference the local field directly instead.
More information: http://developer.android.com/guide/practices/design/performance.html#internal_get_set
4.5 HandlerLeak
-----------
Summary: Ensuresthat Handler classes do not hold on to a reference to an outer class
Priority: 4 / 10
Severity: Warning
Category:Performance
In Android, Handler classes should be static or leaks mightoccur. Messages enqueued on the application thread's MessageQueue also retaintheir target Handler. If the Handler is an inner class, its outer class will beretained as well. To avoid leaking the outer class, declare the Handler as astatic nested class with a WeakReference to its outer class.
4.6 MergeRootFrame
--------------
Summary: Checkswhether a root <FrameLayout> can be replaced with a <merge> tag
Priority: 4 / 10
Severity: Warning
Category:Performance
If a <FrameLayout> is the root of a layout and doesnot provide background or padding etc, it can often be replaced with a<merge> tag which is slightly more efficient. Note that this depends oncontext, so make sure you understand how the <merge> tag works beforeproceeding.
More information:http://android-developers.blogspot.com/2009/03/android-layout-tricks-3-optimize-by.html
4.7 UseSparseArrays
---------------
尽量用Android的SparseArray代替Hashmap
Summary: Looksfor opportunities to replace HashMaps with the more efficient SparseArray
Priority: 4 / 10
Severity: Warning
Category:Performance
For maps where the keys are of type integer, it's typicallymore efficient to use the Android SparseArray API. This check identifiesscenarios where you might want to consider using SparseArray instead of HashMapfor better performance.
This is *particularly* useful when the value types areprimitives like ints, where you can use SparseIntArray and avoid auto-boxingthe values from int to Integer.
If you need to construct a HashMap because you need to callan API outside of your control which requires a Map, you can suppress thiswarning using for example the @SuppressLint annotation.
4.8 UseValueOf
----------
新建一个对象时候,尽量考虑用带有valueOf()的封装类实现。比如:Integer.valueOf().
Summary: Looksfor usages of "new" for wrapper classes which should use "valueOf"instead
Priority: 4 / 10
Severity: Warning
Category:Performance
You should not call the constructor for wrapper classesdirectly, such as"new Integer(42)". Instead, call the"valueOf" factory method, such as Integer.valueOf(42). This willtypically use less memory because common integers such as 0 and 1 will share asingle instance.
4.9 DisableBaselineAlignment
------------------------
如果LinearLayout被用于嵌套的layout空间计算,它的android:baselineAligned属性应该设置成false,以加速layout计算。
Summary: Looksfor LinearLayouts which should set android:baselineAligned=false
Priority: 3 / 10
Severity: Warning
Category:Performance
When a LinearLayout is used to distribute the spaceproportionally between nested layouts, the baseline alignment property shouldbe turned off to make the layout computation faster.
4.10 FloatMath
---------
使用FloatMath代替Math。
Summary: Suggestsreplacing java.lang.Math calls with android.util.FloatMath to avoid conversions
Priority: 3 / 10
Severity: Warning
Category:Performance
On modern hardware, "double" is just as fast as"float" though of course it takes more memory. However, if you areusing floats and you need to compute the sine, cosine or square root, then itis better to use the android.util.FloatMath class instead of java.lang.Mathsince you can call methods written to operate on floats, so you avoidconversions back and forth to double.
More information:http://developer.android.com/guide/practices/design/performance.html#avoidfloat
4.11 InefficientWeight
-----------------
Summary: Looksfor inefficient weight declarations in LinearLayouts
Priority: 3 / 10
Severity: Warning
Category:Performance
When only a single widget in a LinearLayout defines aweight, it is more efficient to assign a width/height of 0dp to it since itwill absorb all the remaining space anyway. With a declared width/height of 0dpit does not have to measure its own size first.
4.12 NestedWeights
-------------
避免嵌套weight,那将拖累执行效率
Summary: Looksfor nested layout weights, which are costly
Priority: 3 / 10
Severity: Warning
Category:Performance
Layout weights require a widget to be measured twice. When aLinearLayout with non-zero weights is nested inside another LinearLayout withnon-zero weights, then the number of measurements increase exponentially.
4.13 Overdraw
--------
如果为RootView指定一个背景Drawable,会先用Theme的背景绘制一遍,然后才用指定的背景,这就是所谓的“Overdraw”。
可以设置theme的background为null来避免。
Summary: Looksfor overdraw issues (where a view is painted only to be fully painted over)
Priority: 3 / 10
Severity: Warning
Category:Performance
If you set a background drawable on a root view, then youshould use a custom theme where the theme background is null. Otherwise, thetheme background will be painted first, only to have your custom backgroundcompletely cover it; this is called "overdraw".
NOTE: This detector relies on figuring out which layouts areassociated with which activities based on scanning the Java code, and it'scurrently doing that using an inexact pattern matching algorithm. Therefore, itcan incorrectly conclude which activity the layout is associated with and then wronglycomplain that a background-theme is hidden.
If you want your custom background on multiple pages, thenyou should consider making a custom theme with your custom background and justusing that theme instead of a root element background.
Of course it's possible that your custom drawable istranslucent and you want it to be mixed with the background. However, you willget better performance if you pre-mix the background with your drawable and usethat resulting image or color as a custom theme background instead.
4.14 UnusedResources
---------------
未被使用的资源会是程序变大,并且编译速度降低。
Summary: Looksfor unused resources
Priority: 3 / 10
Severity: Warning
Category:Performance
Unused resources make applications larger and slow downbuilds.
4.15 UselessLeaf
-----------
检查一个子Layout能否被移除。无子孙无背景
Summary: Checkswhether a leaf layout can be removed.
Priority: 2 / 10
Severity: Warning
Category: Performance
A layout that has no children or no background can often beremoved (since it is invisible) for a flatter and more efficient layouthierarchy.
4.16 UselessParent
-------------
检查一个父Layout能否被移除。有子孙而无旁亲的layout,如果不是scrollview,不是根layout,并且无背景。
Summary: Checkswhether a parent layout can be removed.
Priority: 2 / 10
Severity: Warning
Category:Performance
A layout with children that has no siblings, is not ascrollview or a root layout, and does not have a background, can be removed andhave its children moved directly into the parent for a flatter and moreefficient layout hierarchy.
4.17 TooDeepLayout
-------------
Summary: Checkswhether a layout hierarchy is too deep
Priority: 1 / 10
Severity: Warning
Category:Performance
Layouts with too much nesting is bad for performance.Consider using a flatter layout (such as RelativeLayout or GridLayout).Thedefault maximum depth is 10 but can be configured with the environment variableANDROID_LINT_MAX_DEPTH.
4.18 TooManyViews
------------
Summary: Checkswhether a layout has too many views
Priority: 1 / 10
Severity: Warning
Category:Performance
Using too many views in a single layout in a layout is badfor performance.
Consider using compound drawables or other tricks forreducing the number of views in this layout.
The maximum view count defaults to 80 but can be configuredwith the environment variable ANDROID_LINT_MAX_VIEW_COUNT.
4.19 UnusedIds
---------
未被使用的id,没有足够的理由就删除掉。
Summary: Looksfor unused id's
Priority: 1 / 10
Severity: Warning
Category:Performance
NOTE: This issue is disabled by default! You can enable itby adding --enable UnusedIds
This resource id definition appears not to be needed sinceit is not referenced from anywhere. Having id definitions, even if unused, isnot necessarily a bad idea since they make working on layouts and menus easier,so there is not a strong reason to delete these.
5. Usability:Typography
====================
5.1 TypographyDashes
----------------
特殊字符需用编码代替:“–”需要用“–”;“—”需要用“—”
Summary: Looksfor usages of hyphens which can be replaced by n dash and m dash characters
Priority: 5 / 10
Severity: Warning
Category:Usability:Typography
The "n dash" (–, –) and the "mdash" (—,—) characters are used for ranges (n dash) and breaks (m dash). Usingthese instead of plain hyphens can make text easier to read and yourapplication will look more polished.
More information: http://en.wikipedia.org/wiki/Dash
5.2 TypographyEllipsis
------------------
特殊字符需用编码代替:“…”需要用“…”
Summary: Looksfor ellipsis strings (...) which can be replaced with an ellipsis character
Priority: 5 / 10
Severity: Warning
Category:Usability:Typography
You can replace the string "..." with a dedicatedellipsis character, ellipsis character (…, …). This can help make thetext more readable.
More information: http://en.wikipedia.org/wiki/Ellipsis
5.3 TypographyFractions
-------------------
特殊字符需用编码代替:“½”需要用“½”;“¼”需要用“¼”
Summary: Looksfor fraction strings which can be replaced with a fraction character
Priority: 5 / 10
Severity: Warning
Category:Usability:Typography
You can replace certain strings, such as 1/2, and 1/4, withdedicated characters for these, such as ½ (½) and ¼ (¼). This can help make thetext more readable.
More information: http://en.wikipedia.org/wiki/Number_Forms
5.4 TypographyQuotes
----------------
引号的使用
Summary: Looksfor straight quotes which can be replaced by curvy quotes
Priority: 5 / 10
Severity: Warning
Category:Usability:Typography
NOTE: This issue is disabled by default! You can enable itby adding --enable TypographyQuotes
Straight single quotes and double quotes, when used as apair, can be replaced by "curvy quotes" (or directional quotes). Thiscan make the text more readable.
Note that you should never use grave accents and apostrophesto quote, `like this'. (Also note that you should not use curvy quotes for codefragments.)
More information:http://en.wikipedia.org/wiki/Quotation_mark
5.5 TypographyOther
---------------
错误的将“(c)”用“©”代替
Summary: Looksfor miscellaneous typographical problems like replacing (c) with ©
Priority: 3 / 10
Severity: Warning
Category:Usability:Typography
This check looks for miscellaneous typographical problemsand offers replacement sequences that will make the text easier to read andyour application more polished.
6. Usability:Icons
===============
6.1 IconNoDpi
---------
Icon在nodpi和指定dpi的目录下都出现。
Summary: Findsicons that appear in both a -nodpi folder and a dpi folder
Priority: 7 / 10
Severity: Warning
Category: Usability:Icons
Bitmaps that appear in drawable-nodpi folders will not bescaled by the Android framework. If a drawable resource of the same nameappears *both* in a -nodpi folder as well as a dpi folder such asdrawable-hdpi, then the behavior is ambiguous and probably not intentional.Delete one or the other, or use different names for the icons.
6.2 GifUsage
--------
Image不要用GIF,最好用PNG,可以用JPG。
Summary: Checksfor images using the GIF file format which is discouraged
Priority: 5 / 10
Severity: Warning
Category:Usability:Icons
The .gif file format is discouraged. Consider using .png(preferred) or .jpg (acceptable) instead.
More information:http://developer.android.com/guide/topics/resources/drawable-resource.html#Bitmap
6.3 IconDipSize
-----------
Summary: Ensuresthat icons across densities provide roughly the same density-independent size
Priority: 5 / 10
Severity: Warning
Category:Usability:Icons
Checks the all icons which are provided in multipledensities, all compute to roughly the same density-independent pixel (dip)size. This catches errors where images are either placed in the wrong folder,or icons are changed to new sizes but some folders are forgotten.
6.4 IconDuplicatesConfig
--------------------
Summary: Findsicons that have identical bitmaps across various configuration parameters
Priority: 5 / 10
Severity: Warning
Category:Usability:Icons
If an icon is provided under different configurationparameters such as drawable-hdpi or -v11, they should typically be different.This detector catches cases where the same icon is provided in differentconfiguration folder which is usually not intentional.
6.5 IconExpectedSize
----------------
Summary: Ensuresthat launcher icons, notification icons etc have the correct size
Priority: 5 / 10
Severity: Warning
Category:Usability:Icons
NOTE: This issue is disabled by default! You can enable itby adding --enable IconExpectedSize
There are predefined sizes (for each density) for launchericons. You should follow these conventions to make sure your icons fit in withthe overall look of the platform.
More information:http://developer.android.com/design/style/iconography.html
6.6 IconLocation
------------
Summary: Ensuresthat images are not defined in the density-independent drawable folder
Priority: 5 / 10
Severity: Warning
Category:Usability:Icons
The res/drawable folder is intended for density-independentgraphics such as shapes defined in XML. For bitmaps, move it to drawable-mdpiand consider providing higher and lower resolution versions in drawable-ldpi,drawable-hdpi and drawable-xhdpi. If the icon *really* is density independent(for example a solid color) you can place it in drawable-nodpi.
More information:http://developer.android.com/guide/practices/screens_support.html
6.7 IconDensities
-------------
Summary: Ensuresthat icons provide custom versions for all supported densities
Priority: 4 / 10
Severity: Warning
Category:Usability:Icons
Icons will look best if a custom version is provided foreach of the major screen density classes (low, medium, high, extra high). Thislint check identifies icons which do not have complete coverage across thedensities.
Low density is not really used much anymore, so this checkignores the ldpi density. To force lint to include it, set the environmentvariable ANDROID_LINT_INCLUDE_LDPI=true. For more information on currentdensity usage, seehttp://developer.android.com/resources/dashboard/screens.html
More information:http://developer.android.com/guide/practices/screens_support.html
6.8 IconDuplicates
--------------
Summary: Findsduplicated icons under different names
Priority: 3 / 10
Severity: Warning
Category:Usability:Icons
If an icon is repeated under different names, you canconsolidate and just use one of the icons and delete the others to make yourapplication smaller. However, duplicated icons usually are not intentional andcan sometimes point to icons that were accidentally overwritten or accidentallynot updated.
6.9 IconMissingDensityFolder
------------------------
Summary: Ensuresthat all the density folders are present
Priority: 3 / 10
Severity: Warning
Category:Usability:Icons
Icons will look best if a custom version is provided foreach of the major screen density classes (low, medium, high, extra high). Thislint check identifies folders which are missing, such as drawable-hdpi.
Low density is not really used much anymore, so this checkignores the ldpi density. To force lint to include it, set the environmentvariable ANDROID_LINT_INCLUDE_LDPI=true. For more information on currentdensity usage, seehttp://developer.android.com/resources/dashboard/screens.html
More information:http://developer.android.com/guide/practices/screens_support.html
7. Usability
=========
7.1 ButtonOrder
-----------
Summary: Ensuresthe dismissive action of a dialog is on the left and affirmative on the right
Priority: 8 / 10
Severity: Warning
Category:Usability
According to the Android Design Guide, "Action buttonsare typically Cancel and/or OK, with OK indicating the preferred or most likelyaction. However, if the options consist of specific actions such as Close orWait rather than a confirmation or cancellation of the action described in thecontent, then all the buttons should be active verbs. As a rule, the dismissiveaction of a dialog is always on the left whereas the affirmative actions are onthe right."
This check looks for button bars and buttons which look likecancel buttons, and makes sure that these are on the left.
More information: http://developer.android.com/design/building-blocks/dialogs.html
7.2 BackButton
----------
Android中不要设计有Back的按钮,Android中一般有Back的硬按键。
Summary: Looksfor Back buttons, which are not common on the Android platform.
Priority: 6 / 10
Severity: Warning
Category:Usability
NOTE: This issue is disabled by default! You can enable itby adding --enable BackButton
According to the Android Design Guide, "Other platformsuse an explicit back button with label to allow the user to navigate up theapplication's hierarchy. Instead, Android uses the main action bar's app iconfor hierarchical navigation and the navigation bar's back button for temporalnavigation."
This check is not very sophisticated (it just looks forbuttons with the label "Back"), so it is disabled by default to nottrigger on common scenarios like pairs of Back/Next buttons to paginate throughscreens.
More information:http://developer.android.com/design/patterns/pure-android.html
7.3 TextFields
----------
Summary: Looksfor text fields missing inputType or hint settings
Priority: 5 / 10
Severity: Warning
Category:Usability
Providing an inputType attribute on a text field improvesusability because depending on the data to be input, optimized keyboards can beshown to the user (such as just digits and parentheses for a phone number).Similarly, a hint attribute displays a hint to the user for what is expected inthe text field.
If you really want to keep the text field generic, you cansuppress this warning by setting inputType="text".
7.4 AlwaysShowAction
----------------
Summary: Checksfor uses of showAsAction="always" and suggests showAsAction="ifRoom"instead
Priority: 3 / 10
Severity: Warning
Category:Usability
Using showAsAction="always" in menu XML, orMenuItem.SHOW_AS_ACTION_ALWAYS in Java code is usually a deviation from theuser interface style guide. Use "ifRoom" or the correspondingMenuItem.SHOW_AS_ACTION_IF_ROOM instead.
If "always" is used sparingly there are usually noproblems and behavior is roughly equivalent to "ifRoom" but withpreference over other "ifRoom" items. Using it more than twice in thesame menu is a bad idea.
This check looks for menu XML files that contain more thantwo "always" actions, or some "always" actions and no"ifRoom" actions. In Java code, it looks for projects that containreferences to MenuItem.SHOW_AS_ACTION_ALWAYS and no references toMenuItem.SHOW_AS_ACTION_IF_ROOM.
More information:http://developer.android.com/design/patterns/actionbar.html
7.5 ViewConstructor
---------------
Summary: Checksthat custom views define the expected constructors
Priority: 3 / 10
Severity: Warning
Category:Usability
Some layout tools (such as the Android layout editor forEclipse) needs to find a constructor with one of the following signatures:
* View(Context context)
* View(Context context, AttributeSet attrs)
* View(Context context, AttributeSet attrs, int defStyle)
If your custom view needs to perform initialization whichdoes not apply when used in a layout editor, you can surround the given codewith a check to see if View#isInEditMode() is false, since that method willreturn false at runtime but true within a user interface editor.
7.6 ButtonCase
----------
Button的“Ok”/“Cancel”显示大小写一定,不要全大写或全小写。有标准的资源的字符串,不要自己再定义,而要用系统定义的:@android:string/ok和@android:string/cancel
Summary: Ensuresthat Cancel/OK dialog buttons use the canonical capitalization
Priority: 2 / 10
Severity: Warning
Category:Usability
The standard capitalization for OK/Cancel dialogs is"OK" and "Cancel". To ensure that your dialogs use thestandard strings, you can use the resource strings @android:string/ok and@android:string/cancel.
8. Accessibility
=============
8.1 ContentDescription
------------------
ImageView和ImageButton应该提供contentDescription
Summary: Ensuresthat image widgets provide a contentDescription
Priority: 3 / 10
Severity: Warning
Category:Accessibility
Non-textual widgets like ImageViews and ImageButtons shoulduse the contentDescription attribute to specify a textual description of thewidget such that screen readers and other accessibility tools can adequatelydescribe the user interface.
9. Internationalization
====================
9.1 HardcodedText
-------------
硬编码的字符串应该在资源里定义
Summary: Looksfor hardcoded text attributes which should be converted to resource lookup
Priority: 5 / 10
Severity: Warning
Category: Internationalization
Hardcoding text attributes directly in layout files is badfor several reasons:
* When creating configuration variations (for example forlandscape or portrait)you have to repeat the actual text (and keep it up todate when making changes)
* The application cannot be translated to other languages byjust adding new translations for existing string resources.
9.2 EnforceUTF8
-----------
所有XML资源文件都应该以UTF-8编码
Summary: Checksthat all XML resource files are using UTF-8 as the file encoding
Priority: 2 / 10
Severity: Warning
Category:Internationalization
XML supports encoding in a wide variety of character sets.However, not all tools handle the XML encoding attribute correctly, and nearlyall Android apps use UTF-8, so by using UTF-8 you can protect yourself againstsubtle bugs when using non-ASCII characters.
===========
1.1 AdapterViewChildren
-------------------
Summary: Checksthat AdapterViews do not define their children in XML
Priority: 10 / 10
Severity: Warning
Category:Correctness
AdapterViews such as ListViews must be configured with datafrom Java code, such as a ListAdapter.
More information:http://developer.android.com/reference/android/widget/AdapterView.html
1.2 OnClick
-------
Summary: Ensuresthat onClick attribute values refer to real methods
Priority: 10 / 10
Severity: Error
Category:Correctness
The onClick attribute value should be the name of a methodin this View's context to invoke when the view is clicked. This name mustcorrespond to a public method that takes exactly one parameter of type View.
Must be a string value, using '\;' to escape characters suchas '\n' or '\uxxxx' for a unicode character.
1.3 SuspiciousImport
----------------
Summary: Checksfor 'import android.R' statements, which are usually accidental
Priority: 9 / 10
Severity: Warning
Category:Correctness
Importing android.R is usually not intentional; it sometimeshappens when you use an IDE and ask it to automatically add imports at a timewhen your project's R class it not present.
Once the import is there you might get a lot of"confusing" error messages because of course the fields available onandroid.R are not the ones you'd expect from just looking at your own R class.
1.4 WrongViewCast
-------------
Summary: Looksfor incorrect casts to views that according to the XML are of a different type
Priority: 9 / 10
Severity: Error
Category:Correctness
Keeps track of the view types associated with ids and if itfinds a usage of the id in the Java code it ensures that it is treated as thesame type.
1.5 MissingPrefix
-------------
Summary: DetectXML attributes not using the Android namespace
Priority: 8 / 10
Severity: Warning
Category:Correctness
Most Android views have attributes in the Android namespace.When referencing these attributes you *must* include the namespace prefix, oryour attribute will be interpreted by aapt as just a custom attribute.
1.6 NamespaceTypo
-------------
Summary: Looksfor misspellings in namespace declarations
Priority: 8 / 10
Severity: Warning
Category: Correctness
Accidental misspellings in namespace declarations can leadto some very obscure error messages. This check looks for potentialmisspellings to help track these down.
1.7 Proguard
--------
Summary: Looksfor problems in proguard config files
Priority: 8 / 10
Severity: Fatal
Category:Correctness
Using -keepclasseswithmembernames in a proguard config fileis not correct; it can cause some symbols to be renamed which should not be.
Earlier versions of ADT used to create proguard.cfg fileswith the wrong format. Instead of -keepclasseswithmembernames use-keepclasseswithmembers, since the old flags also implies "allowshrinking" which means symbols only referred to from XML and not Java(such as possibly CustomViews) can get deleted.
More information: http://http://code.google.com/p/android/issues/detail?id=16384
1.8 ScrollViewCount
---------------
Summary: Checksthat ScrollViews have exactly one child widget
Priority: 8 / 10
Severity: Warning
Category:Correctness
ScrollViews can only have one child widget. If you want morechildren, wrap them in a container layout.
1.9 StyleCycle
----------
Summary: Looksfor cycles in style definitions
Priority: 8 / 10
Severity: Fatal
Category:Correctness
There should be no cycles in style definitions as this canlead to runtime exceptions.
More information:http://developer.android.com/guide/topics/ui/themes.html#Inheritance
1.10 UnknownId
---------
Summary: Checksfor id references in RelativeLayouts that are not defined elsewhere
Priority: 8 / 10
Severity: Fatal
Category:Correctness
The "@+id/" syntax refers to an existing id, orcreates a new one if it has not already been defined elsewhere. However, thismeans that if you have a typo in your reference, or if the referred view nolonger exists, you do not get a warning since the id will be created on demand.This check catches errors where you have renamed an id without updating all ofthe references to it.
1.11 DuplicateIds
------------
一个Layout内部的id应该是唯一的。
Summary: Checksfor duplicate ids within a single layout
Priority: 7 / 10
Severity: Warning
Category:Correctness
Within a layout, id's should be unique since otherwisefindViewById() can return an unexpected view.
1.12 InconsistentArrays
------------------
字符串国际化中,同一名字的的String-Array对应的item值不相同
Summary: Checksfor inconsistencies in the number of elements in arrays
Priority: 7 / 10
Severity: Warning
Category:Correctness
When an array is translated in a different locale, it shouldnormally have the same number of elements as the original array. When adding orremoving elements to an array, it is easy to forget to update all the locales,and this lint warning finds inconsistencies like these.
Note however that there may be cases where you really wantto declare a different number of array items in each configuration (for examplewhere the array represents available options, and those options differ fordifferent layout orientations and so on), so use your own judgement to decideif this is really an error.
You can suppress this error type if it finds false errors inyour project.
1.13 NestedScrolling
---------------
Summary: Checkswhether a scrolling widget has any nested scrolling widgets within
Priority: 7 / 10
Severity: Warning
Category:Correctness
A scrolling widget such as a ScrollView should not containany nested scrolling widgets since this has various usability issues
1.14 ResourceAsColor
---------------
Summary: Looksfor calls to setColor where a resource id is passed instead of a resolved color
Priority: 7 / 10
Severity: Error
Category: Correctness
Methods that take a color in the form of an integer shouldbe passed an RGB triple, not the actual color resource id. You must call getResources().getColor(resource)to resolve the actual color value first.
1.15 ScrollViewSize
--------------
Summary: Checksthat ScrollViews use wrap_content in scrolling dimension
Priority: 7 / 10
Severity: Warning
Category:Correctness
ScrollView children must set their layout_width orlayout_height attributes to wrap_content rather than fill_parent or match_parentin the scrolling dimension
1.16 TextViewEdits
-------------
Summary: Looksfor TextViews being used for input
Priority: 7 / 10
Severity: Warning
Category:Correctness
Using a <TextView> to input text is generally anerror, you should be using <EditText> instead. EditText is a subclass of TextView, and someof the editing support is provided by TextView, so it's possible to set some input-relatedproperties on a TextView. However, using a TextView along with input attributesis usually a cut & paste error. To input text you should be using<EditText>.
This check also checks subclasses of TextView, such asButton and CheckBox, since these have the same issue: they should not be usedwith editable attributes.
1.17 CommitPrefEdits
---------------
Summary: Looksfor code editing a SharedPreference but forgetting to call commit() on it
Priority: 6 / 10
Severity: Warning
Category:Correctness
After calling edit() on a SharedPreference, you must callcommit() or apply() on the editor to save the results.
1.18 DuplicateIncludedIds
--------------------
Summary: Checksfor duplicate ids across layouts that are combined with include tags
Priority: 6 / 10
Severity: Warning
Category:Correctness
It's okay for two independent layouts to use the same ids.However, if layouts are combined with include tags, then the id's need to beunique within any chain of included layouts, or Activity#findViewById() canreturn an unexpected view.
1.19 LibraryCustomView
-----------------
Summary: Flagscustom attributes in libraries, which must use the res-auto-namespace instead
Priority: 6 / 10
Severity: Error
Category:Correctness
When using a custom view with custom attributes in a libraryproject, the layout must use the special namespacehttp://schemas.android.com/apk/res-auto instead of a URI which includes thelibrary project's own package. This will be used to automatically adjust thenamespace of the attributes when the library resources are merged into theapplication project.
1.20 MultipleUsesSdk
---------------
Summary: Checksthat the <uses-sdk> element appears at most once
Priority: 6 / 10
Severity: Fatal
Category:Correctness
The <uses-sdk> element should appear just once; thetools will *not* merge the contents of all the elements so if you split up theatttributes across multiple elements, only one of them will take effect. To fixthis, just merge all the attributes from the various elements into a single<uses-sdk> element.
More information:http://developer.android.com/guide/topics/manifest/uses-sdk-element.html
1.21 NewApi
------
代码中使用的某些API高于Manifest中的MinSDK
Summary: FindsAPI accesses to APIs that are not supported in all targeted API versions
Priority: 6 / 10
Severity: Error
Category:Correctness
This check scans through all the Android API calls in the applicationand warns about any calls that are not available on *all* versions targeted by thisapplication (according to its minimum SDK attribute in the manifest).
If your code is *deliberately* accessing newer APIs, and youhave ensured (e.g. with conditional execution) that this code will only ever becalled on a supported platform, then you can annotate your class or method withthe @TargetApi annotation specifying the local minimum SDK to apply, such as@TargetApi(11),such that this check considers 11 rather than your manifest file's minimum SDKas the required API level.
1.22 Registered
----------
Activity/Service/ContentProvider没有通过AndroidManifest注册
Summary: Ensuresthat Activities, Services and Content Providers are registered in the manifest
Priority: 6 / 10
Severity: Warning
Category:Correctness
Activities, services and content providers should beregistered in the AndroidManifext.xml file using <activity>,<service> and <provider> tags.
If your activity is simply a parent class intended to be subclassedby other "real" activities, make it an abstract class.
More information:http://developer.android.com/guide/topics/manifest/manifest-intro.html
1.23 SdCardPath
----------
Summary: Looksfor hardcoded references to /sdcard
Priority: 6 / 10
Severity: Warning
Category:Correctness
Your code should not reference the /sdcard path directly;instead use Environment.getExternalStorageDirectory().getPath()
More information:http://developer.android.com/guide/topics/data/data-storage.html#filesExternal
1.24 ShowToast
---------
Summary: Looksfor code creating a Toast but forgetting to call show() on it
Priority: 6 / 10
Severity: Warning
Category:Correctness
Toast.makeText() creates a Toast but does *not* show it. Youmust call show() on the resulting object to actually make the Toast appear.
1.25 ValidFragment
-------------
Summary: Ensuresthat Fragment subclasses can be instantiated
Priority: 6 / 10
Severity: Warning
Category:Correctness
From the Fragment documentation: *Every* fragment must havean empty constructor, so it can be instantiated when restoring its activity'sstate. It is strongly recommended that subclasses do not have otherconstructors with parameters, since these constructors will not be called whenthe fragment is re-instantiated; instead, arguments can be supplied by thecaller with setArguments(Bundle) and later retrieved by the Fragment withgetArguments().
More information:http://developer.android.com/reference/android/app/Fragment.html#Fragment()
1.26 WrongManifestParent
-------------------
Summary: Checksthat various manifest elements are declared in the right place
Priority: 6 / 10
Severity: Fatal
Category:Correctness
The <uses-library> element should be defined as adirect child of the <application> tag, not the <manifest> tag or an<activity> tag. Similarly, a <uses-sdk> tag much be declared at theroot level, and so on. This check looks for incorrect declaration locations inthe manifest, and complains if an element is found in the wrong place.
More information:http://developer.android.com/guide/topics/manifest/manifest-intro.html
1.27 DuplicateActivity
-----------------
Summary: Checksthat an activity is registered only once in the manifest
Priority: 5 / 10
Severity: Error
Category:Correctness
An activity should only be registered once in the manifest.If it is accidentally registered more than once, then subtle errors can occur,since attribute declarations from the two elements are not merged, so you may accidentallyremove previous declarations.
1.28 ManifestOrder
-------------
Summary: Checksfor manifest problems like <uses-sdk> after the <application> tag
Priority: 5 / 10
Severity: Warning
Category:Correctness
The <application> tag should appear after the elementswhich declare which version you need, which features you need, which librariesyou need, and so on. In the past there have been subtle bugs (such as themesnot getting applied correctly) when the <application> tag appears beforesome of these other elements, so it's best to order your manifest in thelogical dependency order.
1.29 StateListReachable
------------------
Summary: Looksfor unreachable states in a <selector>
Priority: 5 / 10
Severity: Warning
Category:Correctness
In a selector, only the last child in the state list shouldomit a state qualifier. If not, all subsequent items in the list will beignored since the given item will match all.
1.30 UnknownIdInLayout
-----------------
Summary: Makessure that @+id references refer to views in the same layout
Priority: 5 / 10
Severity: Warning
Category:Correctness
The "@+id/" syntax refers to an existing id, orcreates a new one if it has not already been defined elsewhere. However, thismeans that if you have a typo in your reference, or if the referred view nolonger exists, you do not get a warning since the id will be created on demand.
This is sometimes intentional, for example where you arereferring to a view which is provided in a different layout via an include.However, it is usually an accident where you have a typo or you have renamed aview without updating all the references to it.
1.31 UnlocalizedSms
--------------
Summary: Looksfor code sending text messages to unlocalized phone numbers
Priority: 5 / 10
Severity: Warning
Category:Correctness
SMS destination numbers must start with a country code orthe application code must ensure that the SMS is only sent when the user is inthe same country as the receiver.
1.32 GridLayout
----------
Summary: Checksfor potential GridLayout errors like declaring rows and columns outside thedeclared grid dimensions
Priority: 4 / 10
Severity: Fatal
Category:Correctness
Declaring a layout_row or layout_column that falls outsidethe declared size of a GridLayout's rowCount or columnCount is usually anunintentional error.
1.33 ExtraText
---------
Summary: Looksfor extraneous text in layout files
Priority: 3 / 10
Severity: Warning
Category:Correctness
Layout resource files should only contain elements andattributes. Any XML text content found in the file is likely accidental (andpotentially dangerous if the text resembles XML and the developer believes thetext to be functional)
1.34 PrivateResource
---------------
Summary: Looksfor references to private resources
Priority: 3 / 10
Severity: Fatal
Category: Correctness
Private resources should not be referenced; the may not bepresent everywhere, and even where they are they may disappear without notice.
To fix this, copy the resource into your own project. Youcan find the platform resources under $ANDROID_SK/platforms/android-$VERSION/data/res/.
1.35 ProguardSplit
-------------
Summary: Checksfor old proguard.cfg files that contain generic Android rules
Priority: 3 / 10
Severity: Warning
Category:Correctness
Earlier versions of the Android tools bundled a single"proguard.cfg" file containing a ProGuard configuration file suitablefor Android shrinking and obfuscation. However, that version was copied intonew projects, which means that it does not continue to get updated as weimprove the default ProGuard rules for Android.
In the new version of the tools, we have split the ProGuardconfiguration into two halves:
* A simple configuration file containing onlyproject-specific flags, in your project
* A generic configuration file containing the recommendedset of ProGuard options for Android projects. This generic file lives in theSDK install directory which means that it gets updated along with the tools.
In order for this to work, the proguard.config property inthe project.properties file now refers to a path, so you can reference both thegeneric file as well as your own (and any additional files too).
To migrate your project to the new setup, create a newproguard-project.txt file in your project containing any project specificProGuard flags as well as any customizations you have made, then update yourproject.properties file to contain:
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-projec.txt
1.36 Deprecated
----------
使用已经废弃的API
Summary: Looksfor usages of deprecated layouts, attributes, and so on.
Priority: 2 / 10
Severity: Warning
Category:Correctness
Deprecated views, attributes and so on are deprecatedbecause there is a better way to do something. Do it that new way. You've beenwarned.
1.37 PxUsage
-------
避免使用px,使用dp代替
Summary: Looksfor use of the "px" dimension
Priority: 2 / 10
Severity: Warning
Category:Correctness
For performance reasons and to keep the code simpler, theAndroid system uses pixels as the standard unit for expressing dimension orcoordinate values.
That means that the dimensions of a view are alwaysexpressed in the code using pixels, but always based on the current screendensity. For instance, if myView.getWidth() returns 10, the view is 10 pixelswide on the current screen, but on a device with a higher density screen, thevalue returned might be 15. If you use pixel values in your application code towork with bitmaps that are not pre-scaled for the current screen density, youmight need to scale the pixel values that you use in your code to match theun-scaled bitmap source.
More information:http://developer.android.com/guide/practices/screens_support.html#screen-independence
1.38 UsesMinSdkAttributes
--------------------
Summary: Checksthat the minimum SDK and target SDK attributes are defined
Priority: 2 / 10
Severity: Warning
Category:Correctness
The manifest should contain a <uses-sdk> element whichdefines the minimum minimum API Level required for the application to run, aswell as the target version (the highest API level you have tested the versionfor.)
More information:http://developer.android.com/guide/topics/manifest/uses-sdk-element.html
1.39 UnusedNamespace
---------------
Summary: Findsunused namespaces in XML documents
Priority: 1 / 10
Severity: Warning
Category:Correctness
Unused namespace declarations take up space and requireprocessing that is not necessary
2. Correctness:Messages
====================
2.1 StringFormatInvalid
-------------------
Summary: Checksthat format strings are valid
Priority: 9 / 10
Severity: Error
Category:Correctness:Messages
If a string contains a '%' character, then the string may bea formatting string which will be passed to String.format from Java code toreplace each '%' occurrence with specific values.
This lint warning checks for two related problems:
(1) Formatting strings that are invalid, meaning thatString.format will throw exceptions at runtime when attempting to use theformat string.
(2) Strings containing '%' that are not formatting stringsgetting passed to a String.format call. In this case the '%' will need to beescaped as '%%'.
NOTE: Not all Strings which look like formatting strings areintended for use by String.format; for example, they may contain date formatsintended for android.text.format.Time#format(). Lint cannot always figure outthat a String is a date format, so you may get false warnings in thosescenarios. See the suppress help topic for information on how to suppresserrors in that case.
2.2 StringFormatMatches
-------------------
Summary: Ensuresthat the format used in <string> definitions is compatible with theString.format call
Priority: 9 / 10
Severity: Error
Category:Correctness:Messages
This lint check ensures the following:
(1) If there are multiple translations of the format string,then all translations use the same type for the same numbered arguments
(2) The usage of the format string in Java is consistentwith the format string, meaning that the parameter types passed toString.format matches those in the format string.
2.3 MissingTranslation
------------------
字符串国际化不完全
Summary: Checksfor incomplete translations where not all strings are translated
Priority: 8 / 10
Severity: Fatal
Category:Correctness:Messages
If an application has more than one locale, then all thestrings declared in one language should also be translated in all otherlanguages.
By default this detector allows regions of a language tojust provide a subset of the strings and fall back to the standard languagestrings. You can require all regions to provide a full translation by settingthe environment variable ANDROID_LINT_COMPLETE_REGIONS.
2.4 ExtraTranslation
----------------
国际化的字符串,在默认位置(defaultlocale)中没有定义
Summary: Checksfor translations that appear to be unused (no default language string)
Priority: 6 / 10
Severity: Warning
Category:Correctness:Messages
If a string appears in a specific language translation file,but there is no corresponding string in the default locale, then this string isprobably unused. (It's technically possible that your application is only intendedto run in a specific locale, but it's still a good idea to provide a fallback.)
2.5 StringFormatCount
-----------------
Summary: Ensuresthat all format strings are used and that the same number is defined acrosstranslations
Priority: 5 / 10
Severity: Warning
Category:Correctness:Messages
When a formatted string takes arguments, it usually needs toreference the same arguments in all translations. There are cases where this isnot the case, so this issue is a warning rather than an error by default.However, this usually happens when a language is not translated or updatedcorrectly.
3. Security
========
3.1 GrantAllUris
------------
Summary: Checksfor <grant-uri-permission> elements where everything is shared
Priority: 7 / 10
Severity: Warning
Category:Security
The <grant-uri-permission> element allows specificpaths to be shared. This detector checks for a path URL of just '/'(everything), which is probably not what you want; you should limit access to asubset.
3.2 SetJavaScriptEnabled
--------------------
不确定你的程序中确实需要JavaScript就不要执行SetJavaScriptEnabled。
Summary: Looksfor invocations of android.webkit.WebSettings.setJavaScriptEnabled
Priority: 6 / 10
Severity: Warning
Category:Security
Your code should not invoke setJavaScriptEnabled if you arenot sure that your app really requires JavaScript support.
More information:http://developer.android.com/guide/practices/security.html
3.3 ExportedContentProvider
-----------------------
ContentProvider exported为true时,设置一个Permission,让使用者获取了Permission才能使用。
Summary: Checksfor exported content providers that do not require permissions
Priority: 5 / 10
Severity: Warning
Category:Security
Content providers are exported by default and anyapplication on the system can potentially use them to read and write data. Ifthe contentprovider provides access to sensitive data, it should be protectedby specifying export=false in the manifest or by protecting it with apermission that can be granted to other applications.
3.4 ExportedReceiver
----------------
Receiver的exported为true时,设置一个Permission,让使用者获取了Permission才能使用。
Summary: Checksfor exported receivers that do not require permissions
Priority: 5 / 10
Severity: Warning
Category:Security
Exported receivers (receivers which either set exported=trueor contain an intent-filter and do not specify exported=false) should define apermission that an entity must have in order to launch the receiver or bind toit. Without this, any application can use this receiver.
3.5 ExportedService
---------------
Service的exported为true时,设置一个Permission,让使用者获取了Permission才能使用。
Summary: Checksfor exported services that do not require permissions
Priority: 5 / 10
Severity: Warning
Category:Security
Exported services (services which either set exported=trueor contain an intent-filter and do not specify exported=false) should define apermission that an entity must have in order to launch the service or bind toit. Without this, any application can use this service.
3.6 HardcodedDebugMode
------------------
不要在manifest中设置android:debuggable。
设置它,编译的任何版本都要采用指定的debug模式。不设置,编译Eng版本采用debug模式;编译User版本采用release模式。
Summary: Checksfor hardcoded values of android:debuggable in the manifest
Priority: 5 / 10
Severity: Warning
Category:Security
It's best to leave out the android:debuggable attribute fromthe manifest. If you do, then the tools will automatically insertandroid:debuggable=true when building an APK to debug on an emulator or device.And when you perform a release build, such as Exporting APK, it willautomatically set it to false.
If on the other hand you specify a specific value in themanifest file, then the tools will always use it. This can lead to accidentallypublishing your app with debug information.
3.7 WorldReadableFiles
------------------
Summary: Checksfor openFileOutput() and getSharedPreferences() calls passing MODE_WORLD_READABLE
Priority: 4 / 10
Severity: Warning
Category:Security
There are cases where it is appropriate for an applicationto write world readable files, but these should be reviewed carefully to ensurethat they contain no private data that is leaked to other applications.
3.8 WorldWriteableFiles
-------------------
Summary: Checksfor openFileOutput() and getSharedPreferences() calls passing MODE_WORLD_WRITEABLE
Priority: 4 / 10
Severity: Warning
Category:Security
There are cases where it is appropriate for an applicationto write world writeable files, but these should be reviewed carefully toensure that they contain no private data, and that if the file is modified by amalicious application it does not trick or compromise your application.
3.9 ExportedActivity
----------------
Activity的exported为true时,设置一个Permission,让使用者获取了Permission才能使用。
Summary: Checksfor exported activities that do not require permissions
Priority: 2 / 10
Severity: Warning
Category:Security
Exported activities (activities which either setexported=true or contain an intent-filter and do not specify exported=false)should define a permission that an entity must have in order to launch theactivity or bind to it. Without this, any application can use this activity.
4. Performance
===========
4.1 DrawAllocation
--------------
避免在绘制或者解析布局(draw/layout)时分配对象。E.g.,Ondraw()中实例化Paint对象。
Summary: Looksfor memory allocations within drawing code
Priority: 9 / 10
Severity: Warning
Category:Performance
You should avoid allocating objects during a drawing orlayout operation. These are called frequently, so a smooth UI can beinterrupted by garbage collection pauses caused by the object allocations.
The way this is generally handled is to allocate the neededobjects up front and to reuse them for each drawing operation.
Some methods allocate memory on your behalf (such asBitmap.create), and these should be handled in the same way.
4.2 ObsoleteLayoutParam
-------------------
Layout中有无用的参数。
Summary: Looksfor layout params that are not valid for the given parent layout
Priority: 6 / 10
Severity: Warning
Category:Performance
The given layout_param is not defined for the given layout,meaning it has no effect. This usually happens when you change the parentlayout or move view code around without updating the layout params. This willcause useless attribute processing at runtime, and is misleading for othersreading the layout so the parameter should be removed.
4.3 UseCompoundDrawables
--------------------
可优化的布局:如包含一个Imageview和一个TextView的线性布局,可被采用CompoundDrawable的TextView代替。
Summary: Checkswhether the current node can be replaced by a TextView using compounddrawables.
Priority: 6 / 10
Severity: Warning
Category: Performance
A LinearLayout which contains an ImageView and a TextViewcan be more efficiently handled as a compound drawable.
There's a lint quickfix to perform this conversion in theEclipse plugin.
4.4 FieldGetter
-----------
直接访问类里的内部域,不要用getter方法。这样会快3倍。
Summary: Suggestsreplacing uses of getters with direct field access within a class
Priority: 4 / 10
Severity: Warning
Category:Performance
NOTE: This issue is disabled by default! You can enable itby adding --enable FieldGetter
Accessing a field within the class that defines a getter forthat field is at least 3 times faster than calling the getter. For simplegetters that do nothing other than return the field, you might want to justreference the local field directly instead.
More information: http://developer.android.com/guide/practices/design/performance.html#internal_get_set
4.5 HandlerLeak
-----------
Summary: Ensuresthat Handler classes do not hold on to a reference to an outer class
Priority: 4 / 10
Severity: Warning
Category:Performance
In Android, Handler classes should be static or leaks mightoccur. Messages enqueued on the application thread's MessageQueue also retaintheir target Handler. If the Handler is an inner class, its outer class will beretained as well. To avoid leaking the outer class, declare the Handler as astatic nested class with a WeakReference to its outer class.
4.6 MergeRootFrame
--------------
Summary: Checkswhether a root <FrameLayout> can be replaced with a <merge> tag
Priority: 4 / 10
Severity: Warning
Category:Performance
If a <FrameLayout> is the root of a layout and doesnot provide background or padding etc, it can often be replaced with a<merge> tag which is slightly more efficient. Note that this depends oncontext, so make sure you understand how the <merge> tag works beforeproceeding.
More information:http://android-developers.blogspot.com/2009/03/android-layout-tricks-3-optimize-by.html
4.7 UseSparseArrays
---------------
尽量用Android的SparseArray代替Hashmap
Summary: Looksfor opportunities to replace HashMaps with the more efficient SparseArray
Priority: 4 / 10
Severity: Warning
Category:Performance
For maps where the keys are of type integer, it's typicallymore efficient to use the Android SparseArray API. This check identifiesscenarios where you might want to consider using SparseArray instead of HashMapfor better performance.
This is *particularly* useful when the value types areprimitives like ints, where you can use SparseIntArray and avoid auto-boxingthe values from int to Integer.
If you need to construct a HashMap because you need to callan API outside of your control which requires a Map, you can suppress thiswarning using for example the @SuppressLint annotation.
4.8 UseValueOf
----------
新建一个对象时候,尽量考虑用带有valueOf()的封装类实现。比如:Integer.valueOf().
Summary: Looksfor usages of "new" for wrapper classes which should use "valueOf"instead
Priority: 4 / 10
Severity: Warning
Category:Performance
You should not call the constructor for wrapper classesdirectly, such as"new Integer(42)". Instead, call the"valueOf" factory method, such as Integer.valueOf(42). This willtypically use less memory because common integers such as 0 and 1 will share asingle instance.
4.9 DisableBaselineAlignment
------------------------
如果LinearLayout被用于嵌套的layout空间计算,它的android:baselineAligned属性应该设置成false,以加速layout计算。
Summary: Looksfor LinearLayouts which should set android:baselineAligned=false
Priority: 3 / 10
Severity: Warning
Category:Performance
When a LinearLayout is used to distribute the spaceproportionally between nested layouts, the baseline alignment property shouldbe turned off to make the layout computation faster.
4.10 FloatMath
---------
使用FloatMath代替Math。
Summary: Suggestsreplacing java.lang.Math calls with android.util.FloatMath to avoid conversions
Priority: 3 / 10
Severity: Warning
Category:Performance
On modern hardware, "double" is just as fast as"float" though of course it takes more memory. However, if you areusing floats and you need to compute the sine, cosine or square root, then itis better to use the android.util.FloatMath class instead of java.lang.Mathsince you can call methods written to operate on floats, so you avoidconversions back and forth to double.
More information:http://developer.android.com/guide/practices/design/performance.html#avoidfloat
4.11 InefficientWeight
-----------------
Summary: Looksfor inefficient weight declarations in LinearLayouts
Priority: 3 / 10
Severity: Warning
Category:Performance
When only a single widget in a LinearLayout defines aweight, it is more efficient to assign a width/height of 0dp to it since itwill absorb all the remaining space anyway. With a declared width/height of 0dpit does not have to measure its own size first.
4.12 NestedWeights
-------------
避免嵌套weight,那将拖累执行效率
Summary: Looksfor nested layout weights, which are costly
Priority: 3 / 10
Severity: Warning
Category:Performance
Layout weights require a widget to be measured twice. When aLinearLayout with non-zero weights is nested inside another LinearLayout withnon-zero weights, then the number of measurements increase exponentially.
4.13 Overdraw
--------
如果为RootView指定一个背景Drawable,会先用Theme的背景绘制一遍,然后才用指定的背景,这就是所谓的“Overdraw”。
可以设置theme的background为null来避免。
Summary: Looksfor overdraw issues (where a view is painted only to be fully painted over)
Priority: 3 / 10
Severity: Warning
Category:Performance
If you set a background drawable on a root view, then youshould use a custom theme where the theme background is null. Otherwise, thetheme background will be painted first, only to have your custom backgroundcompletely cover it; this is called "overdraw".
NOTE: This detector relies on figuring out which layouts areassociated with which activities based on scanning the Java code, and it'scurrently doing that using an inexact pattern matching algorithm. Therefore, itcan incorrectly conclude which activity the layout is associated with and then wronglycomplain that a background-theme is hidden.
If you want your custom background on multiple pages, thenyou should consider making a custom theme with your custom background and justusing that theme instead of a root element background.
Of course it's possible that your custom drawable istranslucent and you want it to be mixed with the background. However, you willget better performance if you pre-mix the background with your drawable and usethat resulting image or color as a custom theme background instead.
4.14 UnusedResources
---------------
未被使用的资源会是程序变大,并且编译速度降低。
Summary: Looksfor unused resources
Priority: 3 / 10
Severity: Warning
Category:Performance
Unused resources make applications larger and slow downbuilds.
4.15 UselessLeaf
-----------
检查一个子Layout能否被移除。无子孙无背景
Summary: Checkswhether a leaf layout can be removed.
Priority: 2 / 10
Severity: Warning
Category: Performance
A layout that has no children or no background can often beremoved (since it is invisible) for a flatter and more efficient layouthierarchy.
4.16 UselessParent
-------------
检查一个父Layout能否被移除。有子孙而无旁亲的layout,如果不是scrollview,不是根layout,并且无背景。
Summary: Checkswhether a parent layout can be removed.
Priority: 2 / 10
Severity: Warning
Category:Performance
A layout with children that has no siblings, is not ascrollview or a root layout, and does not have a background, can be removed andhave its children moved directly into the parent for a flatter and moreefficient layout hierarchy.
4.17 TooDeepLayout
-------------
Summary: Checkswhether a layout hierarchy is too deep
Priority: 1 / 10
Severity: Warning
Category:Performance
Layouts with too much nesting is bad for performance.Consider using a flatter layout (such as RelativeLayout or GridLayout).Thedefault maximum depth is 10 but can be configured with the environment variableANDROID_LINT_MAX_DEPTH.
4.18 TooManyViews
------------
Summary: Checkswhether a layout has too many views
Priority: 1 / 10
Severity: Warning
Category:Performance
Using too many views in a single layout in a layout is badfor performance.
Consider using compound drawables or other tricks forreducing the number of views in this layout.
The maximum view count defaults to 80 but can be configuredwith the environment variable ANDROID_LINT_MAX_VIEW_COUNT.
4.19 UnusedIds
---------
未被使用的id,没有足够的理由就删除掉。
Summary: Looksfor unused id's
Priority: 1 / 10
Severity: Warning
Category:Performance
NOTE: This issue is disabled by default! You can enable itby adding --enable UnusedIds
This resource id definition appears not to be needed sinceit is not referenced from anywhere. Having id definitions, even if unused, isnot necessarily a bad idea since they make working on layouts and menus easier,so there is not a strong reason to delete these.
5. Usability:Typography
====================
5.1 TypographyDashes
----------------
特殊字符需用编码代替:“–”需要用“–”;“—”需要用“—”
Summary: Looksfor usages of hyphens which can be replaced by n dash and m dash characters
Priority: 5 / 10
Severity: Warning
Category:Usability:Typography
The "n dash" (–, –) and the "mdash" (—,—) characters are used for ranges (n dash) and breaks (m dash). Usingthese instead of plain hyphens can make text easier to read and yourapplication will look more polished.
More information: http://en.wikipedia.org/wiki/Dash
5.2 TypographyEllipsis
------------------
特殊字符需用编码代替:“…”需要用“…”
Summary: Looksfor ellipsis strings (...) which can be replaced with an ellipsis character
Priority: 5 / 10
Severity: Warning
Category:Usability:Typography
You can replace the string "..." with a dedicatedellipsis character, ellipsis character (…, …). This can help make thetext more readable.
More information: http://en.wikipedia.org/wiki/Ellipsis
5.3 TypographyFractions
-------------------
特殊字符需用编码代替:“½”需要用“½”;“¼”需要用“¼”
Summary: Looksfor fraction strings which can be replaced with a fraction character
Priority: 5 / 10
Severity: Warning
Category:Usability:Typography
You can replace certain strings, such as 1/2, and 1/4, withdedicated characters for these, such as ½ (½) and ¼ (¼). This can help make thetext more readable.
More information: http://en.wikipedia.org/wiki/Number_Forms
5.4 TypographyQuotes
----------------
引号的使用
Summary: Looksfor straight quotes which can be replaced by curvy quotes
Priority: 5 / 10
Severity: Warning
Category:Usability:Typography
NOTE: This issue is disabled by default! You can enable itby adding --enable TypographyQuotes
Straight single quotes and double quotes, when used as apair, can be replaced by "curvy quotes" (or directional quotes). Thiscan make the text more readable.
Note that you should never use grave accents and apostrophesto quote, `like this'. (Also note that you should not use curvy quotes for codefragments.)
More information:http://en.wikipedia.org/wiki/Quotation_mark
5.5 TypographyOther
---------------
错误的将“(c)”用“©”代替
Summary: Looksfor miscellaneous typographical problems like replacing (c) with ©
Priority: 3 / 10
Severity: Warning
Category:Usability:Typography
This check looks for miscellaneous typographical problemsand offers replacement sequences that will make the text easier to read andyour application more polished.
6. Usability:Icons
===============
6.1 IconNoDpi
---------
Icon在nodpi和指定dpi的目录下都出现。
Summary: Findsicons that appear in both a -nodpi folder and a dpi folder
Priority: 7 / 10
Severity: Warning
Category: Usability:Icons
Bitmaps that appear in drawable-nodpi folders will not bescaled by the Android framework. If a drawable resource of the same nameappears *both* in a -nodpi folder as well as a dpi folder such asdrawable-hdpi, then the behavior is ambiguous and probably not intentional.Delete one or the other, or use different names for the icons.
6.2 GifUsage
--------
Image不要用GIF,最好用PNG,可以用JPG。
Summary: Checksfor images using the GIF file format which is discouraged
Priority: 5 / 10
Severity: Warning
Category:Usability:Icons
The .gif file format is discouraged. Consider using .png(preferred) or .jpg (acceptable) instead.
More information:http://developer.android.com/guide/topics/resources/drawable-resource.html#Bitmap
6.3 IconDipSize
-----------
Summary: Ensuresthat icons across densities provide roughly the same density-independent size
Priority: 5 / 10
Severity: Warning
Category:Usability:Icons
Checks the all icons which are provided in multipledensities, all compute to roughly the same density-independent pixel (dip)size. This catches errors where images are either placed in the wrong folder,or icons are changed to new sizes but some folders are forgotten.
6.4 IconDuplicatesConfig
--------------------
Summary: Findsicons that have identical bitmaps across various configuration parameters
Priority: 5 / 10
Severity: Warning
Category:Usability:Icons
If an icon is provided under different configurationparameters such as drawable-hdpi or -v11, they should typically be different.This detector catches cases where the same icon is provided in differentconfiguration folder which is usually not intentional.
6.5 IconExpectedSize
----------------
Summary: Ensuresthat launcher icons, notification icons etc have the correct size
Priority: 5 / 10
Severity: Warning
Category:Usability:Icons
NOTE: This issue is disabled by default! You can enable itby adding --enable IconExpectedSize
There are predefined sizes (for each density) for launchericons. You should follow these conventions to make sure your icons fit in withthe overall look of the platform.
More information:http://developer.android.com/design/style/iconography.html
6.6 IconLocation
------------
Summary: Ensuresthat images are not defined in the density-independent drawable folder
Priority: 5 / 10
Severity: Warning
Category:Usability:Icons
The res/drawable folder is intended for density-independentgraphics such as shapes defined in XML. For bitmaps, move it to drawable-mdpiand consider providing higher and lower resolution versions in drawable-ldpi,drawable-hdpi and drawable-xhdpi. If the icon *really* is density independent(for example a solid color) you can place it in drawable-nodpi.
More information:http://developer.android.com/guide/practices/screens_support.html
6.7 IconDensities
-------------
Summary: Ensuresthat icons provide custom versions for all supported densities
Priority: 4 / 10
Severity: Warning
Category:Usability:Icons
Icons will look best if a custom version is provided foreach of the major screen density classes (low, medium, high, extra high). Thislint check identifies icons which do not have complete coverage across thedensities.
Low density is not really used much anymore, so this checkignores the ldpi density. To force lint to include it, set the environmentvariable ANDROID_LINT_INCLUDE_LDPI=true. For more information on currentdensity usage, seehttp://developer.android.com/resources/dashboard/screens.html
More information:http://developer.android.com/guide/practices/screens_support.html
6.8 IconDuplicates
--------------
Summary: Findsduplicated icons under different names
Priority: 3 / 10
Severity: Warning
Category:Usability:Icons
If an icon is repeated under different names, you canconsolidate and just use one of the icons and delete the others to make yourapplication smaller. However, duplicated icons usually are not intentional andcan sometimes point to icons that were accidentally overwritten or accidentallynot updated.
6.9 IconMissingDensityFolder
------------------------
Summary: Ensuresthat all the density folders are present
Priority: 3 / 10
Severity: Warning
Category:Usability:Icons
Icons will look best if a custom version is provided foreach of the major screen density classes (low, medium, high, extra high). Thislint check identifies folders which are missing, such as drawable-hdpi.
Low density is not really used much anymore, so this checkignores the ldpi density. To force lint to include it, set the environmentvariable ANDROID_LINT_INCLUDE_LDPI=true. For more information on currentdensity usage, seehttp://developer.android.com/resources/dashboard/screens.html
More information:http://developer.android.com/guide/practices/screens_support.html
7. Usability
=========
7.1 ButtonOrder
-----------
Summary: Ensuresthe dismissive action of a dialog is on the left and affirmative on the right
Priority: 8 / 10
Severity: Warning
Category:Usability
According to the Android Design Guide, "Action buttonsare typically Cancel and/or OK, with OK indicating the preferred or most likelyaction. However, if the options consist of specific actions such as Close orWait rather than a confirmation or cancellation of the action described in thecontent, then all the buttons should be active verbs. As a rule, the dismissiveaction of a dialog is always on the left whereas the affirmative actions are onthe right."
This check looks for button bars and buttons which look likecancel buttons, and makes sure that these are on the left.
More information: http://developer.android.com/design/building-blocks/dialogs.html
7.2 BackButton
----------
Android中不要设计有Back的按钮,Android中一般有Back的硬按键。
Summary: Looksfor Back buttons, which are not common on the Android platform.
Priority: 6 / 10
Severity: Warning
Category:Usability
NOTE: This issue is disabled by default! You can enable itby adding --enable BackButton
According to the Android Design Guide, "Other platformsuse an explicit back button with label to allow the user to navigate up theapplication's hierarchy. Instead, Android uses the main action bar's app iconfor hierarchical navigation and the navigation bar's back button for temporalnavigation."
This check is not very sophisticated (it just looks forbuttons with the label "Back"), so it is disabled by default to nottrigger on common scenarios like pairs of Back/Next buttons to paginate throughscreens.
More information:http://developer.android.com/design/patterns/pure-android.html
7.3 TextFields
----------
Summary: Looksfor text fields missing inputType or hint settings
Priority: 5 / 10
Severity: Warning
Category:Usability
Providing an inputType attribute on a text field improvesusability because depending on the data to be input, optimized keyboards can beshown to the user (such as just digits and parentheses for a phone number).Similarly, a hint attribute displays a hint to the user for what is expected inthe text field.
If you really want to keep the text field generic, you cansuppress this warning by setting inputType="text".
7.4 AlwaysShowAction
----------------
Summary: Checksfor uses of showAsAction="always" and suggests showAsAction="ifRoom"instead
Priority: 3 / 10
Severity: Warning
Category:Usability
Using showAsAction="always" in menu XML, orMenuItem.SHOW_AS_ACTION_ALWAYS in Java code is usually a deviation from theuser interface style guide. Use "ifRoom" or the correspondingMenuItem.SHOW_AS_ACTION_IF_ROOM instead.
If "always" is used sparingly there are usually noproblems and behavior is roughly equivalent to "ifRoom" but withpreference over other "ifRoom" items. Using it more than twice in thesame menu is a bad idea.
This check looks for menu XML files that contain more thantwo "always" actions, or some "always" actions and no"ifRoom" actions. In Java code, it looks for projects that containreferences to MenuItem.SHOW_AS_ACTION_ALWAYS and no references toMenuItem.SHOW_AS_ACTION_IF_ROOM.
More information:http://developer.android.com/design/patterns/actionbar.html
7.5 ViewConstructor
---------------
Summary: Checksthat custom views define the expected constructors
Priority: 3 / 10
Severity: Warning
Category:Usability
Some layout tools (such as the Android layout editor forEclipse) needs to find a constructor with one of the following signatures:
* View(Context context)
* View(Context context, AttributeSet attrs)
* View(Context context, AttributeSet attrs, int defStyle)
If your custom view needs to perform initialization whichdoes not apply when used in a layout editor, you can surround the given codewith a check to see if View#isInEditMode() is false, since that method willreturn false at runtime but true within a user interface editor.
7.6 ButtonCase
----------
Button的“Ok”/“Cancel”显示大小写一定,不要全大写或全小写。有标准的资源的字符串,不要自己再定义,而要用系统定义的:@android:string/ok和@android:string/cancel
Summary: Ensuresthat Cancel/OK dialog buttons use the canonical capitalization
Priority: 2 / 10
Severity: Warning
Category:Usability
The standard capitalization for OK/Cancel dialogs is"OK" and "Cancel". To ensure that your dialogs use thestandard strings, you can use the resource strings @android:string/ok and@android:string/cancel.
8. Accessibility
=============
8.1 ContentDescription
------------------
ImageView和ImageButton应该提供contentDescription
Summary: Ensuresthat image widgets provide a contentDescription
Priority: 3 / 10
Severity: Warning
Category:Accessibility
Non-textual widgets like ImageViews and ImageButtons shoulduse the contentDescription attribute to specify a textual description of thewidget such that screen readers and other accessibility tools can adequatelydescribe the user interface.
9. Internationalization
====================
9.1 HardcodedText
-------------
硬编码的字符串应该在资源里定义
Summary: Looksfor hardcoded text attributes which should be converted to resource lookup
Priority: 5 / 10
Severity: Warning
Category: Internationalization
Hardcoding text attributes directly in layout files is badfor several reasons:
* When creating configuration variations (for example forlandscape or portrait)you have to repeat the actual text (and keep it up todate when making changes)
* The application cannot be translated to other languages byjust adding new translations for existing string resources.
9.2 EnforceUTF8
-----------
所有XML资源文件都应该以UTF-8编码
Summary: Checksthat all XML resource files are using UTF-8 as the file encoding
Priority: 2 / 10
Severity: Warning
Category:Internationalization
XML supports encoding in a wide variety of character sets.However, not all tools handle the XML encoding attribute correctly, and nearlyall Android apps use UTF-8, so by using UTF-8 you can protect yourself againstsubtle bugs when using non-ASCII characters.
发表评论
-
Android自动录制程序思路
2013-03-07 18:28 920思路如下: 1.java执行ant脚本 2.点击录制 3.实时 ... -
hierarchyviewer不能用的解决办法
2013-03-05 16:41 15184ViewServer is a simple class yo ... -
访问google的代理软件
2012-12-18 09:48 985步骤: 1.首先下载ProxySwitcher 2.配置Pro ... -
不错的反编译软件jad
2012-12-18 09:43 688不错的反编译软件,具体使用见readme 使用前需要将解压后的 ... -
定制Android-Lint检查问题的现有规则
2012-10-08 15:04 890http://blog.csdn.net/thl789/art ... -
Android-Lint检查的潜在问题
2012-10-08 15:02 29351.1问题描述-- Issue Android-Lint所 ... -
Android-Lint:查错与代码优化利器
2012-10-08 14:59 1638Android lint工具是一个静态代码分析工具,检 ... -
Android Lint分类及常见错误
2012-10-08 14:53 911常见类型: 一, Correctness:Messeges ( ... -
Android测试框架介绍
2012-10-07 14:05 766http://trinea.iteye.com/blog/13 ... -
Android自动化测试
2012-09-29 18:12 5648Android自动化测试shell脚本: http://blo ... -
Android测试网址
2012-09-29 17:53 1229官网地址: http://developer.android. ... -
Managing Projects-用命令行管理Android工程
2012-09-25 16:49 3478我们主要使用Android SDk中的“android”命令行 ... -
Android编码规范
2012-08-20 14:17 666http://www.cnblogs.com/yunfei18 ... -
Android开发环境部署方法
2012-07-30 12:32 777http://blog.csdn.net/mvpme82/ar ... -
Android安装
2012-07-23 11:18 616http://blog.csdn.net/mvpme82/ar ...
相关推荐
而"Android-Android自定义Lint检查"则涉及到如何扩展Lint的功能,为你的项目或团队定制专属的检查规则。 首先,理解Lint的基本工作原理至关重要。Lint通过扫描项目中的源代码、资源文件和构建配置,寻找可能的问题...
在 Android 开发中,Lint 会检查各种问题,包括但不限于: 1. **性能优化**:检测无用的资源、过度绘制、内存泄漏以及不必要的计算,帮助减少应用的内存占用和提升运行速度。 2. **错误和警告**:找出可能导致运行...
- **visitNode()**:覆盖`visitNode()`方法,这是lint检查的主要入口点。在这里,你可以遍历抽象语法树(AST)来分析代码。 - **issue()**:定义一个`LintIssue`对象,描述你的规则,包括ID、严重性、描述和修复...
本项目"基于注释的Androidlint检查生成"专注于利用注释实现自定义的lint检查,帮助开发者识别和修复Kotlin扩展使用不当或者其他违反编码约定的情况。 首先,了解`AndroidLint`的工作原理。它通过扫描项目的源代码,...
1. **Lint检查机制**:Android Lint通过遍历项目中的Java、XML和其他资源文件,应用一系列预定义的检查规则。每个检查规则都有特定的ID,用于识别和报告特定类型的问题。 2. **检查类别**:Lint检查涵盖了多个方面...
集成Android Lint插件的目的是在每次构建时自动运行Lint检查,这样开发者可以在代码合并之前及时发现并修复问题,提高团队的开发效率。 虽然原插件不再推荐使用,但目前Jenkins可以通过更现代的方式来实现类似的...
这就是为什么有些开发者会创建并分享自定义的`Lint`检查集合,如"Lint-Checks, android lint中没有现成的有用lint检查集合.zip"。 这个开源项目,"Lint-Checks",包含了开发者社区贡献的一系列非官方的`Lint`检查...
`AndrLintWatchDog`是一个专为Android定制的Lint检查工具集,它包含了多种自定义的Lint检查规则,旨在帮助开发者发现并修复潜在的问题,提高应用程序的稳定性和性能。本文将深入探讨这个工具集中的典型Custom Lint ...
它通过集成和封装Android Lint的功能,使得开发者无需深入了解Lint的底层机制,也能方便地运行Lint检查,获取关于代码质量的反馈。这不仅节省了开发者的学习成本,也减少了在项目中集成和使用Lint的复杂性。 Lin...
在这个特定的Lint检查中,它可能专注于以下几个方面: 1. **未处理的权限检查**:确保在使用需要权限的功能前,应用进行了适当的权限检查。例如,使用`ContextCompat.checkSelfPermission()`来检查当前是否已获得所...
`android-lint-summary`是为了更方便地理解和处理`Lint`检查的结果,它能汇总并格式化输出,使得开发者可以快速定位和修复问题。 首先,我们来了解`Android Lint`。它是Google提供的一个静态代码分析工具,能够扫描...
4. 设置过滤和优先级:通过配置Lint检查的过滤规则,可以专注于特定类型或严重级别的问题。此外,还可以调整问题的优先级,确保最重要的问题首先得到解决。 5. 代码审查工具集成:如果团队使用了像Crucible或Gerrit...
打开此功能(当然还有重建)后,测试 lint 规则的项目必须在非守护进程模式下运行,否则不会显示日志: gradle --no-daemon lint包含的探测器SocketUsageDetectorAst:来自“在没有适当权限的情况下检查 In
- **代码分析工具**:增强了代码检查工具Lint的功能,帮助开发者更好地发现潜在的代码问题。 - **多平台支持**:虽然主要针对Linux系统,但Chipmunk版本也支持跨平台操作,方便开发者在不同的操作系统之间切换。 ##...
对于更高级的定制,开发者可以编写新的Lint检查规则或者自定义现有的规则。这通常涉及到深入理解Lint的工作原理,以及学习如何使用`Writing New Lint Checks`和`Writing Custom Lint Rules`等官方文档中的指导。 在...
Android Lint检查笔记我们建议的大多数皮棉检查都已合并到AOSP studio-master-dev分支中,因此已从此处删除。 请参见 Android SDK版本。 同时,仍可以通过以下步骤单独编译它们并将它们作为jar插件包含在当前版本的...
本文将详细介绍如何为Android项目设置CheckStyle、FindBugs、PMD和Lint这四个知名的代码质量检查工具。 1. CheckStyle: CheckStyle是一个开源的代码质量检查工具,它可以帮助开发者遵循特定的编程规范和风格指南。...
完成上述步骤后,将你的自定义Lint检查器添加到项目中,可以在`build.gradle`文件中指定依赖。为了使其他项目也能使用你的规则,可以将其打包成一个独立的库,并发布到Maven仓库。 在实际开发中,自定义Lint规则...
Android Lint性能探针这是一个简单的工具,可帮助您在单个检查中查明性能瓶颈。 它使用Java字节码工具来收集和报告每个检测器的性能统计信息,以用于从Gradle调用的Lint分析。 尽管原则上可以使用替代的检测代理,...
4. **Lint 工具**:提供静态代码分析,帮助开发者找出潜在的问题和性能优化建议。 二、Android Studio 的安装步骤 1. **下载安装包**:获取"android-studio-bundle-141.1903250-windows",解压后运行安装程序。 2...