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 报告进行检查
我正在尝试为我的 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