我有一个 android 库,我为其创建了 2 个 linting 规则。该项目中有 3 个包,主要的一个包含示例应用程序、lib 包和 linting 包。我能找到的 lib 和 lint 模块之间的唯一链接位于 lib
的
build.gradle
中
lintPublish(project(':app:linter_pkg'))
当我尝试 linting 规则时一切都很好,同时将库引入到示例中,就像这样
implementation project(path: ':app:myLib')
但是,一旦我将库作为
.aar
发布到 github 包,并且使用远程包将库引入示例应用程序中,其中一个 linting 规则就会停止工作。
这对我来说没有任何意义。当库与本地链接一起使用时,这两个规则都有效,因此显然代码可以工作。我似乎没有错误地发布 linting 规则,因为其中一条规则仍然有效。因此
aar
会被正确下载并链接。
我还检查了我发布的构建文件和
.class
文件,并将它们与本地链接 lint 时 Android Studio 生成的文件进行比较,它们是相同的。
知道什么会导致这种行为,只有一半的构建被破坏吗?
当您使用远程包引入库时,可能有多种原因导致您的 linting 规则之一停止工作。您可以检查以下几件事:
groovy
implementation project(path: ':app:linter_pkg')
依赖项冲突:检查 linting 包与示例应用程序中的其他依赖项之间是否存在任何依赖项冲突。冲突的依赖关系可能会导致其中一项 linting 规则出现问题。您可以使用
./gradlew app:dependencies
命令查看依赖关系树并检查是否存在冲突。
Lint 配置:确保在示例应用程序的 build.gradle 文件中正确设置 lint 配置。确保
lintChecks
任务在构建过程中正在执行。您可以通过运行 ./gradlew app:lint
命令来检查它,看看它是否包含您的自定义 linting 规则。
ProGuard/R8 混淆:如果您在示例应用程序中使用 ProGuard 或 R8 混淆,则混淆过程可能会影响 linting 规则。在这种情况下,您可能需要配置 ProGuard/R8 以保留 linting 规则所需的必要类和方法。
Lint Gradle 插件版本:检查您在库和示例应用程序中是否使用相同版本的 lint Gradle 插件。不同版本的 lint 插件之间的不兼容性可能会导致自定义 linting 规则出现问题。
Lint 检查配置:确保在 linting 包的 build.gradle 文件中正确配置自定义 linting 规则。确保规则已注册并包含在
lintChecks
任务中。
通过检查这些要点,您应该能够识别在将库用作远程包时可能导致 linting 规则停止工作的任何潜在问题。