gpt4 book ai didi

android - 在 ant build 中使用库的 Android 项目的 Findbugs

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:13:08 24 4
gpt4 key购买 nike

Findbugs是一个很棒的软件,我的团队在处理我们的 Android 项目时使用它。在 Eclipse 中,一切都很好,很 Shiny ,但是现在我们正在尝试使用 ant 自动化我们的构建,并为每个构建自动生成 Findbugs 结果。

好像没那么难。我遵循了本教程:
https://wiki.jenkins-ci.org/display/JENKINS/Building+an+Android+app+and+test+project#BuildinganAndroidappandtestproject-FindBugs
一个小问题是我必须将 ${android.jar} 更改为 ${project.target.android.jar}

最糟糕的部分是缺少分析所需的以下类:来 self 们使用的库项目的类的警告。其中一些是我们自己的,我们也想用 Findbugs 扫描它们。更复杂的是,其中一个库使用了另一个库(也是我们自己的,需要扫描),所以它看起来像这样:
项目 A --uses--> 库 B --uses--> 库 C

在这里我认为,由于 Android SDK 可以处理所有这些依赖项(库 C 在我为项目 A 发出 ant debug 时编译),我可以以某种方式利用它,获取库列表我的项目依赖于并将其提供给 findbugs 任务。不幸的是,我没能做到这一点。

现在我决定手动输入所有库,一些输入到 findbugs 任务的 class 属性中,一些输入到 auxClasspath 中,这样的好处是我只能分析其中的一些项目依赖的库。我仍然希望我最初尝试做的事情是可能的。谁能告诉我如何提取路径元素

最佳答案

我终于找到了 SDK 构建脚本的一部分,它将所有 jar 的“类路径”(classes.jar - 所有库的“类路径”放在一起,包括“图表”中的库 C "以及项目的 libs/ 文件夹中的 jar 和所有库)。

带有 findbugs 目标的最终 custom-rules.xml 如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<project name="Project_custom" default="findbugs">

<taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask"/>

<target name="findbugs">
<gettarget
androidJarFileOut="project.target.android.jar"
androidAidlFileOut="project.target.framework.aidl"
bootClassPathOut="project.target.class.path"
targetApiOut="project.target.apilevel"
minSdkVersionOut="project.minSdkVersion" />
<dependency
libraryFolderPathOut="project.library.folder.path"
libraryPackagesOut="project.library.packages"
libraryManifestFilePathOut="project.library.manifest.file.path"
libraryResFolderPathOut="project.library.res.folder.path"
libraryBinAidlFolderPathOut="project.library.bin.aidl.folder.path"
libraryNativeFolderPathOut="project.library.native.folder.path"
jarLibraryPathOut="project.all.jars.path"
targetApi="${project.target.apilevel}"
verbose="${verbose}" />

<findbugs home="${findbugs.home}" output="xml" outputFile="findbugs-results.xml">
<auxClasspath>
<pathelement location="${project.target.android.jar}" />
<path refid="project.all.jars.path" />
</auxClasspath>
<class location="${out.dir}" />

</findbugs>
</target>

</project>

编辑:我已将目标升级为独立于构建目标运行,即现在您可以只运行 ant findbugs 而不是 ant debug findbugs

关于android - 在 ant build 中使用库的 Android 项目的 Findbugs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11720103/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com