Issue Types

## Overview

| Lint
4 | warning ObsoleteLintCustomCheck: Obsolete custom lint check
| Correctness
1 | warning FragmentTagUsage: Use FragmentContainerView instead of the <fragment> tag
2 | warning GradleDependency: Obsolete Gradle Dependency
1 | warning GradleDynamicVersion: Gradle Dynamic Version
| Security
1 | warning AllowBackup: AllowBackup/FullBackupContent Problems
| Performance
1 | warning UnusedResources: Unused resources
3 | warning UnusedIds: Unused id
| Usability
1 | warning SelectableText: Dynamic text should probably be selectable
1 | warning GoogleAppIndexingWarning: Missing support for Firebase App Indexing
| Accessibility
1 | error ContentDescription: Image without `contentDescription`
| Disabled Checks (1)

## Obsolete custom lint check

../../../../../.gradle/caches/transforms-3/eab42dfe75a616bad2c5600ef62620ac/transformed/jetified-annotation-experimental-1.0.0/jars/lint.jar: Lint found an issue registry (`androidx.annotation.experimental.lint.ExperimentalIssueRegistry`) which did not specify the Lint API version it was compiled with.
This means that the lint checks are likely not compatible.
If you are the author of this lint check, make your lint `IssueRegistry` class contain
override val api: Int = com.android.tools.lint.detector.api.CURRENT_API
or from Java,
@Override public int getApi() { return com.android.tools.lint.detector.api.ApiKt.CURRENT_API; }
If you are just using lint checks from a third party library you have no control over, you can disable these lint checks (if they misbehave) like this:
android {
lintOptions {
disable "UnsafeExperimentalUsageError",
"UnsafeExperimentalUsageWarning"
}
}
../../../../../.gradle/caches/transforms-3/205b6794ec5ff1601c2c2586e6c01667/transformed/appcompat-1.2.0/jars/lint.jar: Lint found an issue registry (`androidx.appcompat.AppCompatIssueRegistry`) which is older than the current API level; these checks may not work correctly.
Recompile the checks against the latest version. Custom check API version is 7 (4.0), current lint API level is 8 (4.1)
../../../../../.gradle/caches/transforms-3/e68d85c46a11bcf9dcdb748311f94acd/transformed/fragment-1.2.4/jars/lint.jar: Lint found an issue registry (`androidx.fragment.lint.FragmentIssueRegistry`) which is older than the current API level; these checks may not work correctly.
Recompile the checks against the latest version. Custom check API version is 6 (3.6), current lint API level is 8 (4.1)
../../../../../.gradle/caches/transforms-3/a8d90b74b6527e1f9c3fac825a19094e/transformed/jetified-lifecycle-runtime-ktx-2.2.0/jars/lint.jar: Lint found an issue registry (`androidx.lifecycle.lint.LifecycleRuntimeIssueRegistry`) which is older than the current API level; these checks may not work correctly.
Recompile the checks against the latest version. Custom check API version is 6 (3.6), current lint API level is 8 (4.1)
Lint can be extended with "custom checks": additional checks implemented by developers and libraries to for example enforce specific API usages required by a library or a company coding style guideline.
The Lint APIs are not yet stable, so these checks may either cause a performance degradation, or stop working, or provide wrong results.
This warning flags custom lint checks that are found to be using obsolete APIs and will need to be updated to run in the current lint environment.
It may also flag issues found to be using a newer version of the API, meaning that you need to use a newer version of lint (or Android Studio or Gradle plugin etc) to work with these checks.
To suppress this error, use the issue id "ObsoleteLintCustomCheck" as explained in the Suppressing Warnings and Errors section.
ObsoleteLintCustomCheck Warning Priority 10/10

## Use FragmentContainerView instead of the <fragment> tag

../../src/main/res/layout/content_main.xml:8: Replace the <fragment> tag with FragmentContainerView.

      5     android:layout_height="match_parent"
      6     app:layout_behavior="@string/appbar_scrolling_view_behavior">
      7
      8     <fragment
      9         android:id="@+id/nav_host_fragment_content_main"
     10         android:name="androidx.navigation.fragment.NavHostFragment"
     11         android:layout_width="0dp"

FragmentContainerView replaces the <fragment> tag as the preferred way of adding fragments via XML. Unlike the <fragment> tag, FragmentContainerView uses a normal `FragmentTransaction` under the hood to add the initial fragment, allowing further FragmentTransaction operations on the FragmentContainerView and providing a consistent timing for lifecycle events.
More info: https://developer.android.com/reference/androidx/fragment/app/FragmentContainerView.html
To suppress this error, use the issue id "FragmentTagUsage" as explained in the Suppressing Warnings and Errors section.
FragmentTagUsage Correctness Warning Priority 5/10

## Obsolete Gradle Dependency

../../build.gradle:56: A newer version of androidx.navigation:navigation-fragment-ktx than 2.3.4 is available: 2.3.5

     53     implementation 'androidx.appcompat:appcompat:1.2.0'
     54     implementation 'com.google.android.material:material:1.3.0'
     55     implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
     56     implementation 'androidx.navigation:navigation-fragment-ktx:2.3.4'
     57     implementation 'androidx.navigation:navigation-ui-ktx:2.3.4'
     58     testImplementation 'junit:junit:4.+'
     59     androidTestImplementation 'androidx.test.ext:junit:1.1.2'

../../build.gradle:57: A newer version of androidx.navigation:navigation-ui-ktx than 2.3.4 is available: 2.3.5

     54     implementation 'com.google.android.material:material:1.3.0'
     55     implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
     56     implementation 'androidx.navigation:navigation-fragment-ktx:2.3.4'
     57     implementation 'androidx.navigation:navigation-ui-ktx:2.3.4'
     58     testImplementation 'junit:junit:4.+'
     59     androidTestImplementation 'androidx.test.ext:junit:1.1.2'
     60     androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'

This detector looks for usages of libraries where the version you are using is not the current stable release. Using older versions is fine, and there are cases where you deliberately want to stick with an older version. However, you may simply not be aware that a more recent version is available, and that is what this lint check helps find.
Note: This issue has an associated quickfix operation in Android Studio and IntelliJ IDEA.
To suppress this error, use the issue id "GradleDependency" as explained in the Suppressing Warnings and Errors section.
GradleDependency Correctness Warning Priority 4/10

## Gradle Dynamic Version

../../build.gradle:58: Avoid using + in version numbers; can lead to unpredictable and unrepeatable builds (junit:junit:4.+)

     55     implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
     56     implementation 'androidx.navigation:navigation-fragment-ktx:2.3.4'
     57     implementation 'androidx.navigation:navigation-ui-ktx:2.3.4'
     58     testImplementation 'junit:junit:4.+'
     59     androidTestImplementation 'androidx.test.ext:junit:1.1.2'
     60     androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
     61 }

Using `+` in dependencies lets you automatically pick up the latest available version rather than a specific, named version. However, this is not recommended; your builds are not repeatable; you may have tested with a slightly different version than what the build server used. (Using a dynamic version as the major version number is more problematic than using it in the minor version position.)
Note: This issue has an associated quickfix operation in Android Studio and IntelliJ IDEA.
To suppress this error, use the issue id "GradleDynamicVersion" as explained in the Suppressing Warnings and Errors section.
GradleDynamicVersion Correctness Warning Priority 4/10

## AllowBackup/FullBackupContent Problems

../../src/main/AndroidManifest.xml:5: On SDK version 23 and up, your app data will be automatically backed up and restored on app install. Consider adding the attribute `android:fullBackupContent` to specify an `@xml` resource which configures which files to backup. More info: https://developer.android.com/training/backup/autosyncapi.html

      2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
      3     package="com.example.myapplication">
      4
      5     <application
      6         android:allowBackup="true"
      7         android:icon="@mipmap/ic_launcher"
      8         android:label="@string/app_name"

The `allowBackup` attribute determines if an application's data can be backed up and restored. It is documented at https://developer.android.com/reference/android/R.attr.html#allowBackup
By default, this flag is set to `true` which means application data can be backed up and restored by the OS. Setting `allowBackup="false"` opts the application out of being backed up and so users can't restore data related to it when they go through the device setup wizard.
Allowing backups may have security consequences for an application. Currently `adb backup` allows users who have enabled USB debugging to copy application data off of the device. Once backed up, all application data can be read by the user. `adb restore` allows creation of application data from a source specified by the user. Following a restore, applications should not assume that the data, file permissions, and directory permissions were created by the application itself.
To fix this warning, decide whether your application should support backup, and explicitly set `android:allowBackup=(true|false)"`.
If not set to false, and if targeting API 23 or later, lint will also warn that you should set `android:fullBackupContent` to configure auto backup.
More info:

- https://developer.android.com/training/backup/autosyncapi.html
- https://developer.android.com/reference/android/R.attr.html#allowBackup

Note: This issue has an associated quickfix operation in Android Studio and IntelliJ IDEA.
To suppress this error, use the issue id "AllowBackup" as explained in the Suppressing Warnings and Errors section.
AllowBackup Security Warning Priority 3/10

## Unused resources

../../src/main/res/values/strings.xml:11: The resource `R.string.hello_second_fragment` appears to be unused

      8     <string name="previous">Previous</string>
      9
     10     <string name="hello_first_fragment">Hello first fragment</string>
     11     <string name="hello_second_fragment">Hello second fragment. Arg: %1$s</string>
     12 </resources>

Unused resources make applications larger and slow down builds.
The unused resource check can ignore tests. If you want to include resources that are only referenced from tests, consider packaging them in a test source set instead.
You can include test sources in the unused resource check by setting the system property lint.unused-resources.include-tests=true, and to exclude them (usually for performance reasons), use lint.unused-resources.exclude-tests=true.
Note: This issue has an associated quickfix operation in Android Studio and IntelliJ IDEA.
To suppress this error, use the issue id "UnusedResources" as explained in the Suppressing Warnings and Errors section.
UnusedResources Performance Warning Priority 3/10

## Unused id

../../src/main/res/layout/activity_main.xml:15: The resource `R.id.toolbar` appears to be unused

     12         android:theme="@style/Theme.MyApplication.AppBarOverlay">
     13
     14         <androidx.appcompat.widget.Toolbar
     15             android:id="@+id/toolbar"
     16             android:layout_width="match_parent"
     17             android:layout_height="?attr/actionBarSize"
     18             android:background="?attr/colorPrimary"

../../src/main/res/layout/activity_main.xml:24: The resource `R.id.fab` appears to be unused

     21     </com.google.android.material.appbar.AppBarLayout>
     22
     23     <com.google.android.material.floatingactionbutton.FloatingActionButton
     24         android:id="@+id/fab"
     25         android:layout_width="wrap_content"
     26         android:layout_height="wrap_content"
     27         android:layout_gravity="bottom|end"

../../src/main/res/navigation/nav_graph.xml:5: The resource `R.id.nav_graph` appears to be unused

      2 <navigation xmlns:android="http://schemas.android.com/apk/res/android"
      3     xmlns:app="http://schemas.android.com/apk/res-auto"
      4     xmlns:tools="http://schemas.android.com/tools"
      5     android:id="@+id/nav_graph"
      6     app:startDestination="@id/FirstFragment">
      7
      8     <fragment

This resource id definition appears not to be needed since it is not referenced from anywhere. Having id definitions, even if unused, is not necessarily a bad idea since they make working on layouts and menus easier, so there is not a strong reason to delete these.
The unused resource check can ignore tests. If you want to include resources that are only referenced from tests, consider packaging them in a test source set instead.
You can include test sources in the unused resource check by setting the system property lint.unused-resources.include-tests=true, and to exclude them (usually for performance reasons), use lint.unused-resources.exclude-tests=true.
Note: This issue has an associated quickfix operation in Android Studio and IntelliJ IDEA.
To suppress this error, use the issue id "UnusedIds" as explained in the Suppressing Warnings and Errors section.
UnusedIds Performance Warning Priority 1/10

## Dynamic text should probably be selectable

../../src/main/res/layout/fragment_second.xml:19: Consider making the text value selectable by specifying `android:textIsSelectable="true"`

     16         app:layout_constraintStart_toStartOf="parent"
     17         app:layout_constraintTop_toBottomOf="@id/textview_second" />
     18
     19     <TextView
     20         android:id="@+id/textview_second"
     21         android:layout_width="wrap_content"
     22         android:layout_height="wrap_content"

If a `<TextView>` is used to display data, the user might want to copy that data and paste it elsewhere. To allow this, the `<TextView>` should specify `android:textIsSelectable="true"`.
This lint check looks for TextViews which are likely to be displaying data: views whose text is set dynamically. This value will be ignored on platforms older than API 11, so it is okay to set it regardless of your `minSdkVersion`.
Note: This issue has an associated quickfix operation in Android Studio and IntelliJ IDEA.
To suppress this error, use the issue id "SelectableText" as explained in the Suppressing Warnings and Errors section.
SelectableText Usability Warning Priority 7/10

## Missing support for Firebase App Indexing

../../src/main/AndroidManifest.xml:5: App is not indexable by Google Search; consider adding at least one Activity with an ACTION-VIEW intent filter. See issue explanation for more details.

      2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
      3     package="com.example.myapplication">
      4
      5     <application
      6         android:allowBackup="true"
      7         android:icon="@mipmap/ic_launcher"
      8         android:label="@string/app_name"

Adds URLs to get your app into the Google index, to get installs and traffic to your app from Google Search.
More info: https://g.co/AppIndexing/AndroidStudio
Note: This issue has an associated quickfix operation in Android Studio and IntelliJ IDEA.
To suppress this error, use the issue id "GoogleAppIndexingWarning" as explained in the Suppressing Warnings and Errors section.
GoogleAppIndexingWarning Usability Warning Priority 5/10

## Image without contentDescription

../../src/main/res/layout/activity_main.xml:23: Missing `contentDescription` attribute on image

     20
     21     </com.google.android.material.appbar.AppBarLayout>
     22
     23     <com.google.android.material.floatingactionbutton.FloatingActionButton
     24         android:id="@+id/fab"
     25         android:layout_width="wrap_content"
     26         android:layout_height="wrap_content"

Non-textual widgets like ImageViews and ImageButtons should use the `contentDescription` attribute to specify a textual description of the widget such that screen readers and other accessibility tools can adequately describe the user interface.
Note that elements in application screens that are purely decorative and do not provide any content or enable a user action should not have accessibility content descriptions. In this case, just suppress the lint warning with a tools:ignore="ContentDescription" attribute.
Note that for text fields, you should not set both the `hint` and the `contentDescription` attributes since the hint will never be shown. Just set the `hint`.
More info: https://developer.android.com/guide/topics/ui/accessibility/apps#special-cases
Note: This issue has an associated quickfix operation in Android Studio and IntelliJ IDEA.
To suppress this error, use the issue id "ContentDescription" as explained in the Suppressing Warnings and Errors section.
ContentDescription Accessibility Error Priority 3/10

## Disabled Checks

One or more issues were not run by lint, either because the check is not enabled by default, or because it was disabled with a command line flag or via one or more `lint.xml` configuration files in the project directories.
WrongThreadInterprocedural
Disabled By: Project lint.xml file
Searches for interprocedural call paths that violate thread annotations in the program. Tracks the flow of instantiated types and lambda expressions to increase accuracy across method boundaries.
More info: https://developer.android.com/guide/components/processes-and-threads.html#Threads
To suppress this error, use the issue id "WrongThreadInterprocedural" as explained in the Suppressing Warnings and Errors section.

## Suppressing Warnings and Errors

Lint errors can be suppressed in a variety of ways:
1. With a `@SuppressLint` annotation in the Java code
2. With a `tools:ignore` attribute in the XML file
3. With a //noinspection comment in the source code
4. With ignore flags specified in the `build.gradle` file, as explained below
5. With a `lint.xml` configuration file in the project
6. With a `lint.xml` configuration file passed to lint via the --config flag
7. With the --ignore flag passed to lint.
To suppress a lint warning with an annotation, add a `@SuppressLint("id")` annotation on the class, method or variable declaration closest to the warning instance you want to disable. The id can be one or more issue id's, such as `"UnusedResources"` or `{"UnusedResources","UnusedIds"}`, or it can be `"all"` to suppress all lint warnings in the given scope.
To suppress a lint warning with a comment, add a `//noinspection id` comment on the line before the statement with the error.
To suppress a lint warning in an XML file, add a `tools:ignore="id"` attribute on the element containing the error, or one of its surrounding elements. You also need to define the namespace for the tools prefix on the root element in your document, next to the `xmlns:android` declaration:
`xmlns:tools="http://schemas.android.com/tools"`
To suppress a lint warning in a `build.gradle` file, add a section like this:

    android {
        lintOptions {
            disable 'TypographyFractions','TypographyQuotes'
        }
    }

Here we specify a comma separated list of issue id's after the disable command. You can also use `warning` or `error` instead of `disable` to change the severity of issues.
To suppress lint warnings with a configuration XML file, create a file named `lint.xml` and place it at the root directory of the module in which it applies.
The format of the `lint.xml` file is something like the following:

    <?xml version="1.0" encoding="UTF-8"?>
    <lint>
        <!-- Ignore everything in the test source set -->
        <issue id="all">
            <ignore path="\*/test/\*" />
        </issue>

        <!-- Disable this given check in this project -->
        <issue id="IconMissingDensityFolder" severity="ignore" />

        <!-- Ignore the ObsoleteLayoutParam issue in the given files -->
        <issue id="ObsoleteLayoutParam">
            <ignore path="res/layout/activation.xml" />
            <ignore path="res/layout-xlarge/activation.xml" />
            <ignore regexp="(foo|bar)\.java" />
        </issue>

        <!-- Ignore the UselessLeaf issue in the given file -->
        <issue id="UselessLeaf">
            <ignore path="res/layout/main.xml" />
        </issue>

        <!-- Change the severity of hardcoded strings to "error" -->
        <issue id="HardcodedText" severity="error" />
    </lint>

To suppress lint checks from the command line, pass the --ignore flag with a comma separated list of ids to be suppressed, such as:
`$ lint --ignore UnusedResources,UselessLeaf /my/project/path`
For more information, see https://developer.android.com/studio/write/lint.html#config