根据https://developer.android.com/studio/write/lint.html#snapshot,我们可以创建一个Lint警告基线文件。 问题是我有多种口味,每种都有自己的sourceSets。有些文件只用在一种风格中。
当我生成基线文件时,它始终特定于变体。这意味着它对其他变体无效,即它会遗漏一些现有问题。
我试过把
lintOptions {
baseline file("lint-baseline.xml")
}
在build和flavor块中,但它不会生成多个基线。
有没有人设法生成特定于风味的lint基线文件?如果是这样的话?
谢谢!
答案 0 :(得分:1)
由于在 build.gradle 文件中定义方法时出错,我无法使上述答案完全有效。
使用 himanshu saluja 的回答,这对我有用。
我的根项目的 gradle 文件有:
ext.getLintFileName = {
Gradle gradle = getGradle()
String taskReq = gradle.getStartParameter().getTaskRequests().args.toString()
if(taskReq.contains("Debug")) {
return "debug-lint-baseline.xml"
} else {
return "release-lint-baseline.xml"
}
}
android 块中子项目的 gradle 文件使用这样的值:
lintOptions {
baseline file(rootProject.ext.getLintFileName)
checkDependencies true
abortOnError true
absolutePaths false
}
答案 1 :(得分:0)
鉴于baseline
功能在LintOptions,并且这个功能是AFAIK无法识别变种,所以这不是开箱即用的。
您可以在https://b.android.com上提交功能请求。
答案 2 :(得分:0)
我正在尝试相同的事情,并找到了解决方法。此创建差异文件以进行发布和调试。您可以将自定义逻辑放入getfileName
lintOptions {
baseline file(getFileName())
checkAllWarnings true
warningsAsErrors true
abortOnError true
}
def getCurrentFlavor() {
Gradle gradle = getGradle()
String tskReqStr = gradle.getStartParameter().getTaskRequests().args.toString()
println tskReqStr
if (tskReqStr.contains("Debug")) {
return "debug"
} else {
return "release"
}
}
private String getFileName(String command) {
return getCurrentFlavor() + "-lint-baseline.xml"
}
答案 3 :(得分:0)
1- 将以下函数添加到您的应用级 build.gradle 文件中:
def getPath() {
Gradle gradle = getGradle()
String tskReqStr = gradle.getStartParameter().getTaskRequests().toString()
Pattern pattern
String path
String fileName = "lint-baseline"
if (tskReqStr.contains("assemble"))
pattern = Pattern.compile("assemble(\\w+)(Release|Debug)")
else if (tskReqStr.contains("generate"))
pattern = Pattern.compile("generate(\\w+)(Release|Debug)")
else if (tskReqStr.contains("lint"))
pattern = Pattern.compile("lint(\\w+)(Release|Debug)")
if(pattern != null) {
Matcher matcher = pattern.matcher(tskReqStr)
if (matcher.find()) {
path = matcher.group(1).toLowerCase() + matcher.group(2).toLowerCase()
return "lint-baselines/${path}-${fileName}.xml"
} else {
return "lint-baselines/${fileName}.xml"
}
}
return "lint-baselines/${fileName}.xml"
}
这个函数为每个构建变体创建一个特定的路径。您可以通过更改“fileName”变量来自定义文件名。
2- 将以下行添加到应用级 build.gradle 文件的 lintOption 范围:
lintOptions {
...
// Use (or create) a baseline file for issues that should not be reported
baseline file("${getPath()}")
...
}
3- 为每个构建变体运行 linter。 例如,在项目根目录的 Android Studio 的终端选项卡中键入以下命令:
gradlew app:lintMyAppRelease
app
= 您的模块名称
MyAppRelease
= 您的构建变体
4- 完成