Here are the current list of checks that lint performs as of ADT 21: $ lint --showAvailable issues:Correctness===========AdapterViewChildren-------------------Summary: Checks that AdapterViews do not define their children in XMLPriority: 10 / 10Severity: WarningCategory: CorrectnessAdapterViews such as ListViews must be configured with data from Java code,such as a ListAdapter.More information: http://developer.android.com/reference/android/widget/AdapterView.htmlOnClick-------Summary: Ensures that onClick attribute values refer to real methodsPriority: 10 / 10Severity: ErrorCategory: CorrectnessThe onClick attribute value should be the name of a method in this View'scontext to invoke when the view is clicked. This name must correspond to apublic method that takes exactly one parameter of type View.Must be a string value, using '\;' to escape characters such as '\n' or'\uxxxx' for a unicode character.SuspiciousImport----------------Summary: Checks for 'import android.R' statements, which are usuallyaccidentalPriority: 9 / 10Severity: WarningCategory: CorrectnessImporting android.R is usually not intentional; it sometimes happens when youuse an IDE and ask it to automatically add imports at a time when yourproject's R class it not present.Once the import is there you might get a lot of "confusing" error messagesbecause of course the fields available on android.R are not the ones you'dexpect from just looking at your own R class.UsesMinSdkAttributes--------------------Summary: Checks that the minimum SDK and target SDK attributes are definedPriority: 9 / 10Severity: WarningCategory: CorrectnessThe manifest should contain a <uses-sdk> element which defines the minimumminimum API Level required for the application to run, as well as the targetversion (the highest API level you have tested the version for.)More information: http://developer.android.com/guide/topics/manifest/uses-sdk-element.htmlWrongViewCast-------------Summary: Looks for incorrect casts to views that according to the XML are of adifferent typePriority: 9 / 10Severity: ErrorCategory: CorrectnessKeeps track of the view types associated with ids and if it finds a usage ofthe id in the Java code it ensures that it is treated as the same type.MissingRegistered-----------------Summary: Ensures that classes referenced in the manifest are present in theproject or librariesPriority: 8 / 10Severity: ErrorCategory: CorrectnessIf a class is referenced in the manifest, it must also exist in the project(or in one of the libraries included by the project. This check helps uncovertypos in registration names, or attempts to rename or move classes withoutupdating the manifest file properly.More information: http://developer.android.com/guide/topics/manifest/manifest-intro.htmlNamespaceTypo-------------Summary: Looks for misspellings in namespace declarationsPriority: 8 / 10Severity: WarningCategory: CorrectnessAccidental misspellings in namespace declarations can lead to some veryobscure error messages. This check looks for potential misspellings to helptrack these down.Proguard--------Summary: Looks for problems in proguard config filesPriority: 8 / 10Severity: FatalCategory: CorrectnessUsing -keepclasseswithmembernames in a proguard config file is not correct; itcan cause some symbols to be renamed which should not be.Earlier versions of ADT used to create proguard.cfg files with the wrongformat. Instead of -keepclasseswithmembernames use -keepclasseswithmembers,since the old flags also implies "allow shrinking" which means symbols onlyreferred to from XML and not Java (such as possibly CustomViews) can getdeleted.More information: http://http://code.google.com/p/android/issues/detail?id=16384ScrollViewCount---------------Summary: Checks that ScrollViews have exactly one child widgetPriority: 8 / 10Severity: WarningCategory: CorrectnessScrollViews can only have one child widget. If you want more children, wrapthem in a container layout.StyleCycle----------Summary: Looks for cycles in style definitionsPriority: 8 / 10Severity: FatalCategory: CorrectnessThere should be no cycles in style definitions as this can lead to runtimeexceptions.More information: http://developer.android.com/guide/topics/ui/themes.html#InheritanceUnknownId---------Summary: Checks for id references in RelativeLayouts that are not definedelsewherePriority: 8 / 10Severity: FatalCategory: CorrectnessThe @+id/ syntax refers to an existing id, or creates a new one if it has notalready been defined elsewhere. However, this means that if you have a typo inyour reference, or if the referred view no longer exists, you do not get awarning since the id will be created on demand. This check catches errorswhere you have renamed an id without updating all of the references to it.WrongFolder-----------Summary: Finds resource files that are placed in the wrong foldersPriority: 8 / 10Severity: ErrorCategory: CorrectnessResource files are sometimes placed in the wrong folder, and it can lead tosubtle bugs that are hard to understand. This check looks for problems in thisarea, such as attempting to place a layout "alias" file in a layout/ folderrather than the values/ folder where it belongs.DalvikOverride--------------Summary: Looks for methods treated as overrides by DalvikPriority: 7 / 10Severity: ErrorCategory: CorrectnessThe Android virtual machine will treat a package private method in one classas overriding a package private method in its super class, even if they are inseparate packages. This may be surprising, but for compatibility reasons thebehavior has not been changed (yet).If you really did intend for this method to override the other, make themethod protected instead.If you did not intend the override, consider making the method private, orchanging its name or signature.DuplicateIds------------Summary: Checks for duplicate ids within a single layoutPriority: 7 / 10Severity: WarningCategory: CorrectnessWithin a layout, id's should be unique since otherwise findViewById() canreturn an unexpected view.InconsistentArrays------------------Summary: Checks for inconsistencies in the number of elements in arraysPriority: 7 / 10Severity: WarningCategory: CorrectnessWhen an array is translated in a different locale, it should normally have thesame number of elements as the original array. When adding or removingelements to an array, it is easy to forget to update all the locales, and thislint warning finds inconsistencies like these.Note however that there may be cases where you really want to declare adifferent number of array items in each configuration (for example where thearray represents available options, and those options differ for differentlayout orientations and so on), so use your own judgement to decide if this isreally an error.You can suppress this error type if it finds false errors in your project.NestedScrolling---------------Summary: Checks whether a scrolling widget has any nested scrolling widgetswithinPriority: 7 / 10Severity: WarningCategory: CorrectnessA scrolling widget such as a ScrollView should not contain any nestedscrolling widgets since this has various usability issuesResourceAsColor---------------Summary: Looks for calls to setColor where a resource id is passed instead ofa resolved colorPriority: 7 / 10Severity: ErrorCategory: CorrectnessMethods that take a color in the form of an integer should be passed an RGBtriple, not the actual color resource id. You must callgetResources().getColor(resource) to resolve the actual color value first.ScrollViewSize--------------Summary: Checks that ScrollViews use wrap_content in scrolling dimensionPriority: 7 / 10Severity: WarningCategory: CorrectnessScrollView children must set their layout_width or layout_height attributes towrap_content rather than fill_parent or match_parent in the scrollingdimensionTextViewEdits-------------Summary: Looks for TextViews being used for inputPriority: 7 / 10Severity: WarningCategory: CorrectnessUsing a <TextView> to input text is generally an error, you should be using<EditText> instead. EditText is a subclass of TextView, and some of theediting support is provided by TextView, so it's possible to set someinput-related properties on a TextView. However, using a TextView along withinput attributes is usually a cut & paste error. To input text you should beusing <EditText>.This check also checks subclasses of TextView, such as Button and CheckBox,since these have the same issue: they should not be used with editableattributes.CommitPrefEdits---------------Summary: Looks for code editing a SharedPreference but forgetting to callcommit() on itPriority: 6 / 10Severity: WarningCategory: CorrectnessAfter calling edit() on a SharedPreference, you must call commit() or apply()on the editor to save the results.DefaultLocale-------------Summary: Finds calls to locale-ambiguous String manipulation methodsPriority: 6 / 10Severity: WarningCategory: CorrectnessCalling String#toLowerCase() or #toUpperCase() without specifying an explicitlocale is a common source of bugs. The reason for that is that those methodswill use the current locale on the user's device, and even though the codeappears to work correctly when you are developing the app, it will fail insome locales. For example, in the Turkish locale, the uppercase replacementfor i is not I.If you want the methods to just perform ASCII replacement, for example toconvert an enum name, call String#toUpperCase(Locale.US) instead. If youreally want to use the current locale, callString#toUpperCase(Locale.getDefault()) instead.More information: http://developer.android.com/reference/java/util/Locale.html#default_localeDuplicateIncludedIds--------------------Summary: Checks for duplicate ids across layouts that are combined withinclude tagsPriority: 6 / 10Severity: WarningCategory: CorrectnessIt's okay for two independent layouts to use the same ids. However, if layoutsare combined with include tags, then the id's need to be unique within anychain of included layouts, or Activity#findViewById() can return an unexpectedview.Instantiatable--------------Summary: Ensures that classes registered in the manifest file areinstantiatablePriority: 6 / 10Severity: WarningCategory: CorrectnessActivities, services, broadcast receivers etc. registered in the manifest filemust be "instiantable" by the system, which means that the class must bepublic, it must have an empty public constructor, and if it's an inner class,it must be a static inner class.LibraryCustomView-----------------Summary: Flags custom attributes in libraries, which must use theres-auto-namespace insteadPriority: 6 / 10Severity: ErrorCategory: CorrectnessWhen using a custom view with custom attributes in a library project, thelayout must use the special namespace http://schemas.android.com/apk/res-autoinstead of a URI which includes the library project's own package. This willbe used to automatically adjust the namespace of the attributes when thelibrary resources are merged into the application project.MissingPrefix-------------Summary: Detect XML attributes not using the Android namespacePriority: 6 / 10Severity: ErrorCategory: CorrectnessMost Android views have attributes in the Android namespace. When referencingthese attributes you must include the namespace prefix, or your attribute willbe interpreted by aapt as just a custom attribute.Similarly, in manifest files, nearly all attributes should be in the android:namespace.MultipleUsesSdk---------------Summary: Checks that the <uses-sdk> element appears at most oncePriority: 6 / 10Severity: FatalCategory: CorrectnessThe <uses-sdk> element should appear just once; the tools will not merge thecontents of all the elements so if you split up the atttributes acrossmultiple elements, only one of them will take effect. To fix this, just mergeall the attributes from the various elements into a single <uses-sdk>element.More information: http://developer.android.com/guide/topics/manifest/uses-sdk-element.htmlNewApi------Summary: Finds API accesses to APIs that are not supported in all targeted APIversionsPriority: 6 / 10Severity: ErrorCategory: CorrectnessThis check scans through all the Android API calls in the application andwarns about any calls that are not available on all versions targeted by thisapplication (according to its minimum SDK attribute in the manifest).If you really want to use this API and don't need to support older devicesjust set the minSdkVersion in your AndroidManifest.xml file.If your code is deliberately accessing newer APIs, and you have ensured (e.g.with conditional execution) that this code will only ever be called on asupported platform, then you can annotate your class or method with the@TargetApi annotation specifying the local minimum SDK to apply, such as@TargetApi(11), such that this check considers 11 rather than your manifestfile's minimum SDK as the required API level.OldTargetApi------------Summary: Checks that the manifest specifies a targetSdkVersion that is recentPriority: 6 / 10Severity: WarningCategory: CorrectnessWhen your application runs on a version of Android that is more recent thanyour targetSdkVersion specifies that it has been tested with, variouscompatibility modes kick in. This ensures that your application continues towork, but it may look out of place. For example, if the targetSdkVersion isless than 14, your app may get an option button in the UI.To fix this issue, set the targetSdkVersion to the highest available value.Then test your app to make sure everything works correctly. You may want toconsult the compatibility notes to see what changes apply to each version youare adding support for:http://developer.android.com/reference/android/os/Build.VERSION_CODES.htmlMore information: http://developer.android.com/reference/android/os/Build.VERSION_CODES.htmlRegistered----------Summary: Ensures that Activities, Services and Content Providers areregistered in the manifestPriority: 6 / 10Severity: WarningCategory: CorrectnessActivities, services and content providers should be registered in theAndroidManifext.xml file using <activity>, <service> and <provider> tags.If your activity is simply a parent class intended to be subclassed by other"real" activities, make it an abstract class.More information: http://developer.android.com/guide/topics/manifest/manifest-intro.htmlSdCardPath----------Summary: Looks for hardcoded references to /sdcardPriority: 6 / 10Severity: WarningCategory: CorrectnessYour code should not reference the /sdcard path directly; instead useEnvironment.getExternalStorageDirectory().getPath()More information: http://developer.android.com/guide/topics/data/data-storage.html#filesExternalShowToast---------Summary: Looks for code creating a Toast but forgetting to call show() on itPriority: 6 / 10Severity: WarningCategory: CorrectnessToast.makeText() creates a Toast but does not show it. You must call show() onthe resulting object to actually make the Toast appear.SimpleDateFormat----------------Summary: Using SimpleDateFormat directly without an explicit localePriority: 6 / 10Severity: WarningCategory: CorrectnessAlmost all callers should use getDateInstance(), getDateTimeInstance(), orgetTimeInstance() to get a ready-made instance of SimpleDateFormat suitablefor the user's locale. The main reason you'd create an instance this classdirectly is because you need to format/parse a specific machine-readableformat, in which case you almost certainly want to explicitly ask for US toensure that you get ASCII digits (rather than, say, Arabic digits).Therefore, you should either use the form of the SimpleDateFormat constructorwhere you pass in an explicit locale, such as Locale.US, or use one of the getinstance methods, or suppress this error if really know what you are doing.More information: http://developer.android.com/reference/java/text/SimpleDateFormat.htmlUniquePermission----------------Summary: Checks that permission names are uniquePriority: 6 / 10Severity: ErrorCategory: CorrectnessThe unqualified names or your permissions must be unique. The reason for thisis that at build time, the aapt tool will generate a class named Manifestwhich contains a field for each of your permissions. These fields are namedusing your permission unqualified names (i.e. the name portion after the lastdot).If more than one permission maps to the same field name, that field willarbitrarily name just one of them.ValidFragment-------------Summary: Ensures that Fragment subclasses can be instantiatedPriority: 6 / 10Severity: WarningCategory: CorrectnessFrom the Fragment documentation:Every fragment must have an empty constructor, so it can be instantiated whenrestoring its activity's state. It is strongly recommended that subclasses donot have other constructors with parameters, since these constructors will notbe called when the fragment is re-instantiated; instead, arguments can besupplied by the caller with setArguments(Bundle) and later retrieved by theFragment with getArguments().More information: http://developer.android.com/reference/android/app/Fragment.html#Fragment()WrongManifestParent-------------------Summary: Checks that various manifest elements are declared in the rightplacePriority: 6 / 10Severity: FatalCategory: CorrectnessThe <uses-library> element should be defined as a direct child of the<application> tag, not the <manifest> tag or an <activity> tag. Similarly, a<uses-sdk> tag much be declared at the root level, and so on. This check looksfor incorrect declaration locations in the manifest, and complains if anelement is found in the wrong place.More information: http://developer.android.com/guide/topics/manifest/manifest-intro.htmlDuplicateActivity-----------------Summary: Checks that an activity is registered only once in the manifestPriority: 5 / 10Severity: ErrorCategory: CorrectnessAn activity should only be registered once in the manifest. If it isaccidentally registered more than once, then subtle errors can occur, sinceattribute declarations from the two elements are not merged, so you mayaccidentally remove previous declarations.ManifestOrder-------------Summary: Checks for manifest problems like <uses-sdk> after the <application>tagPriority: 5 / 10Severity: WarningCategory: CorrectnessThe <application> tag should appear after the elements which declare whichversion you need, which features you need, which libraries you need, and soon. In the past there have been subtle bugs (such as themes not gettingapplied correctly) when the <application> tag appears before some of theseother elements, so it's best to order your manifest in the logical dependencyorder.MissingId---------Summary: Ensures that XML tags like <fragment> specify an id or tag attributePriority: 5 / 10Severity: WarningCategory: CorrectnessIf you do not specify an android:id or an android:tag attribute on a<fragment> element, then if the activity is restarted (for example for anorientation rotation) you may lose state. From the fragment documentation:"Each fragment requires a unique identifier that the system can use to restorethe fragment if the activity is restarted (and which you can use to capturethe fragment to perform transactions, such as remove it). * Supply theandroid:id attribute with a unique ID.* Supply the android:tag attribute with a unique string.If you provide neither of the previous two, the system uses the ID of thecontainer view.More information: http://developer.android.com/guide/components/fragments.htmlProtectedPermissons-------------------Summary: Looks for permissions that are only granted to system appsPriority: 5 / 10Severity: ErrorCategory: CorrectnessPermissions with the protection level signature or signatureOrSystem are onlygranted to system apps. If an app is a regular non-system app, it will neverbe able to use these permissions.StateListReachable------------------Summary: Looks for unreachable states in a <selector>Priority: 5 / 10Severity: WarningCategory: CorrectnessIn a selector, only the last child in the state list should omit a statequalifier. If not, all subsequent items in the list will be ignored since thegiven item will match all.UnknownIdInLayout-----------------Summary: Makes sure that @+id references refer to views in the same layoutPriority: 5 / 10Severity: WarningCategory: CorrectnessThe @+id/ syntax refers to an existing id, or creates a new one if it has notalready been defined elsewhere. However, this means that if you have a typo inyour reference, or if the referred view no longer exists, you do not get awarning since the id will be created on demand.This is sometimes intentional, for example where you are referring to a viewwhich is provided in a different layout via an include. However, it is usuallyan accident where you have a typo or you have renamed a view without updatingall the references to it.UnlocalizedSms--------------Summary: Looks for code sending text messages to unlocalized phone numbersPriority: 5 / 10Severity: WarningCategory: CorrectnessSMS destination numbers must start with a country code or the application codemust ensure that the SMS is only sent when the user is in the same country asthe receiver.GridLayout----------Summary: Checks for potential GridLayout errors like declaring rows andcolumns outside the declared grid dimensionsPriority: 4 / 10Severity: FatalCategory: CorrectnessDeclaring a layout_row or layout_column that falls outside the declared sizeof a GridLayout's rowCount or columnCount is usually an unintentional error.InOrMmUsage-----------Summary: Looks for use of the "mm" or "in" dimensionsPriority: 4 / 10Severity: WarningCategory: CorrectnessAvoid using mm (millimeters) or in (inches) as the unit for dimensions.While it should work in principle, unfortunately many devices do not reportthe correct true physical density, which means that the dimension calculationswon't work correctly. You are better off using dp (and for font sizes, sp.)RequiredSize------------Summary: Ensures that the layout_width and layout_height are specified for allviewsPriority: 4 / 10Severity: ErrorCategory: CorrectnessAll views must specify an explicit layout_width and layout_height attribute.There is a runtime check for this, so if you fail to specify a size, anexception is thrown at runtime.It's possible to specify these widths via styles as well. GridLayout, as aspecial case, does not require you to specify a size.ExtraText---------Summary: Looks for extraneous text in layout filesPriority: 3 / 10Severity: WarningCategory: CorrectnessLayout resource files should only contain elements and attributes. Any XMLtext content found in the file is likely accidental (and potentially dangerousif the text resembles XML and the developer believes the text to befunctional)InnerclassSeparator-------------------Summary: Ensures that inner classes are referenced using '$' instead of '.' inclass namesPriority: 3 / 10Severity: WarningCategory: CorrectnessWhen you reference an inner class in a manifest file, you must use '$' insteadof '.' as the separator character, i.e. Outer$Inner instead of Outer.Inner.(If you get this warning for a class which is not actually an inner class,it's because you are using uppercase characters in your package name, which isnot conventional.)LocalSuppress-------------Summary: Looks for @SuppressLint annotations in locations where it doesn'twork for class based checksPriority: 3 / 10Severity: ErrorCategory: CorrectnessThe @SuppressAnnotation is used to suppress Lint warnings in Java files.However, while many lint checks analyzes the Java source code, where they canfind annotations on (for example) local variables, some checks are analyzingthe .class files. And in class files, annotations only appear on classes,fields and methods. Annotations placed on local variables disappear. If youattempt to suppress a lint error for a class-file based lint check, thesuppress annotation not work. You must move the annotation out to thesurrounding method.PrivateResource---------------Summary: Looks for references to private resourcesPriority: 3 / 10Severity: FatalCategory: CorrectnessPrivate resources should not be referenced; the may not be present everywhere,and even where they are they may disappear without notice.To fix this, copy the resource into your own project. You can find theplatform resources under $ANDROID_SK/platforms/android-$VERSION/data/res/.ProguardSplit-------------Summary: Checks for old proguard.cfg files that contain generic Android rulesPriority: 3 / 10Severity: WarningCategory: CorrectnessEarlier versions of the Android tools bundled a single proguard.cfg filecontaining a ProGuard configuration file suitable for Android shrinking andobfuscation. However, that version was copied into new projects, which meansthat it does not continue to get updated as we improve the default ProGuardrules for Android.In the new version of the tools, we have split the ProGuard configuration intotwo halves:* A simple configuration file containing only project-specific flags, in yourproject* A generic configuration file containing the recommended set of ProGuardoptions for Android projects. This generic file lives in the SDK installdirectory which means that it gets updated along with the tools.In order for this to work, the proguard.config property in theproject.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 new proguard-project.txtfile in your project containing any project specific ProGuard flags as well asany customizations you have made, then update your project.properties file tocontain:proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-projec.txtSpUsage-------Summary: Looks for uses of "dp" instead of "sp" dimensions for text sizesPriority: 3 / 10Severity: WarningCategory: CorrectnessWhen setting text sizes, you should normally use sp, or "scale-independentpixels". This is like the dp unit, but it is also scaled by the user's fontsize preference. It is recommend you use this unit when specifying font sizes,so they will be adjusted for both the screen density and the user'spreference.There are cases where you might need to use dp; typically this happens whenthe text is in a container with a specific dp-size. This will prevent the textfrom spilling outside the container. Note however that this means that theuser's font size settings are not respected, so consider adjusting the layoutitself to be more flexible.More information: http://developer.android.com/training/multiscreen/screendensities.htmlDeprecated----------Summary: Looks for usages of deprecated layouts, attributes, and so on.Priority: 2 / 10Severity: WarningCategory: CorrectnessDeprecated views, attributes and so on are deprecated because there is abetter way to do something. Do it that new way. You've been warned.MangledCRLF-----------Summary: Checks that files with DOS line endings are consistentPriority: 2 / 10Severity: ErrorCategory: CorrectnessOn Windows, line endings are typically recorded as carriage return plusnewline: \r\n.This detector looks for invalid line endings with repeated carriage returncharacters (without newlines). Previous versions of the ADT plugin couldaccidentally introduce these into the file, and when editing the file, theeditor could produce confusing visual artifacts.More information: https://bugs.eclipse.org/bugs/show_bug.cgi?id=375421PxUsage-------Summary: Looks for use of the "px" dimensionPriority: 2 / 10Severity: WarningCategory: CorrectnessFor performance reasons and to keep the code simpler, the Android system usespixels as the standard unit for expressing dimension or coordinate values.That means that the dimensions of a view are always expressed in the codeusing pixels, but always based on the current screen density. For instance, ifmyView.getWidth() returns 10, the view is 10 pixels wide on the currentscreen, but on a device with a higher density screen, the value returned mightbe 15. If you use pixel values in your application code to work with bitmapsthat are not pre-scaled for the current screen density, you might need toscale the pixel values that you use in your code to match the un-scaled bitmapsource.More information: http://developer.android.com/guide/practices/screens_support.html#screen-independenceCorrectness:Messages====================StringFormatInvalid-------------------Summary: Checks that format strings are validPriority: 9 / 10Severity: ErrorCategory: Correctness:MessagesIf a string contains a '%' character, then the string may be a formattingstring which will be passed to String.format from Java code to replace each'%' occurrence with specific values.This lint warning checks for two related problems:(1) Formatting strings that are invalid, meaning that String.format will throwexceptions at runtime when attempting to use the format string.(2) Strings containing '%' that are not formatting strings getting passed to aString.format call. In this case the '%' will need to be escaped as '%%'.NOTE: Not all Strings which look like formatting strings are intended for useby String.format; for example, they may contain date formats intended forandroid.text.format.Time#format(). Lint cannot always figure out that a Stringis a date format, so you may get false warnings in those scenarios. See thesuppress help topic for information on how to suppress errors in that case.StringFormatMatches-------------------Summary: Ensures that the format used in <string> definitions is compatiblewith the String.format callPriority: 9 / 10Severity: ErrorCategory: Correctness:MessagesThis lint check ensures the following:(1) If there are multiple translations of the format string, then alltranslations use the same type for the same numbered arguments(2) The usage of the format string in Java is consistent with the formatstring, meaning that the parameter types passed to String.format matches thosein the format string.MissingTranslation------------------Summary: Checks for incomplete translations where not all strings aretranslatedPriority: 8 / 10Severity: FatalCategory: Correctness:MessagesIf an application has more than one locale, then all the strings declared inone language should also be translated in all other languages.If the string should not be translated, you can add the attributetranslatable="false" on the <string> element, or you can define all yournon-translatable strings in a resource file called donottranslate.xml. Or, youcan ignore the issue with a tools:ignore="MissingTranslation" attribute.By default this detector allows regions of a language to just provide a subsetof the strings and fall back to the standard language strings. You can requireall regions to provide a full translation by setting the environment variableANDROID_LINT_COMPLETE_REGIONS.Typos-----Summary: Looks for typos in messagesPriority: 7 / 10Severity: WarningCategory: Correctness:MessagesThis check looks through the string definitions, and if it finds any wordsthat look like likely misspellings, they are flagged.ExtraTranslation----------------Summary: Checks for translations that appear to be unused (no default languagestring)Priority: 6 / 10Severity: FatalCategory: Correctness:MessagesIf a string appears in a specific language translation file, but there is nocorresponding string in the default locale, then this string is probablyunused. (It's technically possible that your application is only intended torun in a specific locale, but it's still a good idea to provide a fallback.).Note that these strings can lead to crashes if the string is looked up on anylocale not providing a translation, so it's important to clean them up.StringFormatCount-----------------Summary: Ensures that all format strings are used and that the same number isdefined across translationsPriority: 5 / 10Severity: WarningCategory: Correctness:MessagesWhen a formatted string takes arguments, it usually needs to reference thesame arguments in all translations. There are cases where this is not thecase, so this issue is a warning rather than an error by default. However,this usually happens when a language is not translated or updated correctly.Security========PackagedPrivateKey------------------Summary: Looks for packaged private key filesPriority: 8 / 10Severity: WarningCategory: SecurityIn general, you should not package private key files inside your app.GrantAllUris------------Summary: Checks for <grant-uri-permission> elements where everything issharedPriority: 7 / 10Severity: WarningCategory: SecurityThe <grant-uri-permission> element allows specific paths to be shared. Thisdetector checks for a path URL of just '/' (everything), which is probably notwhat you want; you should limit access to a subset.SetJavaScriptEnabled--------------------Summary: Looks for invocations ofandroid.webkit.WebSettings.setJavaScriptEnabledPriority: 6 / 10Severity: WarningCategory: SecurityYour code should not invoke setJavaScriptEnabled if you are not sure thatyourapp really requires JavaScript support.More information: http://developer.android.com/guide/practices/security.htmlExportedContentProvider-----------------------Summary: Checks for exported content providers that do not requirepermissionsPriority: 5 / 10Severity: WarningCategory: SecurityContent providers are exported by default and any application on the systemcan potentially use them to read and write data. If the contentproviderprovides access to sensitive data, it should be protected by specifyingexport=false in the manifest or by protecting it with a permission that can begranted to other applications.ExportedReceiver----------------Summary: Checks for exported receivers that do not require permissionsPriority: 5 / 10Severity: WarningCategory: SecurityExported receivers (receivers which either set exported=true or contain anintent-filter and do not specify exported=false) should define a permissionthat an entity must have in order to launch the receiver or bind to it.Without this, any application can use this receiver.ExportedService---------------Summary: Checks for exported services that do not require permissionsPriority: 5 / 10Severity: WarningCategory: SecurityExported services (services which either set exported=true or contain anintent-filter and do not specify exported=false) should define a permissionthat an entity must have in order to launch the service or bind to it. Withoutthis, any application can use this service.HardcodedDebugMode------------------Summary: Checks for hardcoded values of android:debuggable in the manifestPriority: 5 / 10Severity: WarningCategory: SecurityIt's best to leave out the android:debuggable attribute from the manifest. Ifyou do, then the tools will automatically insert android:debuggable=true whenbuilding an APK to debug on an emulator or device. And when you perform arelease build, such as Exporting APK, it will automatically set it to false.If on the other hand you specify a specific value in the manifest file, thenthe tools will always use it. This can lead to accidentally publishing yourapp with debug information.WorldReadableFiles------------------Summary: Checks for openFileOutput() and getSharedPreferences() calls passingMODE_WORLD_READABLEPriority: 4 / 10Severity: WarningCategory: SecurityThere are cases where it is appropriate for an application to write worldreadable files, but these should be reviewed carefully to ensure that theycontain no private data that is leaked to other applications.WorldWriteableFiles-------------------Summary: Checks for openFileOutput() and getSharedPreferences() calls passingMODE_WORLD_WRITEABLEPriority: 4 / 10Severity: WarningCategory: SecurityThere are cases where it is appropriate for an application to write worldwriteable files, but these should be reviewed carefully to ensure that theycontain no private data, and that if the file is modified by a maliciousapplication it does not trick or compromise your application.AllowBackup-----------Summary: Ensure that allowBackup is explicitly set in the application'smanifestPriority: 3 / 10Severity: WarningCategory: SecurityThe allowBackup attribute determines if an application's data can be backed upand restored. It is documented athttp://developer.android.com/reference/android/R.attr.html#allowBackupBy default, this flag is set to true. When this flag is set to true,application data can be backed up and restored by the user using adb backupand adb restore.This may have security consequences for an application. adb backup allowsusers who have enabled USB debugging to copy application data off of thedevice. Once backed up, all application data can be read by the user. adbrestore allows creation of application data from a source specified by theuser. Following a restore, applications should not assume that the data, filepermissions, and directory permissions were created by the applicationitself.Setting allowBackup="false" opts an application out of both backup andrestore.To fix this warning, decide whether your application should support backup,and explicitly set android:allowBackup=(true|false)"More information: http://developer.android.com/reference/android/R.attr.html#allowBackupExportedActivity----------------Summary: Checks for exported activities that do not require permissionsPriority: 2 / 10Severity: WarningCategory: SecurityExported activities (activities which either set exported=true or contain anintent-filter and do not specify exported=false) should define a permissionthat an entity must have in order to launch the activity or bind to it.Without this, any application can use this activity.Performance===========DrawAllocation--------------Summary: Looks for memory allocations within drawing codePriority: 9 / 10Severity: WarningCategory: PerformanceYou should avoid allocating objects during a drawing or layout operation.These are called frequently, so a smooth UI can be interrupted by garbagecollection pauses caused by the object allocations.The way this is generally handled is to allocate the needed objects up frontand to reuse them for each drawing operation.Some methods allocate memory on your behalf (such as Bitmap.create), and theseshould be handled in the same way.SecureRandom------------Summary: Looks for suspicious usage of the SecureRandom classPriority: 9 / 10Severity: WarningCategory: PerformanceSpecifying a fixed seed will cause the instance to return a predictablesequence of numbers. This may be useful for testing but it is not appropriatefor secure use.More information: http://developer.android.com/reference/java/security/SecureRandom.htmlWakelock--------Summary: Looks for problems with wakelock usagePriority: 9 / 10Severity: WarningCategory: PerformanceFailing to release a wakelock properly can keep the Android device in a highpower mode, which reduces battery life. There are several causes of this, suchas releasing the wake lock in onDestroy() instead of in onPause(), failing tocall release() in all possible code paths after an acquire(), and so on.NOTE: If you are using the lock just to keep the screen on, you shouldstrongly consider using FLAG_KEEP_SCREEN_ON instead. This window flag will becorrectly managed by the platform as the user moves between applications anddoesn't require a special permission. Seehttp://developer.android.com/reference/android/view/WindowManager.LayoutParamshtml#FLAG_KEEP_SCREEN_ON.ObsoleteLayoutParam-------------------Summary: Looks for layout params that are not valid for the given parentlayoutPriority: 6 / 10Severity: WarningCategory: PerformanceThe given layout_param is not defined for the given layout, meaning it has noeffect. This usually happens when you change the parent layout or move viewcode around without updating the layout params. This will cause uselessattribute processing at runtime, and is misleading for others reading thelayout so the parameter should be removed.UseCompoundDrawables--------------------Summary: Checks whether the current node can be replaced by a TextView usingcompound drawables.Priority: 6 / 10Severity: WarningCategory: PerformanceA LinearLayout which contains an ImageView and a TextView can be moreefficiently handled as a compound drawable (a single TextView, using thedrawableTop, drawableLeft, drawableRight and/or drawableBottom attributes todraw one or more images adjacent to the text).If the two widgets are offset from each other with margins, this can bereplaced with a drawablePadding attribute.There's a lint quickfix to perform this conversion in the Eclipse plugin.ViewTag-------Summary: Finds potential leaks when using View.setTagPriority: 6 / 10Severity: WarningCategory: PerformancePrior to Android 4.0, the implementation of View.setTag(int, Object) wouldstore the objects in a static map, where the values were strongly referenced.This means that if the object contains any references pointing back to thecontext, the context (which points to pretty much everything else) will leak.If you pass a view, the view provides a reference to the context that createdit. Similarly, view holders typically contain a view, and cursors aresometimes also associated with views.FieldGetter-----------Summary: Suggests replacing uses of getters with direct field access within aclassPriority: 4 / 10Severity: WarningCategory: PerformanceNOTE: This issue is disabled by default!You can enable it by adding --enable FieldGetterAccessing a field within the class that defines a getter for that field is atleast 3 times faster than calling the getter. For simple getters that donothing other than return the field, you might want to just reference thelocal field directly instead.NOTE: As of Android 2.3 (Gingerbread), this optimization is performedautomatically by Dalvik, so there is no need to change your code; this is onlyrelevant if you are targeting older versions of Android.More information: http://developer.android.com/guide/practices/design/performance.html#internal_get_setHandlerLeak-----------Summary: Ensures that Handler classes do not hold on to a reference to anouter classPriority: 4 / 10Severity: WarningCategory: PerformanceIn Android, Handler classes should be static or leaks might occur. Messagesenqueued on the application thread's MessageQueue also retain their targetHandler. If the Handler is an inner class, its outer class will be retained aswell. To avoid leaking the outer class, declare the Handler as a static nestedclass with a WeakReference to its outer class.MergeRootFrame--------------Summary: Checks whether a root <FrameLayout> can be replaced with a <merge>tagPriority: 4 / 10Severity: WarningCategory: PerformanceIf a <FrameLayout> is the root of a layout and does not provide background orpadding etc, it can often be replaced with a <merge> tag which is slightlymore efficient. Note that this depends on context, so make sure you understandhow the <merge> tag works before proceeding.More information: http://android-developers.blogspot.com/2009/03/android-layout-tricks-3-optimize-by.htmlUseSparseArrays---------------Summary: Looks for opportunities to replace HashMaps with the more efficientSparseArrayPriority: 4 / 10Severity: WarningCategory: PerformanceFor maps where the keys are of type integer, it's typically more efficient touse the Android SparseArray API. This check identifies scenarios where youmight want to consider using SparseArray instead of HashMap for betterperformance.This is particularly useful when the value types are primitives like ints,where you can use SparseIntArray and avoid auto-boxing the values from int toInteger.If you need to construct a HashMap because you need to call an API outside ofyour control which requires a Map, you can suppress this warning using forexample the @SuppressLint annotation.UseValueOf----------Summary: Looks for usages of "new" for wrapper classes which should use"valueOf" insteadPriority: 4 / 10Severity: WarningCategory: PerformanceYou should not call the constructor for wrapper classes directly, such as`newInteger(42)`. Instead, call the valueOf factory method, such asInteger.valueOf(42). This will typically use less memory because commonintegers such as 0 and 1 will share a single instance.DisableBaselineAlignment------------------------Summary: Looks for LinearLayouts which should setandroid:baselineAligned=falsePriority: 3 / 10Severity: WarningCategory: PerformanceWhen a LinearLayout is used to distribute the space proportionally betweennested layouts, the baseline alignment property should be turned off to makethe layout computation faster.FloatMath---------Summary: Suggests replacing android.util.FloatMath calls with java.lang.MathPriority: 3 / 10Severity: WarningCategory: PerformanceIn older versions of Android, using android.util.FloatMath was recommended forperformance reasons when operating on floats. However, on modern hardwaredoubles are just as fast as float (though they take more memory), and inrecent versions of Android, FloatMath is actually slower than usingjava.lang.Math due to the way the JIT optimizes java.lang.Math. Therefore, youshould use Math instead of FloatMath if you are only targeting Froyo andabove.More information: http://developer.android.com/guide/practices/design/performance.html#avoidfloatInefficientWeight-----------------Summary: Looks for inefficient weight declarations in LinearLayoutsPriority: 3 / 10Severity: WarningCategory: PerformanceWhen only a single widget in a LinearLayout defines a weight, it is moreefficient to assign a width/height of 0dp to it since it will absorb all theremaining space anyway. With a declared width/height of 0dp it does not haveto measure its own size first.NestedWeights-------------Summary: Looks for nested layout weights, which are costlyPriority: 3 / 10Severity: WarningCategory: PerformanceLayout weights require a widget to be measured twice. When a LinearLayout withnon-zero weights is nested inside another LinearLayout with non-zero weights,then the number of measurements increase exponentially.Overdraw--------Summary: Looks for overdraw issues (where a view is painted only to be fullypainted over)Priority: 3 / 10Severity: WarningCategory: PerformanceIf you set a background drawable on a root view, then you should use a customtheme where the theme background is null. Otherwise, the theme background willbe painted first, only to have your custom background completely cover it;this is called "overdraw".NOTE: This detector relies on figuring out which layouts are associated withwhich activities based on scanning the Java code, and it's currently doingthat using an inexact pattern matching algorithm. Therefore, it canincorrectly conclude which activity the layout is associated with and thenwrongly complain that a background-theme is hidden.If you want your custom background on multiple pages, then you should considermaking a custom theme with your custom background and just using that themeinstead of a root element background.Of course it's possible that your custom drawable is translucent and you wantit to be mixed with the background. However, you will get better performanceif you pre-mix the background with your drawable and use that resulting imageor color as a custom theme background instead.UnusedResources---------------Summary: Looks for unused resourcesPriority: 3 / 10Severity: WarningCategory: PerformanceUnused resources make applications larger and slow down builds.UselessLeaf-----------Summary: Checks whether a leaf layout can be removed.Priority: 2 / 10Severity: WarningCategory: PerformanceA layout that has no children or no background can often be removed (since itis invisible) for a flatter and more efficient layout hierarchy.UselessParent-------------Summary: Checks whether a parent layout can be removed.Priority: 2 / 10Severity: WarningCategory: PerformanceA layout with children that has no siblings, is not a scrollview or a rootlayout, and does not have a background, can be removed and have its childrenmoved directly into the parent for a flatter and more efficient layouthierarchy.TooDeepLayout-------------Summary: Checks whether a layout hierarchy is too deepPriority: 1 / 10Severity: WarningCategory: PerformanceLayouts with too much nesting is bad for performance. Consider using a flatterlayout (such as RelativeLayout or GridLayout).The default maximum depth is 10but can be configured with the environment variable ANDROID_LINT_MAX_DEPTH.TooManyViews------------Summary: Checks whether a layout has too many viewsPriority: 1 / 10Severity: WarningCategory: PerformanceUsing too many views in a single layout in a layout is bad for performance.Consider using compound drawables or other tricks for reducing the number ofviews in this layout.The maximum view count defaults to 80 but can be configured with theenvironment variable ANDROID_LINT_MAX_VIEW_COUNT.UnusedIds---------Summary: Looks for unused id'sPriority: 1 / 10Severity: WarningCategory: PerformanceNOTE: This issue is disabled by default!You can enable it by adding --enable UnusedIdsThis resource id definition appears not to be needed since it is notreferenced from anywhere. Having id definitions, even if unused, is notnecessarily a bad idea since they make working on layouts and menus easier, sothere is not a strong reason to delete these.UnusedNamespace---------------Summary: Finds unused namespaces in XML documentsPriority: 1 / 10Severity: WarningCategory: PerformanceUnused namespace declarations take up space and require processing that is notnecessaryUsability:Typography====================TypographyDashes----------------Summary: Looks for usages of hyphens which can be replaced by n dash and mdash charactersPriority: 5 / 10Severity: WarningCategory: Usability:TypographyThe "n dash" (–, –) and the "m dash" (—, —) characters are usedfor ranges (n dash) and breaks (m dash). Using these instead of plain hyphenscan make text easier to read and your application will look more polished.More information: http://en.wikipedia.org/wiki/DashTypographyEllipsis------------------Summary: Looks for ellipsis strings (...) which can be replaced with anellipsis characterPriority: 5 / 10Severity: WarningCategory: Usability:TypographyYou can replace the string "..." with a dedicated ellipsis character, ellipsischaracter (…, …). This can help make the text more readable.More information: http://en.wikipedia.org/wiki/EllipsisTypographyFractions-------------------Summary: Looks for fraction strings which can be replaced with a fractioncharacterPriority: 5 / 10Severity: WarningCategory: Usability:TypographyYou can replace certain strings, such as 1/2, and 1/4, with dedicatedcharacters for these, such as ? (½) and BC (¼). This can help makethe text more readable.More information: http://en.wikipedia.org/wiki/Number_FormsTypographyQuotes----------------Summary: Looks for straight quotes which can be replaced by curvy quotesPriority: 5 / 10Severity: WarningCategory: Usability:TypographyNOTE: This issue is disabled by default!You can enable it by adding --enable TypographyQuotesStraight single quotes and double quotes, when used as a pair, can be replacedby "curvy quotes" (or directional quotes). This can make the text morereadable.Note that you should never use grave accents and apostrophes to quote, `likethis'.(Also note that you should not use curvy quotes for code fragments.)More information: http://en.wikipedia.org/wiki/Quotation_markTypographyOther---------------Summary: Looks for miscellaneous typographical problems like replacing (c)with ©Priority: 3 / 10Severity: WarningCategory: Usability:TypographyThis check looks for miscellaneous typographical problems and offersreplacement sequences that will make the text easier to read and yourapplication more polished.Usability:Icons===============IconNoDpi---------Summary: Finds icons that appear in both a -nodpi folder and a dpi folderPriority: 7 / 10Severity: WarningCategory: Usability:IconsBitmaps that appear in drawable-nodpi folders will not be scaled by theAndroid framework. If a drawable resource of the same name appears both in a-nodpi folder as well as a dpi folder such as drawable-hdpi, then the behavioris ambiguous and probably not intentional. Delete one or the other, or usedifferent names for the icons.IconColors----------Summary: Checks that icons follow the recommended visual stylePriority: 6 / 10Severity: WarningCategory: Usability:IconsNotification icons and Action Bar icons should only white and shades of gray.See the Android Design Guide for more details. Note that the way Lint decideswhether an icon is an action bar icon or a notification icon is based on thefilename prefix: ic_menu_ for action bar icons, ic_stat_ for notificationicons etc. These correspond to the naming conventions documented inhttp://developer.android.com/guide/practices/ui_guidelines/icon_design.htmlMore information: http://developer.android.com/design/style/iconography.htmlGifUsage--------Summary: Checks for images using the GIF file format which is discouragedPriority: 5 / 10Severity: WarningCategory: Usability:IconsThe .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#BitmapIconDipSize-----------Summary: Ensures that icons across densities provide roughly the samedensity-independent sizePriority: 5 / 10Severity: WarningCategory: Usability:IconsChecks the all icons which are provided in multiple densities, all compute toroughly the same density-independent pixel (dip) size. This catches errorswhere images are either placed in the wrong folder, or icons are changed tonew sizes but some folders are forgotten.IconDuplicatesConfig--------------------Summary: Finds icons that have identical bitmaps across various configurationparametersPriority: 5 / 10Severity: WarningCategory: Usability:IconsIf an icon is provided under different configuration parameters such asdrawable-hdpi or -v11, they should typically be different. This detectorcatches cases where the same icon is provided in different configurationfolder which is usually not intentional.IconExpectedSize----------------Summary: Ensures that launcher icons, notification icons etc have the correctsizePriority: 5 / 10Severity: WarningCategory: Usability:IconsNOTE: This issue is disabled by default!You can enable it by adding --enable IconExpectedSizeThere are predefined sizes (for each density) for launcher icons. You shouldfollow these conventions to make sure your icons fit in with the overall lookof the platform.More information: http://developer.android.com/design/style/iconography.htmlIconLocation------------Summary: Ensures that images are not defined in the density-independentdrawable folderPriority: 5 / 10Severity: WarningCategory: Usability:IconsThe res/drawable folder is intended for density-independent graphics such asshapes defined in XML. For bitmaps, move it to drawable-mdpi and considerproviding higher and lower resolution versions in drawable-ldpi, drawable-hdpiand drawable-xhdpi. If the icon really is density independent (for example asolid color) you can place it in drawable-nodpi.More information: http://developer.android.com/guide/practices/screens_support.htmlIconDensities-------------Summary: Ensures that icons provide custom versions for all supporteddensitiesPriority: 4 / 10Severity: WarningCategory: Usability:IconsIcons will look best if a custom version is provided for each of the majorscreen density classes (low, medium, high, extra high). This lint checkidentifies icons which do not have complete coverage across the densities.Low density is not really used much anymore, so this check ignores the ldpidensity. To force lint to include it, set the environment variableANDROID_LINT_INCLUDE_LDPI=true. For more information on current density usage,see http://developer.android.com/resources/dashboard/screens.htmlMore information: http://developer.android.com/guide/practices/screens_support.htmlIconDuplicates--------------Summary: Finds duplicated icons under different namesPriority: 3 / 10Severity: WarningCategory: Usability:IconsIf an icon is repeated under different names, you can consolidate and just useone of the icons and delete the others to make your application smaller.However, duplicated icons usually are not intentional and can sometimes pointto icons that were accidentally overwritten or accidentally not updated.IconExtension-------------Summary: Checks that the icon file extension matches the actual image formatin the filePriority: 3 / 10Severity: WarningCategory: Usability:IconsEnsures that icons have the correct file extension (e.g. a .png file is reallyin the PNG format and not for example a GIF file named .png.)IconMissingDensityFolder------------------------Summary: Ensures that all the density folders are presentPriority: 3 / 10Severity: WarningCategory: Usability:IconsIcons will look best if a custom version is provided for each of the majorscreen density classes (low, medium, high, extra high). This lint checkidentifies folders which are missing, such as drawable-hdpi.Low density is not really used much anymore, so this check ignores the ldpidensity. To force lint to include it, set the environment variableANDROID_LINT_INCLUDE_LDPI=true. For more information on current density usage,see http://developer.android.com/resources/dashboard/screens.htmlMore information: http://developer.android.com/guide/practices/screens_support.htmlUsability=========ButtonOrder-----------Summary: Ensures the dismissive action of a dialog is on the left andaffirmative on the rightPriority: 8 / 10Severity: WarningCategory: UsabilityAccording to the Android Design Guide,"Action buttons are typically Cancel and/or OK, with OK indicating thepreferred or most likely action. However, if the options consist of specificactions such as Close or Wait rather than a confirmation or cancellation ofthe action described in the content, then all the buttons should be activeverbs. As a rule, the dismissive action of a dialog is always on the leftwhereas the affirmative actions are on the right."This check looks for button bars and buttons which look like cancel buttons,and makes sure that these are on the left.More information: http://developer.android.com/design/building-blocks/dialogs.htmlBackButton----------Summary: Looks for Back buttons, which are not common on the Androidplatform.Priority: 6 / 10Severity: WarningCategory: UsabilityNOTE: This issue is disabled by default!You can enable it by adding --enable BackButtonAccording to the Android Design Guide,"Other platforms use an explicit back button with label to allow the user tonavigate up the application's hierarchy. Instead, Android uses the main actionbar's app icon for hierarchical navigation and the navigation bar's backbutton for temporal navigation."This check is not very sophisticated (it just looks for buttons with the label"Back"), so it is disabled by default to not trigger on common scenarios likepairs of Back/Next buttons to paginate through screens.More information: http://developer.android.com/design/patterns/pure-android.htmlMenuTitle---------Summary: Ensures that all menu items supply a titlePriority: 5 / 10Severity: WarningCategory: UsabilityFrom the action bar documentation:"It's important that you always define android:title for each menu item — evenif you don't declare that the title appear with the action item — for threereasons:* If there's not enough room in the action bar for the action item, the menuitem appears in the overflow menu and only the title appears.* Screen readers for sight-impaired users read the menu item's title.* If the action item appears with only the icon, a user can long-press theitem to reveal a tool-tip that displays the action item's title.The android:icon is always optional, but recommended.More information: http://developer.android.com/guide/topics/ui/actionbar.htmlTextFields----------Summary: Looks for text fields missing inputType or hint settingsPriority: 5 / 10Severity: WarningCategory: UsabilityProviding an inputType attribute on a text field improves usability becausedepending on the data to be input, optimized keyboards can be shown to theuser (such as just digits and parentheses for a phone number). Similarly,ahint attribute displays a hint to the user for what is expected in the textfield.The lint detector also looks at the id of the view, and if the id offers ahint of the purpose of the field (for example, the id contains the phrasephone or email), then lint will also ensure that the inputType contains thecorresponding type attributes.If you really want to keep the text field generic, you can suppress thiswarning by setting inputType="text".AlwaysShowAction----------------Summary: Checks for uses of showAsAction="always" and suggestsshowAsAction="ifRoom" insteadPriority: 3 / 10Severity: WarningCategory: UsabilityUsing showAsAction="always" in menu XML, or MenuItem.SHOW_AS_ACTION_ALWAYS inJava code is usually a deviation from the user interface style guide.UseifRoom or the corresponding MenuItem.SHOW_AS_ACTION_IF_ROOM instead.If always is used sparingly there are usually no problems and behavior isroughly equivalent to ifRoom but with preference over other ifRoom items.Using it more than twice in the same menu is a bad idea.This check looks for menu XML files that contain more than two always actions,or some always actions and no ifRoom actions. In Java code, it looks forprojects that contain references to MenuItem.SHOW_AS_ACTION_ALWAYS and noreferences to MenuItem.SHOW_AS_ACTION_IF_ROOM.More information: http://developer.android.com/design/patterns/actionbar.htmlViewConstructor---------------Summary: Checks that custom views define the expected constructorsPriority: 3 / 10Severity: WarningCategory: UsabilitySome layout tools (such as the Android layout editor for Eclipse) needs tofind 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 which does not apply whenused in a layout editor, you can surround the given code with a check to seeif View#isInEditMode() is false, since that method will return false atruntime but true within a user interface editor.ButtonCase----------Summary: Ensures that Cancel/OK dialog buttons use the canonicalcapitalizationPriority: 2 / 10Severity: WarningCategory: UsabilityThe standard capitalization for OK/Cancel dialogs is "OK" and "Cancel". Toensure that your dialogs use the standard strings, you can use the resourcestrings @android:string/ok and @android:string/cancel.Accessibility=============ContentDescription------------------Summary: Ensures that image widgets provide a contentDescriptionPriority: 3 / 10Severity: WarningCategory: AccessibilityNon-textual widgets like ImageViews and ImageButtons should use thecontentDescription attribute to specify a textual description of the widgetsuch that screen readers and other accessibility tools can adequately describethe user interface.LabelFor--------Summary: Ensures that text fields are marked with a labelFor attributePriority: 2 / 10Severity: WarningCategory: AccessibilityText fields should be labelled with a labelFor attribute, provided yourminSdkVersion is at least 17.If your view is labeled but by a label in a different layout which includesthis one, just suppress this warning from lint.Internationalization====================HardcodedText-------------Summary: Looks for hardcoded text attributes which should be converted toresource lookupPriority: 5 / 10Severity: WarningCategory: InternationalizationHardcoding text attributes directly in layout files is bad for severalreasons:* When creating configuration variations (for example for landscape orportrait)you have to repeat the actual text (and keep it up to date whenmaking changes)* The application cannot be translated to other languages by just adding newtranslations for existing string resources.EnforceUTF8-----------Summary: Checks that all XML resource files are using UTF-8 as the fileencodingPriority: 2 / 10Severity: WarningCategory: InternationalizationXML supports encoding in a wide variety of character sets. However, not alltools handle the XML encoding attribute correctly, and nearly all Android appsuse UTF-8, so by using UTF-8 you can protect yourself against subtle bugs whenusing non-ASCII characters. |
