Android 工作室代码检查 shell 用于集成到 CI 管道中的脚本

Android studio code inspection shell script for integration in CI pipeline

我正在尝试为我的 android 应用程序集成死代码分析以提高代码质量。我发现了 android studio 提供的开箱即用的代码检查选项,它为我提供了未使用代码的广泛报告和改进建议。

我使用了分析 -> 检查代码选项

我在studio中得到的结果如下:

这非常有用,但我想将此代码分析集成到我的 CI 管道中,以便我可以跟踪和趋势报告的警告。

我发现一个 blog 说我可以使用 Android Studio 包附带的 inpsect.sh 文件来达到同样的目的。命令的语法如下:

sh inspect.sh <project> <inspection-profile> <output> [<options>]

我试图通过传递下面给出的适当参数来运行这个命令:

sh inspect.sh Users/user1/Documents/androidProject /Users/user1/Documents/androidProject/app/src/InspectionProfile.xml /Users/user1/Documents/inspectionResults -v2 -d /Users/user1/Documents/androidProject/app/src

但是每当我尝试 运行 这个带有所需参数的 shell 脚本时,我都会收到以下错误:

inspect.sh: line 9: exec: /Applications/Android Studio.app/Contents/bin/inspect.sh/../MacOS/studio: cannot execute: Not a directory

花了很多时间,但运气不好。我在这里错过了什么?

这是因为您没有为 -d 选项指定参数。

-d <Specify the full path to the subdirectory if you don't want to inspect the whole project.>

应该是这样的:

inspect.sh 'Users/user1/Documents/androidProject' '/Users/user1/Documents/androidProject/app/src/InspectionProfile.xml' '/Users/user1/Documents/inspectionResults' -v2 -d '/Users/user1/Documents/androidProject/app/src'

看了inspect.sh的内容后,我意识到脚本希望将脚本的绝对路径作为第一个参数传递。

而不是通过:

sh inspect.sh Users/user1/Documents/androidProject /Users/user1/Documents/androidProject/app/src/InspectionProfile.xml /Users/user1/Documents/inspectionResults -v2 -d /Users/user1/Documents/androidProject/app/src

我不得不通过 inspect.sh 的绝对路径,如下所示:

sh "/Applications/Android Studio.app/Contents/bin/inspect.sh" Users/user1/Documents/androidProject /Users/user1/Documents/androidProject/app/src/InspectionProfile.xml /Users/user1/Documents/inspectionResults -v2 -d /Users/user1/Documents/androidProject/app/src

最后,我能够在 /Users/user1/Documents/inspectionResults

获得 XML 报告进行检查