diff --git a/docs/checks/Aligned16KB.md.html b/docs/checks/Aligned16KB.md.html new file mode 100644 index 0000000..647c8d9 --- /dev/null +++ b/docs/checks/Aligned16KB.md.html @@ -0,0 +1,138 @@ + +(#) Native library dependency not 16 KB aligned + +!!! WARNING: Native library dependency not 16 KB aligned + This is a warning. + +Id +: `Aligned16KB` +Summary +: Native library dependency not 16 KB aligned +Severity +: Warning +Category +: Correctness +Platform +: Android +Vendor +: Android Open Source Project +Feedback +: https://issuetracker.google.com/issues/new?component=192708 +Affects +: Gradle build files and TOML files +Editing +: This check can *not* run live in the IDE editor +See +: https://developer.android.com/guide/practices/page-sizes +Implementation +: [Source Code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-checks/src/main/java/com/android/tools/lint/checks/PageAlignmentDetector.kt) +Tests +: [Source Code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/PageAlignmentDetectorTest.kt) +Copyright Year +: 2025 + +Historically, Android has aligned memory using 4 KB memory page sizes, +which optimized system memory performance for the average amount of +total memory that Android devices have typically had. + +To support devices that only support 16 KB aligned libraries in the +future, the Google Play Store will soon require all apps to be compiled +with 16 KB aligned libraries. + +An app compiled with 4 KB aligned libraries will not work correctly on +these devices. To ensure compatibility with these devices and to +future-proof your app, the Play Store will require native libraries to +be aligned to 16 KB boundaries. + +If your app uses any NDK libraries, either directly or indirectly +through an SDK, you'll need to rebuild your app to meet this new +requirement. This means ensuring that all native libraries within your +app, including those from any dependencies, are built with 16 KB page +alignment. + +This lint check helps identify potential issues by inspecting all +transitive libraries your app depends on. If any nested native libraries +are found to be aligned only to 4 KB, you'll need to take action. + +If lint flags a library, try updating to a newer version that supports +16 KB alignment. If no updated version is available, reach out to the +library vendor for assistance. + +(##) Example + +Here is an example of lint warnings produced by this check: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~text +build.gradle:2:Warning: The native library +arm64-v8a/libtensorflowlite_jni.so (from +org.tensorflow:tensorflow-lite:2.16.1) is not 16 KB aligned +[Aligned16KB] + implementation("org.tensorflow:tensorflow-lite:2.16.1") + --------------------------------------- +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Here are the relevant test files: + +`build.gradle`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~groovy linenumbers +dependencies { + implementation("org.tensorflow:tensorflow-lite:2.16.1") +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +[build/intermediates/exploded-aar/org.tensorflow/tensorflow-lite/2.16.1/jni/arm64-v8a/libtensorflowlite_jni.so](examples/arm64-v8a/libtensorflowlite_jni.so) + +[build/intermediates/exploded-aar/org.tensorflow/tensorflow-lite/2.16.1/jni/x86_64/libtensorflowlite_jni.so](examples/x86_64/libtensorflowlite_jni.so) + +[build/intermediates/exploded-aar/org.tensorflow/tensorflow-lite/2.16.1/jni/armeabi-v7a/libtensorflowlite_jni.so](examples/armeabi-v7a/libtensorflowlite_jni.so) + +[build/intermediates/exploded-aar/org.tensorflow/tensorflow-lite/2.16.1/jni/x86/libtensorflowlite_jni.so](examples/x86/libtensorflowlite_jni.so) + +You can also visit the +[source code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/PageAlignmentDetectorTest.kt) +for the unit tests for this check to see additional scenarios. + +(##) Suppressing + +You can suppress false positives using one of the following mechanisms: + +* Using a suppression comment like this on the line above: + + ```kt + //noinspection Aligned16KB + problematicStatement() + ``` + +* Using a special `lint.xml` file in the source tree which turns off + the check in that folder and any sub folder. A simple file might look + like this: + ```xml + <?xml version="1.0" encoding="UTF-8"?> + <lint> + <issue id="Aligned16KB" severity="ignore" /> + </lint> + ``` + Instead of `ignore` you can also change the severity here, for + example from `error` to `warning`. You can find additional + documentation on how to filter issues by path, regular expression and + so on + [here](https://googlesamples.github.io/android-custom-lint-rules/usage/lintxml.md.html). + +* In Gradle projects, using the DSL syntax to configure lint. For + example, you can use something like + ```gradle + lintOptions { + disable 'Aligned16KB' + } + ``` + In Android projects this should be nested inside an `android { }` + block. + +* For manual invocations of `lint`, using the `--ignore` flag: + ``` + $ lint --ignore Aligned16KB ...` + ``` + +* Last, but not least, using baselines, as discussed + [here](https://googlesamples.github.io/android-custom-lint-rules/usage/baselines.md.html). + + \ No newline at end of file diff --git a/docs/checks/AppLinkSplitToWebAndCustom.md.html b/docs/checks/AppLinkSplitToWebAndCustom.md.html index 619a543..87b5dbc 100644 --- a/docs/checks/AppLinkSplitToWebAndCustom.md.html +++ b/docs/checks/AppLinkSplitToWebAndCustom.md.html @@ -19,7 +19,7 @@ Feedback : https://issuetracker.google.com/issues/new?component=192708 Since -: 8.8.0-alpha08 (October 2024) +: 8.8.0 (January 2025) Affects : Manifest files Editing diff --git a/docs/checks/AppLinkWarning.md.html b/docs/checks/AppLinkWarning.md.html index e69fcc8..289de85 100644 --- a/docs/checks/AppLinkWarning.md.html +++ b/docs/checks/AppLinkWarning.md.html @@ -19,7 +19,7 @@ Feedback : https://issuetracker.google.com/issues/new?component=192708 Since -: 8.8.0-alpha06 (October 2024) +: 8.8.0 (January 2025) Affects : Manifest files Editing diff --git a/docs/checks/ArcAnimationSpecTypeIssue.md.html b/docs/checks/ArcAnimationSpecTypeIssue.md.html index a861655..e6123c1 100644 --- a/docs/checks/ArcAnimationSpecTypeIssue.md.html +++ b/docs/checks/ArcAnimationSpecTypeIssue.md.html @@ -2,14 +2,14 @@ (#) ArcAnimationSpec is designed for 2D values. Particularly, for positional values such as Offset. !!! Tip: ArcAnimationSpec is designed for 2D values. Particularly, for positional values such as Offset. - Advice from this check is just a tip. + Advice from this check is just a hint; it's "weak" warning. Id : `ArcAnimationSpecTypeIssue` Summary : ArcAnimationSpec is designed for 2D values. Particularly, for positional values such as Offset. Severity -: Information +: Hint Category : Correctness Platform diff --git a/docs/checks/AutoboxingStateCreation.md.html b/docs/checks/AutoboxingStateCreation.md.html index e17dc5a..97d7151 100644 --- a/docs/checks/AutoboxingStateCreation.md.html +++ b/docs/checks/AutoboxingStateCreation.md.html @@ -2,14 +2,14 @@ (#) `State` will autobox values assigned to this state. Use a specialized state type instead. !!! Tip: `State` will autobox values assigned to this state. Use a specialized state type instead. - Advice from this check is just a tip. + Advice from this check is just a hint; it's "weak" warning. Id : `AutoboxingStateCreation` Summary : `State` will autobox values assigned to this state. Use a specialized state type instead. Severity -: Information +: Hint Category : Performance Platform diff --git a/docs/checks/CredentialManagerMisuse.md.html b/docs/checks/CredentialManagerMisuse.md.html index 279c3a2..f74af78 100644 --- a/docs/checks/CredentialManagerMisuse.md.html +++ b/docs/checks/CredentialManagerMisuse.md.html @@ -19,7 +19,7 @@ Feedback : https://issuetracker.google.com/issues/new?component=192708 Since -: 8.8.0-alpha02 (September 2024) +: 8.8.0 (January 2025) Affects : Kotlin and Java files Editing diff --git a/docs/checks/FieldSiteTargetOnQualifierAnnotation.md.html b/docs/checks/FieldSiteTargetOnQualifierAnnotation.md.html index fe170bb..2d9b5f9 100644 --- a/docs/checks/FieldSiteTargetOnQualifierAnnotation.md.html +++ b/docs/checks/FieldSiteTargetOnQualifierAnnotation.md.html @@ -185,17 +185,17 @@ ``` // build.gradle.kts -implementation("com.google.dagger:dagger-lint:2.54") +implementation("com.google.dagger:dagger-lint:2.55") // build.gradle -implementation 'com.google.dagger:dagger-lint:2.54' +implementation 'com.google.dagger:dagger-lint:2.55' // build.gradle.kts with version catalogs: implementation(libs.dagger.lint) # libs.versions.toml [versions] -dagger-lint = "2.54" +dagger-lint = "2.55" [libraries] # For clarity and text wrapping purposes the following declaration is # shown split up across lines, but in TOML it needs to be on a single @@ -207,7 +207,7 @@ } ``` -2.54 is the version this documentation was generated from; +2.55 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.google.dagger:dagger-lint](com_google_dagger_dagger-lint.md.html). diff --git a/docs/checks/IconDipSize.md.html b/docs/checks/IconDipSize.md.html index 8f6a1ff..b890d18 100644 --- a/docs/checks/IconDipSize.md.html +++ b/docs/checks/IconDipSize.md.html @@ -36,6 +36,34 @@ catches errors where images are either placed in the wrong folder, or icons are changed to new sizes but some folders are forgotten. +(##) Example + +Here is an example of lint warnings produced by this check: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~text +res/drawable-mdpi/my_lossy_72dp.webp:Warning: Suspicious file name +my_lossy_72dp.webp: The implied 72 dp size does not match the actual dp +size (pixel size 58×56 in a drawable-mdpi folder computes to 58×56 dp) +[IconDipSize] +0 errors, 3 warnings +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Here are the relevant test files: + +![res/drawable-mdpi/my_lossy_72dp.webp](examples/drawable-mdpi/my_lossy_72dp.webp) + +![res/mipmap-mdpi/my_lossy2_72dp.webp](examples/mipmap-mdpi/my_lossy2_72dp.webp) + +![res/drawable-mdpi/my_lossless_72dp.webp](examples/drawable-mdpi/my_lossless_72dp.webp) + +You can also visit the +[source code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/IconDetectorTest.java) +for the unit tests for this check to see additional scenarios. + +The above example was automatically extracted from the first unit test +found for this lint check, `IconDetector.testClaimedSizeWebp`. +To report a problem with this extracted sample, visit +https://issuetracker.google.com/issues/new?component=192708. + (##) Suppressing You can suppress false positives using one of the following mechanisms: diff --git a/docs/checks/IconExtension.md.html b/docs/checks/IconExtension.md.html index a361994..f8c8979 100644 --- a/docs/checks/IconExtension.md.html +++ b/docs/checks/IconExtension.md.html @@ -35,6 +35,30 @@ is really in the PNG format and not for example a GIF file named `.png`). +(##) Example + +Here is an example of lint warnings produced by this check: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~text +res/drawable-mdpi/foo.png:Warning: Misleading file extension; named .png +but the file format is webp [IconExtension] +0 errors, 1 warnings +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Here are the relevant test files: + +![res/drawable-mdpi/foo.png](examples/drawable-mdpi/foo.png) + +![res/drawable-mdpi/ok.webp](examples/drawable-mdpi/ok.webp) + +You can also visit the +[source code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/IconDetectorTest.java) +for the unit tests for this check to see additional scenarios. + +The above example was automatically extracted from the first unit test +found for this lint check, `IconDetector.testMisleadingWebpFileName`. +To report a problem with this extracted sample, visit +https://issuetracker.google.com/issues/new?component=192708. + (##) Suppressing You can suppress false positives using one of the following mechanisms: diff --git a/docs/checks/InvalidPackage.md.html b/docs/checks/InvalidPackage.md.html index c915b53..2f053a0 100644 --- a/docs/checks/InvalidPackage.md.html +++ b/docs/checks/InvalidPackage.md.html @@ -58,7 +58,7 @@ 2 errors, 0 warnings ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Here are the relevant source files: +Here are the relevant test files: `res/layout/layout.xml`: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~xml linenumbers @@ -136,10 +136,7 @@ </resources> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -`libs/unsupported.jar`: -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~text linenumbers -H4sIAAAAAAAAAAvwZmYRYeAAwmMzkxwZkAAnAwuDr2uIo66nn5v+v1MMDMwMAd7sHCApJqiSAJyaRYAYrtnX0c/TzTU4RM/X7bPvmdM+3rp6F3m9dbXOnTm/OcjgivGDp0V6Xr46nr4XS1excM54KXlEerZ2hoWYyJMlWhXPVF9nfir6WMQItt1tYdofG6DZNlDbucC27UWznRWIS1KLS/RxK+GEKSnITtdH+GM6mjJpZGU+mUlFiUWVzjmJxcV6ySAyNyjaX9hR5N+y7bnXs/QDHC5yPVq69ITD0exefpMZGWEmKzOfFG67O+Xg3chNc7n+Kv/jr93Q6fuH8Z/G45u5jpk32i2Nn8/5qZf+7fv8+fsZrgSaCyRrZC5f//Pjc7ntS2Q7Em6UuO7PVzg4wV4onqW89dXH798mXr7Is3J6kOffLsW4ldskhXz3v57RoTzZVUizbY7q1M32H3LUf2jkXE/UiKpz35EreOKDja/al4VvjHWipk8ylzC6d2FuCs8TyWdOqsv31Ct5nr59t/HaPqOJzmrNllN4zsQL3Jb6tvVx6sYGV6FX/B7lJ7tOXXouz7SyxJu974OU2rrkmwd6NQ/6WHbP3nE0QaZdM1zQ4+isuR6Lb5kV/H6zz+LiHs2mdaptR7IW9fQ0WvN8Drwq/GvC+1P3pJfOnSe8pHD6wTvr7G9V/nnycvPzaLWwQnuZx82SakHO26Qf7gkuS/l75vwZl4y8Yyufv1vZeHyD2dsFLNuXvipaOGV967R9j+ar+V6ZX6S88jnzrhcNUo+2vTHUiZhuuWDTzU/sjscrdQ+H6/753zH7Ie8mFwGO/RJvX4gvvLpAePkJDbXr7h713afU1q7UmHlMNGrzZLaucE2jGOv9f6YqTBYxP3ZCtqfjm3XXVvmIpPcZmx1nG56aEn9TPvnrgh1mh/aKd9bLPOU43BNR1BKn8EfVKX5hMO/Pjur0Jvuny6Y7sYYm6SdIvr4iuvidzlX5SZOknpqfDGh6FHZk019xUFL9+WuOhgQwpyQzg5IqI5MIA2pWYYKnRBYGVICS69C1IucAERRttjjyHMgELgbcOQUBdiPyDW4tnCha7qHmI4RbQTkJOQikUbSxMuLNVwHerGwQ57EyGACVpjGDeADV4J9drAQAAA== -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[libs/unsupported.jar](examples/libs/unsupported.jar) You can also visit the [source code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/InvalidPackageDetectorTest.java) diff --git a/docs/checks/JvmStaticProvidesInObjectDetector.md.html b/docs/checks/JvmStaticProvidesInObjectDetector.md.html index a146d1a..577850c 100644 --- a/docs/checks/JvmStaticProvidesInObjectDetector.md.html +++ b/docs/checks/JvmStaticProvidesInObjectDetector.md.html @@ -194,17 +194,17 @@ ``` // build.gradle.kts -implementation("com.google.dagger:dagger-lint:2.54") +implementation("com.google.dagger:dagger-lint:2.55") // build.gradle -implementation 'com.google.dagger:dagger-lint:2.54' +implementation 'com.google.dagger:dagger-lint:2.55' // build.gradle.kts with version catalogs: implementation(libs.dagger.lint) # libs.versions.toml [versions] -dagger-lint = "2.54" +dagger-lint = "2.55" [libraries] # For clarity and text wrapping purposes the following declaration is # shown split up across lines, but in TOML it needs to be on a single @@ -216,7 +216,7 @@ } ``` -2.54 is the version this documentation was generated from; +2.55 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.google.dagger:dagger-lint](com_google_dagger_dagger-lint.md.html). diff --git a/docs/checks/KtxExtensionAvailable.md.html b/docs/checks/KtxExtensionAvailable.md.html index 69dafb3..fb04edc 100644 --- a/docs/checks/KtxExtensionAvailable.md.html +++ b/docs/checks/KtxExtensionAvailable.md.html @@ -2,14 +2,14 @@ (#) KTX Extension Available !!! Tip: KTX Extension Available - Advice from this check is just a tip. + Advice from this check is just a hint; it's "weak" warning. Id : `KtxExtensionAvailable` Summary : KTX Extension Available Severity -: Information +: Hint Category : Productivity Platform @@ -46,8 +46,8 @@ Here is an example of lint warnings produced by this check: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~text -build.gradle:7:Information: Add suffix -ktx to enable the Kotlin -extensions for this library [KtxExtensionAvailable] +build.gradle:7:Hint: Add suffix -ktx to enable the Kotlin extensions for +this library [KtxExtensionAvailable] implementation "androidx.core:core:1.2.0" -------------------------- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/docs/checks/MangledCRLF.md.html b/docs/checks/MangledCRLF.md.html index af19fee..ce6cd6a 100644 --- a/docs/checks/MangledCRLF.md.html +++ b/docs/checks/MangledCRLF.md.html @@ -55,10 +55,7 @@ Here is the source file referenced above: -`res/layout/crcrlf.xml`: -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~xml linenumbers -H4sIAAAAAAAA/42Ry2rDMBBF9wb/g9EHWHtjB7LLItmEkK0Z5KEaKktGGtdxvz7yA5qE1o12uvdc5lWe0QDTFx5hdD1nt9bYUIBtvKOmEpq5K6QMSmMLIV/1XLlWQvcpPQa5aiJNsviWPDtnwmZ6JtbMqhdmbqEeqGFdiRZY6boDj5Z/BzXSh+YXMtulSbrg5QVvfCUclu/fpQYPXa2c5Z9SG+Xeo1V00R+cp++IgqkE+x7/46/omdQGzXGkShzQGPfgztss5p4mOz8B2b2KZyUeRSanlSSlfD51FO+BbabY/QEAAA== -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[res/layout/crcrlf.xml](examples/layout/crcrlf.xml) You can also visit the [source code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/DosLineEndingDetectorTest.kt) diff --git a/docs/checks/ModifierNodeInspectableProperties.md.html b/docs/checks/ModifierNodeInspectableProperties.md.html index c52457b..391d530 100644 --- a/docs/checks/ModifierNodeInspectableProperties.md.html +++ b/docs/checks/ModifierNodeInspectableProperties.md.html @@ -2,14 +2,14 @@ (#) ModifierNodeElement missing inspectableProperties !!! Tip: ModifierNodeElement missing inspectableProperties - Advice from this check is just a tip. + Advice from this check is just a hint; it's "weak" warning. Id : `ModifierNodeInspectableProperties` Summary : ModifierNodeElement missing inspectableProperties Severity -: Information +: Hint Category : Productivity Platform diff --git a/docs/checks/ModuleCompanionObjects.md.html b/docs/checks/ModuleCompanionObjects.md.html index aa2c1cd..0cc3f79 100644 --- a/docs/checks/ModuleCompanionObjects.md.html +++ b/docs/checks/ModuleCompanionObjects.md.html @@ -194,17 +194,17 @@ ``` // build.gradle.kts -implementation("com.google.dagger:dagger-lint:2.54") +implementation("com.google.dagger:dagger-lint:2.55") // build.gradle -implementation 'com.google.dagger:dagger-lint:2.54' +implementation 'com.google.dagger:dagger-lint:2.55' // build.gradle.kts with version catalogs: implementation(libs.dagger.lint) # libs.versions.toml [versions] -dagger-lint = "2.54" +dagger-lint = "2.55" [libraries] # For clarity and text wrapping purposes the following declaration is # shown split up across lines, but in TOML it needs to be on a single @@ -216,7 +216,7 @@ } ``` -2.54 is the version this documentation was generated from; +2.55 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.google.dagger:dagger-lint](com_google_dagger_dagger-lint.md.html). diff --git a/docs/checks/ModuleCompanionObjectsNotInModuleParent.md.html b/docs/checks/ModuleCompanionObjectsNotInModuleParent.md.html index 098b150..db8e6a3 100644 --- a/docs/checks/ModuleCompanionObjectsNotInModuleParent.md.html +++ b/docs/checks/ModuleCompanionObjectsNotInModuleParent.md.html @@ -57,17 +57,17 @@ ``` // build.gradle.kts -implementation("com.google.dagger:dagger-lint:2.54") +implementation("com.google.dagger:dagger-lint:2.55") // build.gradle -implementation 'com.google.dagger:dagger-lint:2.54' +implementation 'com.google.dagger:dagger-lint:2.55' // build.gradle.kts with version catalogs: implementation(libs.dagger.lint) # libs.versions.toml [versions] -dagger-lint = "2.54" +dagger-lint = "2.55" [libraries] # For clarity and text wrapping purposes the following declaration is # shown split up across lines, but in TOML it needs to be on a single @@ -79,7 +79,7 @@ } ``` -2.54 is the version this documentation was generated from; +2.55 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.google.dagger:dagger-lint](com_google_dagger_dagger-lint.md.html). diff --git a/docs/checks/MoshiUsageNonMoshiClassCollection.md.html b/docs/checks/MoshiUsageNonMoshiClassCollection.md.html index ea8f768..2db78fa 100644 --- a/docs/checks/MoshiUsageNonMoshiClassCollection.md.html +++ b/docs/checks/MoshiUsageNonMoshiClassCollection.md.html @@ -2,14 +2,14 @@ (#) Concrete Collection type '%HINT%' is not natively supported by Moshi !!! Tip: Concrete Collection type '%HINT%' is not natively supported by Moshi - Advice from this check is just a tip. + Advice from this check is just a hint; it's "weak" warning. Id : `MoshiUsageNonMoshiClassCollection` Summary : Concrete Collection type '%HINT%' is not natively supported by Moshi Severity -: Information +: Hint Category : Correctness Platform diff --git a/docs/checks/MoshiUsageNonMoshiClassInternal.md.html b/docs/checks/MoshiUsageNonMoshiClassInternal.md.html index 0c94fe6..c903a77 100644 --- a/docs/checks/MoshiUsageNonMoshiClassInternal.md.html +++ b/docs/checks/MoshiUsageNonMoshiClassInternal.md.html @@ -2,14 +2,14 @@ (#) Non-Moshi internal type '%HINT%' is not natively supported by Moshi !!! Tip: Non-Moshi internal type '%HINT%' is not natively supported by Moshi - Advice from this check is just a tip. + Advice from this check is just a hint; it's "weak" warning. Id : `MoshiUsageNonMoshiClassInternal` Summary : Non-Moshi internal type '%HINT%' is not natively supported by Moshi Severity -: Information +: Hint Category : Correctness Platform diff --git a/docs/checks/MoshiUsageNonMoshiClassMap.md.html b/docs/checks/MoshiUsageNonMoshiClassMap.md.html index 0269b39..2bbcd36 100644 --- a/docs/checks/MoshiUsageNonMoshiClassMap.md.html +++ b/docs/checks/MoshiUsageNonMoshiClassMap.md.html @@ -2,14 +2,14 @@ (#) Concrete Map type '%HINT%' is not natively supported by Moshi !!! Tip: Concrete Map type '%HINT%' is not natively supported by Moshi - Advice from this check is just a tip. + Advice from this check is just a hint; it's "weak" warning. Id : `MoshiUsageNonMoshiClassMap` Summary : Concrete Map type '%HINT%' is not natively supported by Moshi Severity -: Information +: Hint Category : Correctness Platform diff --git a/docs/checks/PlaySdkIndexVulnerability.md.html b/docs/checks/PlaySdkIndexVulnerability.md.html index c47d14c..0fcd575 100644 --- a/docs/checks/PlaySdkIndexVulnerability.md.html +++ b/docs/checks/PlaySdkIndexVulnerability.md.html @@ -19,7 +19,7 @@ Feedback : https://issuetracker.google.com/issues/new?component=192708 Since -: 8.8.0-alpha02 (September 2024) +: 8.8.0 (January 2025) Affects : Gradle build files and TOML files Editing diff --git a/docs/checks/ReportShortcutUsage.md.html b/docs/checks/ReportShortcutUsage.md.html index ea8fbd9..ccdf746 100644 --- a/docs/checks/ReportShortcutUsage.md.html +++ b/docs/checks/ReportShortcutUsage.md.html @@ -2,14 +2,14 @@ (#) Report shortcut usage !!! Tip: Report shortcut usage - Advice from this check is just a tip. + Advice from this check is just a hint; it's "weak" warning. Id : `ReportShortcutUsage` Summary : Report shortcut usage Severity -: Information +: Hint Category : Usability Platform @@ -38,9 +38,9 @@ Here is an example of lint warnings produced by this check: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~text -src/test/pkg/TestDocumentationExample.java:16:Information: Calling this -method indicates use of dynamic shortcuts, but there are no calls to -methods that track shortcut usage, such as pushDynamicShortcut or +src/test/pkg/TestDocumentationExample.java:16:Hint: Calling this method +indicates use of dynamic shortcuts, but there are no calls to methods +that track shortcut usage, such as pushDynamicShortcut or reportShortcutUsed. Calling these methods is recommended, as they track shortcut usage and allow launchers to adjust which shortcuts appear based on activation history. Please see diff --git a/docs/checks/SimilarGradleDependency.md.html b/docs/checks/SimilarGradleDependency.md.html index 03fb11d..4aa853f 100644 --- a/docs/checks/SimilarGradleDependency.md.html +++ b/docs/checks/SimilarGradleDependency.md.html @@ -2,14 +2,14 @@ (#) Multiple Versions Gradle Dependency !!! Tip: Multiple Versions Gradle Dependency - Advice from this check is just a tip. + Advice from this check is just a hint; it's "weak" warning. Id : `SimilarGradleDependency` Summary : Multiple Versions Gradle Dependency Severity -: Information +: Hint Category : Correctness Platform @@ -39,13 +39,13 @@ Here is an example of lint warnings produced by this check: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~text -../gradle/libs.versions.toml:6:Information: There are multiple -dependencies joda-time:joda-time but with different version +../gradle/libs.versions.toml:6:Hint: There are multiple dependencies +joda-time:joda-time but with different version [SimilarGradleDependency] joda_library = { module = "joda-time:joda-time", version.ref = "jodaVersion"} ------------------------------------------------------------- -../gradle/libs.versions.toml:7:Information: There are multiple -dependencies joda-time:joda-time but with different version +../gradle/libs.versions.toml:7:Hint: There are multiple dependencies +joda-time:joda-time but with different version [SimilarGradleDependency] joda_library2 = { module = "joda-time:joda-time", version = "2.0"} ------------------------------------------------- diff --git a/docs/checks/StringEscaping.md.html b/docs/checks/StringEscaping.md.html index 07c4144..5467bf1 100644 --- a/docs/checks/StringEscaping.md.html +++ b/docs/checks/StringEscaping.md.html @@ -90,6 +90,7 @@ <item quantity="few">%d piose'nki.</item> <item quantity="other">%d piosenek.</item> </plurals> +<string name="foo">Letzte Freischaltung:\\ </string> <!-- b/387281249 --> </resources> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/docs/checks/TrimLambda.md.html b/docs/checks/TrimLambda.md.html new file mode 100644 index 0000000..d1a430b --- /dev/null +++ b/docs/checks/TrimLambda.md.html @@ -0,0 +1,165 @@ + +(#) Unnecessary lambda with `trim()` + +!!! Tip: Unnecessary lambda with `trim()` + Advice from this check is just a hint; it's "weak" warning. + +Id +: `TrimLambda` +Summary +: Unnecessary lambda with `trim()` +Severity +: Hint +Category +: Correctness +Platform +: Any +Vendor +: Android Open Source Project +Feedback +: https://issuetracker.google.com/issues/new?component=192708 +Affects +: Kotlin and Java files +Editing +: This check runs on the fly in the IDE editor +Implementation +: [Source Code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-checks/src/main/java/com/android/tools/lint/checks/TrimDetector.kt) +Tests +: [Source Code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/TrimDetectorTest.kt) +Copyright Year +: 2025 + +The Kotlin standard library `trim()` call takes an optional lambda to +specify which characters are considered whitespace. + +When converting Java code to Kotlin code, the converter will convert +calls for Java's `s.trim()` into `s.trim() { it <= ' ' }`. This +preserves the exact semantics of the Java code, but is likely not what +you want: the default in Kotlin uses a better definition of what +constitutes a whitespace character (`Char::isWhitespace`) and also +results in less bytecode at the call-site. + +!!! Tip + This lint check has an associated quickfix available in the IDE. + +(##) Example + +Here is an example of lint warnings produced by this check: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~text +src/test.kt:3:Hint: The lambda argument ({ it <= ' ' }) is unnecessary +[TrimLambda] + s.trim() { it <= ' ' } // HINT 1 + ------------- +src/test.kt:4:Hint: The lambda argument ({ it <= ' ' }) is unnecessary +[TrimLambda] + s.trim { it <= ' ' } // HINT 2 + ------------- +src/test.kt:5:Hint: The lambda argument ({ it <= ' ' }) is unnecessary +[TrimLambda] + s.trim({ it <= ' ' }) // HINT 3 + ------------- +src/test.kt:6:Hint: The lambda argument ({it<=' '}) is unnecessary +[TrimLambda] + s.trim() {it<=' '} // HINT 4 + --------- +src/test.kt:7:Hint: The lambda argument ({ c -> c <= ' ' }) is +unnecessary [TrimLambda] + s.trim() { c -> c <= ' ' } // HINT 5 + ----------------- +src/test.kt:8:Hint: The lambda argument ({ it.isWhitespace() }) is +unnecessary [TrimLambda] + s.trim() { it.isWhitespace() } // HINT 6 + --------------------- +src/test.kt:10:Hint: The lambda argument ({ it <= ' ' }) is unnecessary +[TrimLambda] + val to = s.trim { it <= ' ' }.substring(2) + ------------- +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Here is the source file referenced above: + +`src/test.kt`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin linenumbers +fun test(s: String) { + s.trim() // OK + s.trim() { it <= ' ' } // HINT 1 + s.trim { it <= ' ' } // HINT 2 + s.trim({ it <= ' ' }) // HINT 3 + s.trim() {it<=' '} // HINT 4 + s.trim() { c -> c <= ' ' } // HINT 5 + s.trim() { it.isWhitespace() } // HINT 6 + s.trim() { it <= ' ' || c == '.' } // OK + val to = s.trim { it <= ' ' }.substring(2) +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +You can also visit the +[source code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/TrimDetectorTest.kt) +for the unit tests for this check to see additional scenarios. + +(##) Suppressing + +You can suppress false positives using one of the following mechanisms: + +* Using a suppression annotation like this on the enclosing + element: + + ```kt + // Kotlin + @Suppress("TrimLambda") + fun method() { + trim(...) + } + ``` + + or + + ```java + // Java + @SuppressWarnings("TrimLambda") + void method() { + trim(...); + } + ``` + +* Using a suppression comment like this on the line above: + + ```kt + //noinspection TrimLambda + problematicStatement() + ``` + +* Using a special `lint.xml` file in the source tree which turns off + the check in that folder and any sub folder. A simple file might look + like this: + ```xml + <?xml version="1.0" encoding="UTF-8"?> + <lint> + <issue id="TrimLambda" severity="ignore" /> + </lint> + ``` + Instead of `ignore` you can also change the severity here, for + example from `error` to `warning`. You can find additional + documentation on how to filter issues by path, regular expression and + so on + [here](https://googlesamples.github.io/android-custom-lint-rules/usage/lintxml.md.html). + +* In Gradle projects, using the DSL syntax to configure lint. For + example, you can use something like + ```gradle + lintOptions { + disable 'TrimLambda' + } + ``` + In Android projects this should be nested inside an `android { }` + block. + +* For manual invocations of `lint`, using the `--ignore` flag: + ``` + $ lint --ignore TrimLambda ...` + ``` + +* Last, but not least, using baselines, as discussed + [here](https://googlesamples.github.io/android-custom-lint-rules/usage/baselines.md.html). + + \ No newline at end of file diff --git a/docs/checks/UnnecessaryArrayInit.md.html b/docs/checks/UnnecessaryArrayInit.md.html new file mode 100644 index 0000000..a6ea6a5 --- /dev/null +++ b/docs/checks/UnnecessaryArrayInit.md.html @@ -0,0 +1,130 @@ + +(#) Unnecessary array initialization + +!!! Tip: Unnecessary array initialization + Advice from this check is just a hint; it's "weak" warning. + +Id +: `UnnecessaryArrayInit` +Summary +: Unnecessary array initialization +Severity +: Hint +Category +: Performance +Platform +: Any +Vendor +: Android Open Source Project +Feedback +: https://issuetracker.google.com/issues/new?component=192708 +Affects +: Kotlin and Java files +Editing +: This check runs on the fly in the IDE editor +Implementation +: [Source Code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-checks/src/main/java/com/android/tools/lint/checks/ArrayInitDetector.kt) +Tests +: [Source Code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/ArrayInitDetectorTest.kt) +Copyright Year +: 2025 + +When constructing an array in Kotlin, you don't need to pass a lambda to +set the initial value if it's identical to the default or if you're +going to overwrite all the values without reading them anyway. + +!!! Tip + This lint check has an associated quickfix available in the IDE. + +(##) Example + +Here is an example of lint warnings produced by this check: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~text +src/test/pkg/test.kt:5:Hint: This initialization lambda ({ 0 }) is +unnecessary and is less efficient [UnnecessaryArrayInit] + val startPoints = remember { IntArray(4) { 0 } } + ----- +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Here is the source file referenced above: + +`src/test/pkg/test.kt`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin linenumbers +package test.pkg + +fun testInit(size: Int, value: Int) { + // Mutable Array to keep track of bound changes -- example from MotionLayout + val startPoints = remember { IntArray(4) { 0 } } +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +You can also visit the +[source code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/ArrayInitDetectorTest.kt) +for the unit tests for this check to see additional scenarios. + +(##) Suppressing + +You can suppress false positives using one of the following mechanisms: + +* Using a suppression annotation like this on the enclosing + element: + + ```kt + // Kotlin + @Suppress("UnnecessaryArrayInit") + fun method() { + problematicStatement() + } + ``` + + or + + ```java + // Java + @SuppressWarnings("UnnecessaryArrayInit") + void method() { + problematicStatement(); + } + ``` + +* Using a suppression comment like this on the line above: + + ```kt + //noinspection UnnecessaryArrayInit + problematicStatement() + ``` + +* Using a special `lint.xml` file in the source tree which turns off + the check in that folder and any sub folder. A simple file might look + like this: + ```xml + <?xml version="1.0" encoding="UTF-8"?> + <lint> + <issue id="UnnecessaryArrayInit" severity="ignore" /> + </lint> + ``` + Instead of `ignore` you can also change the severity here, for + example from `error` to `warning`. You can find additional + documentation on how to filter issues by path, regular expression and + so on + [here](https://googlesamples.github.io/android-custom-lint-rules/usage/lintxml.md.html). + +* In Gradle projects, using the DSL syntax to configure lint. For + example, you can use something like + ```gradle + lintOptions { + disable 'UnnecessaryArrayInit' + } + ``` + In Android projects this should be nested inside an `android { }` + block. + +* For manual invocations of `lint`, using the `--ignore` flag: + ``` + $ lint --ignore UnnecessaryArrayInit ...` + ``` + +* Last, but not least, using baselines, as discussed + [here](https://googlesamples.github.io/android-custom-lint-rules/usage/baselines.md.html). + + \ No newline at end of file diff --git a/docs/checks/UnsanitizedFilenameFromContentProvider.md.html b/docs/checks/UnsanitizedFilenameFromContentProvider.md.html index f8cd77d..b1380cd 100644 --- a/docs/checks/UnsanitizedFilenameFromContentProvider.md.html +++ b/docs/checks/UnsanitizedFilenameFromContentProvider.md.html @@ -19,7 +19,7 @@ Feedback : https://issuetracker.google.com/issues/new?component=192708 Since -: 8.8.0-alpha01 (September 2024) +: 8.8.0 (January 2025) Affects : Kotlin and Java files Editing diff --git a/docs/checks/UseKtx.md.html b/docs/checks/UseKtx.md.html new file mode 100644 index 0000000..e4b6db0 --- /dev/null +++ b/docs/checks/UseKtx.md.html @@ -0,0 +1,187 @@ + +(#) Use KTX extension function + +!!! WARNING: Use KTX extension function + This is a warning. + +Id +: `UseKtx` +Summary +: Use KTX extension function +Severity +: Warning +Category +: Productivity +Platform +: Android +Vendor +: Android Open Source Project +Feedback +: https://issuetracker.google.com/issues/new?component=192708 +Since +: 8.9.0-alpha09 (January 2025) +Affects +: Kotlin and Java files +Editing +: This check runs on the fly in the IDE editor +Implementation +: [Source Code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-checks/src/main/java/com/android/tools/lint/checks/UseKtxDetector.kt) +Tests +: [Source Code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/UseKtxDetectorTest.kt) + +The Android KTX libraries decorates the Android platform SDK as well as +various libraries with more convenient extension functions available +from Kotlin, allowing you to use default parameters, named parameters, +and more. + +!!! Tip + This lint check has an associated quickfix available in the IDE. + +(##) Options + +You can configure this lint checks using the following options: + +(###) remove-defaults + +Whether to skip arguments that match the defaults provided by the extension. +Extensions often provide default values for some of the parameters. For example: +```kotlin +fun Path.readLines(charset: Charset = Charsets.UTF_8): List { return Files.readAllLines(this, charset) } +``` +This lint check will by default automatically omit parameters that match the default, so if your code was calling + +```kotlin +Files.readAllLines(file, Charset.UTF_8) +``` +lint would replace this with +```kotlin +file.readLines() +``` +rather than + +```kotlin +file.readLines(Charset.UTF_8 +``` +You can turn this behavior off using this option. + +Default is true. + +Example `lint.xml`: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~xml linenumbers +<lint> + <issue id="UseKtx"> + <option name="remove-defaults" value="true" /> + </issue> +</lint> +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +(###) require-present + +Whether to only offer extensions already available. +This option lets you only have lint suggest extension replacements if those extensions are already available on the class path (in other words, you're already depending on the library containing the extension method.) + +Default is true. + +Example `lint.xml`: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~xml linenumbers +<lint> + <issue id="UseKtx"> + <option name="require-present" value="true" /> + </issue> +</lint> +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +(##) Example + +Here is an example of lint warnings produced by this check: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~text +src/test/pkg/test.kt:5:Warning: Use the KTX extension function +String.htmlEncode instead? [UseKtx] + val html = TextUtils.htmlEncode("Is x > y ?") + ---------------------------------- +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Here is the source file referenced above: + +`src/test/pkg/test.kt`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin linenumbers +package test.pkg +import android.text.TextUtils + +fun test() { + val html = TextUtils.htmlEncode("Is x > y ?") +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +You can also visit the +[source code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/UseKtxDetectorTest.kt) +for the unit tests for this check to see additional scenarios. + +(##) Suppressing + +You can suppress false positives using one of the following mechanisms: + +* Using a suppression annotation like this on the enclosing + element: + + ```kt + // Kotlin + @Suppress("UseKtx") + fun method() { + problematicStatement() + } + ``` + + or + + ```java + // Java + @SuppressWarnings("UseKtx") + void method() { + problematicStatement(); + } + ``` + +* Using a suppression comment like this on the line above: + + ```kt + //noinspection UseKtx + problematicStatement() + ``` + +* Using a special `lint.xml` file in the source tree which turns off + the check in that folder and any sub folder. A simple file might look + like this: + ```xml + <?xml version="1.0" encoding="UTF-8"?> + <lint> + <issue id="UseKtx" severity="ignore" /> + </lint> + ``` + Instead of `ignore` you can also change the severity here, for + example from `error` to `warning`. You can find additional + documentation on how to filter issues by path, regular expression and + so on + [here](https://googlesamples.github.io/android-custom-lint-rules/usage/lintxml.md.html). + +* In Gradle projects, using the DSL syntax to configure lint. For + example, you can use something like + ```gradle + lintOptions { + disable 'UseKtx' + } + ``` + In Android projects this should be nested inside an `android { }` + block. + +* For manual invocations of `lint`, using the `--ignore` flag: + ``` + $ lint --ignore UseKtx ...` + ``` + +* Last, but not least, using baselines, as discussed + [here](https://googlesamples.github.io/android-custom-lint-rules/usage/baselines.md.html). + + \ No newline at end of file diff --git a/docs/checks/WebpUnsupported.md.html b/docs/checks/WebpUnsupported.md.html index d28acaa..7e42737 100644 --- a/docs/checks/WebpUnsupported.md.html +++ b/docs/checks/WebpUnsupported.md.html @@ -36,6 +36,40 @@ !!! Tip This lint check has an associated quickfix available in the IDE. +(##) Example + +Here is an example of lint warnings produced by this check: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~text +res/drawable-mdpi/my_lossy.webp:Error: WebP requires Android 4.0 (API +15); current minSdkVersion is 10 [WebpUnsupported] +4 errors, 0 warnings +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Here are the relevant test files: + +![res/drawable-mdpi-v15/my_lossy.webp](examples/drawable-mdpi-v15/my_lossy.webp) + +![res/drawable-mdpi/my_lossy.webp](examples/drawable-mdpi/my_lossy.webp) + +![res/mipmap-mdpi/my_lossless.webp](examples/mipmap-mdpi/my_lossless.webp) + +![res/drawable-mdpi-v13/my_lossless.webp](examples/drawable-mdpi-v13/my_lossless.webp) + +![res/drawable-mdpi-v16/my_lossless.webp](examples/drawable-mdpi-v16/my_lossless.webp) + +![res/drawable-mdpi-v18/my_lossless.webp](examples/drawable-mdpi-v18/my_lossless.webp) + +![res/drawable-mdpi/ic_launcher.webp](examples/drawable-mdpi/ic_launcher.webp) + +You can also visit the +[source code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/IconDetectorTest.java) +for the unit tests for this check to see additional scenarios. + +The above example was automatically extracted from the first unit test +found for this lint check, `IconDetector.testWebpUnsupported`. +To report a problem with this extracted sample, visit +https://issuetracker.google.com/issues/new?component=192708. + (##) Suppressing You can suppress false positives using one of the following mechanisms: diff --git a/docs/checks/categories.md.html b/docs/checks/categories.md.html index 3be3ef1..ef4da93 100644 --- a/docs/checks/categories.md.html +++ b/docs/checks/categories.md.html @@ -3,12 +3,13 @@ Order: [Alphabetical](index.md.html) | By category | [By vendor](vendors.md.html) | [By severity](severity.md.html) | [By year](year.md.html) | [Libraries](libraries.md.html) -* Correctness (535) +* Correctness (537) - [AaptCrash: Potential AAPT crash](AaptCrash.md.html) - [AccidentalOctal: Accidental Octal](AccidentalOctal.md.html) - [AdapterViewChildren: `AdapterView` cannot have children in XML](AdapterViewChildren.md.html) - [AlertDialogUsage: Use the support library AlertDialog instead of android.app.AlertDialog](AlertDialogUsage.md.html) + - [Aligned16KB: Native library dependency not 16 KB aligned](Aligned16KB.md.html) - [AndroidGradlePluginVersion: Obsolete Android Gradle Plugin Version](AndroidGradlePluginVersion.md.html) - [AnnotateVersionCheck: Annotate SDK_INT checks](AnnotateVersionCheck.md.html) - [AppBundleLocaleChanges: App Bundle handling of runtime locale changes](AppBundleLocaleChanges.md.html) @@ -445,6 +446,7 @@ - [TimberTagLength: Too Long Log Tags](TimberTagLength.md.html) - [Todo: Marks todos in any given file](Todo.md.html) - [TranslucentOrientation: Mixing screenOrientation and translucency](TranslucentOrientation.md.html) + - [TrimLambda: Unnecessary lambda with `trim()`](TrimLambda.md.html) - [UnclosedTrace: Incorrect trace section usage](UnclosedTrace.md.html) - [UniqueConstants: Overlapping Enumeration Constants](UniqueConstants.md.html) - [UniquePermission: Permission names are not unique](UniquePermission.md.html) @@ -667,7 +669,7 @@ - [PlaySdkIndexVulnerability: Library has vulnerability issues in SDK Index](PlaySdkIndexVulnerability.md.html) - [QueryAllPackagesPermission: Using the QUERY_ALL_PACKAGES permission](QueryAllPackagesPermission.md.html) -* Performance (47) +* Performance (48) - [AnimatorKeep: Missing @Keep for Animated Properties](AnimatorKeep.md.html) - [AnnotationProcessorOnCompilePath: Annotation Processor on Compile Classpath](AnnotationProcessorOnCompilePath.md.html) @@ -700,6 +702,7 @@ - [SyntheticAccessor: Synthetic Accessor](SyntheticAccessor.md.html) - [TooDeepLayout: Layout hierarchy is too deep](TooDeepLayout.md.html) - [TooManyViews: Layout has too many views](TooManyViews.md.html) + - [UnnecessaryArrayInit: Unnecessary array initialization](UnnecessaryArrayInit.md.html) - [UnusedIds: Unused id](UnusedIds.md.html) - [UnusedNamespace: Unused namespace](UnusedNamespace.md.html) - [UnusedResources: Unused resources](UnusedResources.md.html) @@ -776,7 +779,7 @@ - [WearRecents: Wear OS: Recents and app resume](WearRecents.md.html) - [WearSplashScreen: Wear: Use `SplashScreen` library](WearSplashScreen.md.html) -* Productivity (19) +* Productivity (20) - [ComposeCompositionLocalGetter: CompositionLocals should not use getters](ComposeCompositionLocalGetter.md.html) - [ComposeCompositionLocalUsage: CompositionLocals are discouraged](ComposeCompositionLocalUsage.md.html) @@ -796,6 +799,7 @@ - [ComposeUnstableReceiver: Unstable receivers will always be recomposed](ComposeUnstableReceiver.md.html) - [KtxExtensionAvailable: KTX Extension Available](KtxExtensionAvailable.md.html) - [ModifierNodeInspectableProperties: ModifierNodeElement missing inspectableProperties](ModifierNodeInspectableProperties.md.html) + - [UseKtx: Use KTX extension function](UseKtx.md.html) - [UseTomlInstead: Use TOML Version Catalog Instead](UseTomlInstead.md.html) * Accessibility (9) diff --git a/docs/checks/com_google_dagger_dagger-lint.md.html b/docs/checks/com_google_dagger_dagger-lint.md.html index 1b479c6..e392b45 100644 --- a/docs/checks/com_google_dagger_dagger-lint.md.html +++ b/docs/checks/com_google_dagger_dagger-lint.md.html @@ -21,7 +21,7 @@ Compiled : Lint 7.1 Artifact -: com.google.dagger:dagger-lint:2.54 +: com.google.dagger:dagger-lint:2.55 (##) Included Issues @@ -40,17 +40,17 @@ ``` // build.gradle.kts -implementation("com.google.dagger:dagger-lint:2.54") +implementation("com.google.dagger:dagger-lint:2.55") // build.gradle -implementation 'com.google.dagger:dagger-lint:2.54' +implementation 'com.google.dagger:dagger-lint:2.55' // build.gradle.kts with version catalogs: implementation(libs.dagger.lint) # libs.versions.toml [versions] -dagger-lint = "2.54" +dagger-lint = "2.55" [libraries] # For clarity and text wrapping purposes the following declaration is # shown split up across lines, but in TOML it needs to be on a single @@ -62,7 +62,7 @@ } ``` -2.54 is the version this documentation was generated from; +2.55 is the version this documentation was generated from; there may be newer versions available. (##) Changes @@ -77,6 +77,7 @@ | Version | Date | Issues | Compatible | Compiled | Requires | |-------------------:|----------|-------:|------------|--------------:|---------:| +| 2.55|2025/01/09| 4| Yes| 7.1| 7.1| | 2.54|2024/12/20| 4| Yes| 7.1| 7.1| | 2.53.1|2024/12/09| 4| Yes| 7.1| 7.1| | 2.53|2024/12/02| 4| Yes| 7.1| 7.1| diff --git a/docs/checks/examples/arm64-v8a/libtensorflowlite_jni.so b/docs/checks/examples/arm64-v8a/libtensorflowlite_jni.so new file mode 100644 index 0000000..14d1b55 Binary files /dev/null and b/docs/checks/examples/arm64-v8a/libtensorflowlite_jni.so differ diff --git a/docs/checks/examples/armeabi-v7a/libtensorflowlite_jni.so b/docs/checks/examples/armeabi-v7a/libtensorflowlite_jni.so new file mode 100644 index 0000000..2063ae1 --- /dev/null +++ b/docs/checks/examples/armeabi-v7a/libtensorflowlite_jni.so @@ -0,0 +1 @@ +ELF \ No newline at end of file diff --git a/docs/checks/examples/drawable-mdpi-v13/my_lossless.webp b/docs/checks/examples/drawable-mdpi-v13/my_lossless.webp new file mode 100644 index 0000000..7efacdf Binary files /dev/null and b/docs/checks/examples/drawable-mdpi-v13/my_lossless.webp differ diff --git a/docs/checks/examples/drawable-mdpi-v15/my_lossy.webp b/docs/checks/examples/drawable-mdpi-v15/my_lossy.webp new file mode 100644 index 0000000..c195ff0 Binary files /dev/null and b/docs/checks/examples/drawable-mdpi-v15/my_lossy.webp differ diff --git a/docs/checks/examples/drawable-mdpi-v16/my_lossless.webp b/docs/checks/examples/drawable-mdpi-v16/my_lossless.webp new file mode 100644 index 0000000..c195ff0 Binary files /dev/null and b/docs/checks/examples/drawable-mdpi-v16/my_lossless.webp differ diff --git a/docs/checks/examples/drawable-mdpi-v18/my_lossless.webp b/docs/checks/examples/drawable-mdpi-v18/my_lossless.webp new file mode 100644 index 0000000..7efacdf Binary files /dev/null and b/docs/checks/examples/drawable-mdpi-v18/my_lossless.webp differ diff --git a/docs/checks/examples/drawable-mdpi/foo.png b/docs/checks/examples/drawable-mdpi/foo.png new file mode 100644 index 0000000..7efacdf Binary files /dev/null and b/docs/checks/examples/drawable-mdpi/foo.png differ diff --git a/docs/checks/examples/drawable-mdpi/ic_launcher.webp b/docs/checks/examples/drawable-mdpi/ic_launcher.webp new file mode 100644 index 0000000..c195ff0 Binary files /dev/null and b/docs/checks/examples/drawable-mdpi/ic_launcher.webp differ diff --git a/docs/checks/examples/drawable-mdpi/my_lossless_72dp.webp b/docs/checks/examples/drawable-mdpi/my_lossless_72dp.webp new file mode 100644 index 0000000..7efacdf Binary files /dev/null and b/docs/checks/examples/drawable-mdpi/my_lossless_72dp.webp differ diff --git a/docs/checks/examples/drawable-mdpi/my_lossy.webp b/docs/checks/examples/drawable-mdpi/my_lossy.webp new file mode 100644 index 0000000..c195ff0 Binary files /dev/null and b/docs/checks/examples/drawable-mdpi/my_lossy.webp differ diff --git a/docs/checks/examples/drawable-mdpi/my_lossy_72dp.webp b/docs/checks/examples/drawable-mdpi/my_lossy_72dp.webp new file mode 100644 index 0000000..c195ff0 Binary files /dev/null and b/docs/checks/examples/drawable-mdpi/my_lossy_72dp.webp differ diff --git a/docs/checks/examples/drawable-mdpi/ok.webp b/docs/checks/examples/drawable-mdpi/ok.webp new file mode 100644 index 0000000..7efacdf Binary files /dev/null and b/docs/checks/examples/drawable-mdpi/ok.webp differ diff --git a/docs/checks/examples/layout/crcrlf.xml b/docs/checks/examples/layout/crcrlf.xml new file mode 100644 index 0000000..d029725 --- /dev/null +++ b/docs/checks/examples/layout/crcrlf.xml @@ -0,0 +1,14 @@ + + + + + diff --git a/docs/checks/examples/libs/unsupported.jar b/docs/checks/examples/libs/unsupported.jar new file mode 100644 index 0000000..7cbedc1 Binary files /dev/null and b/docs/checks/examples/libs/unsupported.jar differ diff --git a/docs/checks/examples/mipmap-mdpi/my_lossless.webp b/docs/checks/examples/mipmap-mdpi/my_lossless.webp new file mode 100644 index 0000000..7efacdf Binary files /dev/null and b/docs/checks/examples/mipmap-mdpi/my_lossless.webp differ diff --git a/docs/checks/examples/mipmap-mdpi/my_lossy2_72dp.webp b/docs/checks/examples/mipmap-mdpi/my_lossy2_72dp.webp new file mode 100644 index 0000000..c195ff0 Binary files /dev/null and b/docs/checks/examples/mipmap-mdpi/my_lossy2_72dp.webp differ diff --git a/docs/checks/examples/x86/libtensorflowlite_jni.so b/docs/checks/examples/x86/libtensorflowlite_jni.so new file mode 100644 index 0000000..2063ae1 --- /dev/null +++ b/docs/checks/examples/x86/libtensorflowlite_jni.so @@ -0,0 +1 @@ +ELF \ No newline at end of file diff --git a/docs/checks/examples/x86_64/libtensorflowlite_jni.so b/docs/checks/examples/x86_64/libtensorflowlite_jni.so new file mode 100644 index 0000000..9fa2333 Binary files /dev/null and b/docs/checks/examples/x86_64/libtensorflowlite_jni.so differ diff --git a/docs/checks/index.md.html b/docs/checks/index.md.html index bde6f43..b57edcd 100644 --- a/docs/checks/index.md.html +++ b/docs/checks/index.md.html @@ -13,6 +13,7 @@ - [AdapterViewChildren: `AdapterView` cannot have children in XML](AdapterViewChildren.md.html) - [AddJavascriptInterface: `addJavascriptInterface` Called](AddJavascriptInterface.md.html) - [AlertDialogUsage: Use the support library AlertDialog instead of android.app.AlertDialog](AlertDialogUsage.md.html) + - [Aligned16KB: Native library dependency not 16 KB aligned](Aligned16KB.md.html) - [AllCaps: Combining textAllCaps and markup](AllCaps.md.html) - [AllowAllHostnameVerifier: Insecure `HostnameVerifier`](AllowAllHostnameVerifier.md.html) - [AlwaysShowAction: Usage of `showAsAction=always`](AlwaysShowAction.md.html) @@ -652,6 +653,7 @@ - [TooDeepLayout: Layout hierarchy is too deep](TooDeepLayout.md.html) - [TooManyViews: Layout has too many views](TooManyViews.md.html) - [TranslucentOrientation: Mixing screenOrientation and translucency](TranslucentOrientation.md.html) + - [TrimLambda: Unnecessary lambda with `trim()`](TrimLambda.md.html) - [TrulyRandom: Weak RNG](TrulyRandom.md.html) - [TrustAllX509TrustManager: Insecure TLS/SSL trust manager](TrustAllX509TrustManager.md.html) - [TypographyDashes: Hyphen can be replaced with dash](TypographyDashes.md.html) @@ -670,6 +672,7 @@ - [UnknownIdInLayout: Reference to an id that is not in the current layout](UnknownIdInLayout.md.html) - [UnknownNullness: Unknown nullness](UnknownNullness.md.html) - [UnlocalizedSms: SMS phone number missing country code](UnlocalizedSms.md.html) + - [UnnecessaryArrayInit: Unnecessary array initialization](UnnecessaryArrayInit.md.html) - [UnnecessaryComposedModifier: Modifier.composed should only be used for modifiers that invoke @Composable functions](UnnecessaryComposedModifier.md.html) - [UnnecessaryRequiredFeature: Potentially unnecessary required feature](UnnecessaryRequiredFeature.md.html) - [UnprotectedSMSBroadcastReceiver: Unprotected SMS `BroadcastReceiver`](UnprotectedSMSBroadcastReceiver.md.html) @@ -723,6 +726,7 @@ - [UseCompatTextViewDrawableXml: Compat compound drawable attributes should be used on `TextView`](UseCompatTextViewDrawableXml.md.html) - [UseCompoundDrawables: Node can be replaced by a `TextView` with compound drawables](UseCompoundDrawables.md.html) - [UseGetLayoutInflater: Use getLayoutInflater() to get the LayoutInflater instead of calling LayoutInflater.from(Context)](UseGetLayoutInflater.md.html) + - [UseKtx: Use KTX extension function](UseKtx.md.html) - [UseOfBundledGooglePlayServices: Use of bundled version of Google Play services](UseOfBundledGooglePlayServices.md.html) - [UseOfNonLambdaOffsetOverload: Modifier.offset{ } is preferred over Modifier.offset() for `State` backed arguments](UseOfNonLambdaOffsetOverload.md.html) - [UseRequireInsteadOfGet: Use the 'require_____()' API rather than 'get____()' API for more descriptive error messages when it's null](UseRequireInsteadOfGet.md.html) diff --git a/docs/checks/severity.md.html b/docs/checks/severity.md.html index 5070585..450f1c2 100644 --- a/docs/checks/severity.md.html +++ b/docs/checks/severity.md.html @@ -377,7 +377,7 @@ - [WrongViewCast: Mismatched view type](WrongViewCast.md.html) - [XmlEscapeNeeded: Missing XML Escape](XmlEscapeNeeded.md.html) -* Warning (427) +* Warning (429) - [AcceptsUserCertificates: Allowing User Certificates](AcceptsUserCertificates.md.html) - [AccessibilityFocus: Forcing accessibility focus](AccessibilityFocus.md.html) @@ -387,6 +387,7 @@ - [AdapterViewChildren: `AdapterView` cannot have children in XML](AdapterViewChildren.md.html) - [AddJavascriptInterface: `addJavascriptInterface` Called](AddJavascriptInterface.md.html) - [AlertDialogUsage: Use the support library AlertDialog instead of android.app.AlertDialog](AlertDialogUsage.md.html) + - [Aligned16KB: Native library dependency not 16 KB aligned](Aligned16KB.md.html) - [AllCaps: Combining textAllCaps and markup](AllCaps.md.html) - [AllowAllHostnameVerifier: Insecure `HostnameVerifier`](AllowAllHostnameVerifier.md.html) - [AlwaysShowAction: Usage of `showAsAction=always`](AlwaysShowAction.md.html) @@ -760,6 +761,7 @@ - [UseCompatTextViewDrawableXml: Compat compound drawable attributes should be used on `TextView`](UseCompatTextViewDrawableXml.md.html) - [UseCompoundDrawables: Node can be replaced by a `TextView` with compound drawables](UseCompoundDrawables.md.html) - [UseGetLayoutInflater: Use getLayoutInflater() to get the LayoutInflater instead of calling LayoutInflater.from(Context)](UseGetLayoutInflater.md.html) + - [UseKtx: Use KTX extension function](UseKtx.md.html) - [UseOfBundledGooglePlayServices: Use of bundled version of Google Play services](UseOfBundledGooglePlayServices.md.html) - [UseOfNonLambdaOffsetOverload: Modifier.offset{ } is preferred over Modifier.offset() for `State` backed arguments](UseOfNonLambdaOffsetOverload.md.html) - [UseRequiresApi: Use `@RequiresApi` instead of `@TargetApi`](UseRequiresApi.md.html) @@ -807,7 +809,7 @@ - [WrongViewIdFormat: Flag view ids that are not in lowerCamelCase Format](WrongViewIdFormat.md.html) - [XmlSpacing: XML files should not contain any new lines](XmlSpacing.md.html) -* Information (9) +* Hint (11) - [ArcAnimationSpecTypeIssue: ArcAnimationSpec is designed for 2D values. Particularly, for positional values such as Offset.](ArcAnimationSpecTypeIssue.md.html) - [AutoboxingStateCreation: `State` will autobox values assigned to this state. Use a specialized state type instead.](AutoboxingStateCreation.md.html) @@ -818,6 +820,8 @@ - [MoshiUsageNonMoshiClassMap: Concrete Map type '%HINT%' is not natively supported by Moshi](MoshiUsageNonMoshiClassMap.md.html) - [ReportShortcutUsage: Report shortcut usage](ReportShortcutUsage.md.html) - [SimilarGradleDependency: Multiple Versions Gradle Dependency](SimilarGradleDependency.md.html) + - [TrimLambda: Unnecessary lambda with `trim()`](TrimLambda.md.html) + - [UnnecessaryArrayInit: Unnecessary array initialization](UnnecessaryArrayInit.md.html) * Disabled By Default (43) diff --git a/docs/checks/vendors.md.html b/docs/checks/vendors.md.html index 449aac9..4fe6543 100644 --- a/docs/checks/vendors.md.html +++ b/docs/checks/vendors.md.html @@ -3,7 +3,7 @@ Order: [Alphabetical](index.md.html) | [By category](categories.md.html) | By vendor | [By severity](severity.md.html) | [By year](year.md.html) | [Libraries](libraries.md.html) -* Built In (486) +* Built In (490) - [AaptCrash: Potential AAPT crash](AaptCrash.md.html) - [AcceptsUserCertificates: Allowing User Certificates](AcceptsUserCertificates.md.html) @@ -14,6 +14,7 @@ - [ActivityIconColor: Ongoing activity icon is not white](ActivityIconColor.md.html) - [AdapterViewChildren: `AdapterView` cannot have children in XML](AdapterViewChildren.md.html) - [AddJavascriptInterface: `addJavascriptInterface` Called](AddJavascriptInterface.md.html) + - [Aligned16KB: Native library dependency not 16 KB aligned](Aligned16KB.md.html) - [AllCaps: Combining textAllCaps and markup](AllCaps.md.html) - [AllowAllHostnameVerifier: Insecure `HostnameVerifier`](AllowAllHostnameVerifier.md.html) - [AlwaysShowAction: Usage of `showAsAction=always`](AlwaysShowAction.md.html) @@ -396,6 +397,7 @@ - [TooDeepLayout: Layout hierarchy is too deep](TooDeepLayout.md.html) - [TooManyViews: Layout has too many views](TooManyViews.md.html) - [TranslucentOrientation: Mixing screenOrientation and translucency](TranslucentOrientation.md.html) + - [TrimLambda: Unnecessary lambda with `trim()`](TrimLambda.md.html) - [TrulyRandom: Weak RNG](TrulyRandom.md.html) - [TrustAllX509TrustManager: Insecure TLS/SSL trust manager](TrustAllX509TrustManager.md.html) - [TypographyDashes: Hyphen can be replaced with dash](TypographyDashes.md.html) @@ -412,6 +414,7 @@ - [UnknownIdInLayout: Reference to an id that is not in the current layout](UnknownIdInLayout.md.html) - [UnknownNullness: Unknown nullness](UnknownNullness.md.html) - [UnlocalizedSms: SMS phone number missing country code](UnlocalizedSms.md.html) + - [UnnecessaryArrayInit: Unnecessary array initialization](UnnecessaryArrayInit.md.html) - [UnnecessaryRequiredFeature: Potentially unnecessary required feature](UnnecessaryRequiredFeature.md.html) - [UnprotectedSMSBroadcastReceiver: Unprotected SMS `BroadcastReceiver`](UnprotectedSMSBroadcastReceiver.md.html) - [UnsafeDynamicallyLoadedCode: `load` used to dynamically load code](UnsafeDynamicallyLoadedCode.md.html) @@ -436,6 +439,7 @@ - [UseAlpha2: Using 3-letter Codes](UseAlpha2.md.html) - [UseCheckPermission: Using the result of check permission calls](UseCheckPermission.md.html) - [UseCompoundDrawables: Node can be replaced by a `TextView` with compound drawables](UseCompoundDrawables.md.html) + - [UseKtx: Use KTX extension function](UseKtx.md.html) - [UseOfBundledGooglePlayServices: Use of bundled version of Google Play services](UseOfBundledGooglePlayServices.md.html) - [UseRequiresApi: Use `@RequiresApi` instead of `@TargetApi`](UseRequiresApi.md.html) - [UseSdkSuppress: Using `@SdkSuppress` instead of `@RequiresApi`](UseSdkSuppress.md.html) diff --git a/docs/checks/year.md.html b/docs/checks/year.md.html index 9ec8ceb..d011af9 100644 --- a/docs/checks/year.md.html +++ b/docs/checks/year.md.html @@ -3,15 +3,25 @@ Order: [Alphabetical](index.md.html) | [By category](categories.md.html) | [By vendor](vendors.md.html) | [By severity](severity.md.html) | By year | [Libraries](libraries.md.html) -* 2024 (67) +* 2025 (9) + + - [Aligned16KB: Native library dependency not 16 KB aligned](Aligned16KB.md.html) + - [AppLinkSplitToWebAndCustom: Android App links should only use http(s) schemes](AppLinkSplitToWebAndCustom.md.html) + - [AppLinkWarning: App Link warning](AppLinkWarning.md.html) + - [CredentialManagerMisuse: Misuse of Credential Manager API](CredentialManagerMisuse.md.html) + - [PlaySdkIndexVulnerability: Library has vulnerability issues in SDK Index](PlaySdkIndexVulnerability.md.html) + - [TrimLambda: Unnecessary lambda with `trim()`](TrimLambda.md.html) + - [UnnecessaryArrayInit: Unnecessary array initialization](UnnecessaryArrayInit.md.html) + - [UnsanitizedFilenameFromContentProvider: Trusting ContentProvider filenames without any sanitization](UnsanitizedFilenameFromContentProvider.md.html) + - [UseKtx: Use KTX extension function](UseKtx.md.html) + +* 2024 (62) - [AccessibilityFocus: Forcing accessibility focus](AccessibilityFocus.md.html) - [AccessibilityScrollActions: Incomplete Scroll Action support](AccessibilityScrollActions.md.html) - [AccessibilityWindowStateChangedEvent: Use of accessibility window state change events](AccessibilityWindowStateChangedEvent.md.html) - [ActivityIconColor: Ongoing activity icon is not white](ActivityIconColor.md.html) - - [AppLinkSplitToWebAndCustom: Android App links should only use http(s) schemes](AppLinkSplitToWebAndCustom.md.html) - [AppLinkUriRelativeFilterGroupError: URI relative filter group invalid](AppLinkUriRelativeFilterGroupError.md.html) - - [AppLinkWarning: App Link warning](AppLinkWarning.md.html) - [AvoidUsingNotNullOperator: Avoid using the !! operator in Kotlin](AvoidUsingNotNullOperator.md.html) - [BuildListAdds: Missing `add` call in `buildList`](BuildListAdds.md.html) - [ChildInNonViewGroup: Only view groups can have children](ChildInNonViewGroup.md.html) @@ -19,7 +29,6 @@ - [ContextCastToActivity: LocalContext should not be cast to Activity, use LocalActivity instead](ContextCastToActivity.md.html) - [CredManMissingDal: Missing Digital Asset Link for Credential Manager](CredManMissingDal.md.html) - [CredentialDependency: `credentials-play-services-auth` is Required](CredentialDependency.md.html) - - [CredentialManagerMisuse: Misuse of Credential Manager API](CredentialManagerMisuse.md.html) - [CredentialManagerSignInWithGoogle: Misuse of Sign in with Google API](CredentialManagerSignInWithGoogle.md.html) - [DisabledAllSafeBrowsing: Application has disabled safe browsing for all WebView objects](DisabledAllSafeBrowsing.md.html) - [DoNotCallViewToString: Do not use `View.toString()`](DoNotCallViewToString.md.html) @@ -46,7 +55,6 @@ - [NioDesugaring: Unsupported `java.nio` operations](NioDesugaring.md.html) - [PictureInPictureIssue: Picture In Picture best practices not followed](PictureInPictureIssue.md.html) - [PlaySdkIndexDeprecated: Library is marked as deprecated in SDK Index](PlaySdkIndexDeprecated.md.html) - - [PlaySdkIndexVulnerability: Library has vulnerability issues in SDK Index](PlaySdkIndexVulnerability.md.html) - [PrivacySandboxBlockedCall: Call is blocked in the Privacy Sandbox](PrivacySandboxBlockedCall.md.html) - [ProtoLayoutEdgeContentLayoutResponsive: ProtoLayout Material EdgeContentLayout should be used with responsivebehaviour to ensure the best behaviour across different screen sizes andlocales](ProtoLayoutEdgeContentLayoutResponsive.md.html) - [ProtoLayoutPrimaryLayoutResponsive: ProtoLayout Material PrimaryLayout should be used with responsive behaviourto ensure the best behaviour across different screen sizes and locales](ProtoLayoutPrimaryLayoutResponsive.md.html) @@ -59,7 +67,6 @@ - [UnclosedTrace: Incorrect trace section usage](UnclosedTrace.md.html) - [UnnecessaryRequiredFeature: Potentially unnecessary required feature](UnnecessaryRequiredFeature.md.html) - [UnsanitizedContentProviderFilename: Trusting ContentProvider filenames without any sanitization](UnsanitizedContentProviderFilename.md.html) - - [UnsanitizedFilenameFromContentProvider: Trusting ContentProvider filenames without any sanitization](UnsanitizedFilenameFromContentProvider.md.html) - [UnusedSharedTransitionModifierParameter: SharedTransitionScope calls should use the provided Modifier parameter](UnusedSharedTransitionModifierParameter.md.html) - [UseRequiresApi: Use `@RequiresApi` instead of `@TargetApi`](UseRequiresApi.md.html) - [UseSdkSuppress: Using `@SdkSuppress` instead of `@RequiresApi`](UseSdkSuppress.md.html)