Gradle, Javadoc and Android documentation



我现在将Gradle用于我的所有项目,甚至用于javadoc生成。

android.libraryVariants.all { variant ->
    task("generate${variant.name}Javadoc", type: Javadoc) {
        title = "$name $version API"
        source = variant.javaCompile.source
        ext.androidJar = "${android.plugin.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar"
        ext.googlePlayServicesJar = "${android.plugin.sdkDirectory}/extras/google/google_play_services/libproject/google-play-services_lib/libs/google-play-services.jar"
        classpath = files(variant.javaCompile.classpath.files, ext.androidJar, ext.googlePlayServicesJar)
        options.links("http://docs.oracle.com/javase/7/docs/api/");
        options.links("http://d.android.com/reference/");
        //options.linksOffline("http://d.android.com/reference", "${android.plugin.sdkDirectory}/docs/reference");
        exclude '**/BuildConfig.java'
        exclude '**/R.java'
    }
}

有了这些代码,除了一件事:像Activity、Bitmap等常规Android API对象之外,我一切都正常工作。Java的链接运行良好。

最终生成的文档不会链接到http://d.android.com/reference.我尝试了两个选项.links()和options.linksOffline()都没有成功。

编辑

多亏了@ejb,问题是不能同时提供多个options.links()。因此,我将options.links()用于Java文档,将options.linksOffline()用于Android文档:

options {
    links("http://docs.oracle.com/javase/7/docs/api/");
    linksOffline("http://d.android.com/reference", "${android.plugin.sdkDirectory}/docs/reference");
    //stylesheetFile = new File(projectDir, "stylesheet.css");
}

我能够成功链接到http://d.android.com/reference使用下面的代码片段,这在功能上正是您所拥有的(据我所知)。

 android.libraryVariants.all { variant -> 
   task("generate${variant.name.capitalize()}Javadoc", type: Javadoc) {
     // title = ''
     // description = ''
     source = variant.javaCompile.source 
     classpath = files(variant.javaCompile.classpath.files, project.android.getBootClasspath()) 
     options { 
       links "http://docs.oracle.com/javase/7/docs/api/" 
       linksOffline "http://d.android.com/reference","${android.sdkDirectory}/docs/reference" 
     } 
     exclude '**/BuildConfig.java' 
     exclude '**/R.java' 
   } 
 }

所以这里还有其他问题。

您必须离线构建javadoc,因为package-list似乎在web服务的路径上不可用。也许可以仔细检查一下您是否已经在本地加载了文档,并确保/[android-sdk]/docs/reference目录中有一个package-list

如果你仍然不能弄清楚,也许你可以发布输出。

您可以检查的另一件事是./build/tmp/[taskname]/javadoc.options,所述文件的head应该显示仔细设置的适当选项。需要检查的内容包括在-classpath中是否正确包含android.jar,以及是否存在带有预期参数的linksOffline:-linksoffline extDocURL packageListLoc

javadoc.options应该同时具有两个选项,并且只有相应的参数:

-linksoffline 'http://d.android.come/reference' '[sdkDir]/docs/reference'
-links 'http://docs.oracle.com/javase/7/docs/api/' 

编辑android.getBootClasspath()更好,这要归功于p-chan。

适用于Android Gradle插件1.1.2+(com.Android.tools.build:Gradle:1.1.+)

库变体-不再工作

使用:

task javadoc(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
    destinationDir = file("../javadoc/")
    failOnError false
}

destinationDir=file("../javadoc/")-将javadocs定位在项目目录的根目录中(通过这种方式,jenkinsjavadoc插件可以找到它并显示在特殊的文档面板中)

failOnError false-用于抑制可能导致在jenkins 上构建失败的警告


Gradle JavaDocs的替代方案

Doxygen-交叉引用文档工具。

可以从UI或终端运行:http://www.doxygen.nl/manual/doxygen_usage.html


生成javadoc可用抛出java工具:'javadoc'

从命令行运行:

javadoc -d docs -sourcepath app/src/main/java -subpackages com

docs-目标文件夹

最新更新