android-custom-lint-rules
android-custom-lint-rules copied to clipboard
lintChecks with AGP7
We are currently migrating to AGP 7 and noticed that our custom lint rules are not included in the lint checks.
We previously included them using lintChecks project(":libraries:lint-rules")
and we only need them for local code check, so no publishing needed. Is there anything specific that needs to be changed to make it work with AGP 7?
Do you mean that they're not packaged (e.g. the AAR file does not contain a lint.jar) or that somehow the checks aren't working/being applied?
the checks aren't working/being applied
this.
An example of a lint check we have is below. And to test the setup, we previously added a usage of SimpleDateFormat
and could see it in the lint report. After updating to AGP 7 we don't see it in the lint report.
@Suppress("UnstableApiUsage")
class LegacyDateNamingPatternDetector : Detector(), Detector.UastScanner {
override fun getApplicableUastTypes() = listOf(UImportStatement::class.java)
override fun createUastHandler(context: JavaContext) = LegacyDateInvalidImportHandler(context)
}
class LegacyDateInvalidImportHandler(private val context: JavaContext) : UElementHandler() {
override fun visitImportStatement(node: UImportStatement) {
node.importReference?.let { importReference ->
if (importReference.asSourceString().contains("java.text.SimpleDateFormat")) {
context.report(IssueLegacyDateImport, node, context.getLocation(importReference), "Forbidden import of Legacy Date API")
}
}
}
}
class IssueRegistry : IssueRegistry() {
override val issues: List<Issue> = listOf(
IssueLegacyDateImport,
IssueContextCompatIncorrectUsage
)
override val api: Int = CURRENT_API
override val vendor: Vendor = Vendor(
vendorName = "placeholder",
feedbackUrl = "placeholder",
contact = "placeholder"
)
}
val IssueLegacyDateImport = Issue.create(
id = "LegacyDateImport",
briefDescription = "Old Java date APIs used",
explanation = "Use Java 8 dates instead. See DateTimeExt class for more info.",
category = CORRECTNESS,
priority = 5,
severity = Severity.WARNING,
implementation = Implementation(
LegacyDateNamingPatternDetector::class.java,
EnumSet.of(Scope.JAVA_FILE, Scope.TEST_SOURCES)
)
)
Same issue with AGP 7.0.3 and lint 30.0.3.
I figured out that in my case it's caused by the maven publish plugin since I used third party maven plugin and seems it doesn't work well with AGP 7.0.3.
It's ok when I switch to builtin maven-publish plugin.
I have the same problem, but I'm not using the maven-publish plugin at all, and I'm not publishing my lint checks via a library module, I'm just using them locally.
I am using kotlin for my build scripts, not groovy.....would that make a difference?
Android Studio Bumblebee | 2021.1.1 Beta 4 AGP=7.1.0-beta04 Lint=30.1.0-beta04
I've literally just included the code from this repo and have a Log.println() in my MainActivity which doesn't get highlighted when I run ./gradlew lintDebug or inside Android Studio.