android - 当内部类依赖于 R.java 时,Gradle 在 Android Javadocs 中排除 R.java

标签 android gradle android-gradle-plugin javadoc doclet

我正在为 API 构建 JavaDoc,其中 API 中的类依赖于 R.java。我想构建 Javadoc 没有引用丢失的 R.java 文件的符号错误,因为即使我设置 failOnError false 构建成功但我们的 Jenkins 作业将在成功发生错误时将构建报告为失败构建。下面的任务将成功创建 javadocs,但会在构建期间报告与未找到 R.java 相关的错误。

android.libraryVariants.all { variant ->
def name = variant.name.capitalize()

task("generate${name}Doclava", type: Javadoc) {

    description "Generates Javadoc for $variant.name."
    source = variant.javaCompile.source
    title = null
    // use android.bootClasspath instead of building our own path to android jar
    //ext.androidJar = "${android.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar"
    // hardcoded path to generated R.java file to avoid javadoc compile issues
    ext.R = "build/generated/source/r/minSDK15/release"
    classpath += project.files(android.sourceSets.main.java.srcDirs, variant.javaCompile.classpath.files, android.bootClasspath)
    destinationDir = file("${project.docsDir}/${name}/doclava")
    options {
        docletpath = configurations.jaxDoclet.files.asType(List)
        doclet "com.google.doclava.Doclava"
        bootClasspath new File(System.getenv('JAVA_HOME') + "/jre/lib/rt.jar")
        addStringOption "XDignore.symbol.file", "-quiet"
        addStringOption "hdf project.name", "${project.name}"
        addStringOption "federate android", "http://d.android.com/reference"
        addStringOption "federationxml android", "http://doclava.googlecode.com/svn/static/api/android-10.xml"
        addStringOption "federate JDK", "http://download.oracle.com/javase/6/docs/api/index.html?"
        addStringOption "federationxml JDK", "http://doclava.googlecode.com/svn/static/api/openjdk-6.xml"
        addStringOption "templatedir", "${project.docsDir}/${name}/doclava/templates"
        addStringOption "apixml", "${project.docsDir}/${name}/doclava/api-${project.version}.xml"
        addStringOption "since doclava/since/api-1.0.0.xml", "1.0.0"
        addStringOption "apiversion", "${project.version}"
        failOnError false
    }
    // exclude generated files
    exclude '**/BuildConfig.java'
    exclude '**/R.java'
    // exclude internal packages
    exclude '**/internal/**'
    options.addStringOption "apixml", "${project.docsDir}/${name}/doclava/api-${project.version}.xml"
  }
}

我尝试过的一些事情:

  • 硬编码生成的 R.java 文件的路径并添加到类路径中。

classpath += project.files(android.sourceSets.main.java.srcDirs, variant.javaCompile.classpath.files, android.bootClasspath, ext.R)

这成功消除了错误,因此构建成功,但生成的 javadoc 在 javadoc 中有指向 R.*.class 的空链接。

  • 从排除列表中删除 exclude '**/R.java' 行,同时在类路径中不包括 R.java 的路径。

这成功地消除了错误并且构建成功,但生成的 javadoc 具有指向 R.*.class 文件的链接。

似乎 exclude 语句从类路径中排除,而不是从 javadoc 中排除。任何有关如何生成类依赖于 R.java 但在 javadoc 输出中不包含 R.java 的 javadoc 的见解将不胜感激。

最佳答案

在 Android Studio 上,进入以下设置(可以通过 File > Settings 访问设置):

Appearance & Behaviour > Scopes

您应该可以在此处浏览您的项目文件。现在选择您的文件并使用最右侧的按钮将它们包含/排除到您的范围内(您可以排除或不包含 R.java 文件和 BuildConfig.java文件)。确保底部的“共享范围”复选框已打勾,并且您的范围有一个好记的名称。

接下来转到 Javadoc 生成器对话框(Tools > Generate Javadoc)。选择底部的单选按钮(“自定义范围”),然后从菜单中选择您之前创建的范围。您可以为 Javadocs 配置其他设置。

最后单击“确定”,您应该已经生成了 Javadocs。

希望这能解决您的问题。

关于android - 当内部类依赖于 R.java 时,Gradle 在 Android Javadocs 中排除 R.java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34427079/

相关文章:

android - 如何将数据从 Activity 发送到 Fragment

android - 带有两个可按下部分的 ListView 项目布局出现奇怪的视觉问题

android - 如何自定义ProgressBar的边框宽度

java - Gradle 配置提供了子项目构建中忽略的依赖关系

gradle - 错误 : more than one library with package name 'com.google.android.gms'

java - 如何用 jar 替换 gradle 模块依赖项?

android - Android Studio 3.2.1 中的 Gradle 项目同步失败

android - 具有 ConstraintLayout 和填充的 LinearLayout

java - 黑色 Activity 给出错误android studio

android - 应用程序 :processDebugResources - IllegalArgumentException (no error message)