android - 如何从build.gradle根文件向Android Gradle子项目添加javadoc任务?

标签 android gradle javadoc android-gradle-plugin

我有一个包含多个android项目的工作区,如下所示:


  • SDK
  • Android库1
  • Android库2
  • ...
  • 样本
  • Android应用程序1
  • Android应用程序2

  • 所有项目都使用gradle进行编译。

    我可以使用以下代码添加指令以在Android应用和lib上生成javadoc:
    applicationVariants.all {...}
    or
    libraryVariants.all { variant ->
        println variant
        task("generate${variant.name.capitalize()}Javadoc", type: Javadoc) {
            description "Generates Javadoc for $variant.name."
            source = variant.javaCompile.source
            ext.androidJar = "${android.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar"
            classpath = files(variant.javaCompile.classpath.files) + files(ext.androidJar)
            options.links("http://docs.oracle.com/javase/7/docs/api/");
            options.linksOffline("http://d.android.com/reference", "${android.sdkDirectory}/docs/reference");
            exclude '**/BuildConfig.java'
            exclude '**/R.java'
        }
    }
    

    我想要的是将此指令从根项目中的build.gradle文件添加到所有子项目中。

    我相信这将使用subprojects {}指令,但是在配置过程之后,我不知道如何在此指令中运行代码,而且我也不知道如何检测我的应用程序是否是库。

    最佳答案

    独立,我成功使用了subprojects {}指令。

    关键是使用afterEvaluate {},所以我可以使用android gradle插件添加的android属性。

    这是我结尾的代码:

    subprojects{
        afterEvaluate { project ->
            if(project.hasProperty('android')){
                if(project.android.hasProperty('libraryVariants')) {
                    project.android.libraryVariants.all { variant ->
                        println variant
                        task("generate${variant.name.capitalize()}Javadoc", type: Javadoc) {
                            description "Generates Javadoc for $variant.name."
                            source = variant.javaCompile.source
                            ext.androidJar = "${project.android.sdkDirectory}/platforms/${project.android.compileSdkVersion}/android.jar"
                            classpath = files(variant.javaCompile.classpath.files) + files(ext.androidJar)
                            options.links("http://docs.oracle.com/javase/7/docs/api/");
                            options.linksOffline("http://d.android.com/reference", "${project.android.sdkDirectory}/docs/reference");
                            exclude '** /BuildConfig.java'
                            exclude '** /R.java'
                        }
                    }
                }
                else if (project.android.hasProperty('applicationVariants')){
                    project.android.applicationVariants.all { variant ->
                    println variant
                    task("generate${variant.name.capitalize()}Javadoc", type: Javadoc) {
                        description "Generates Javadoc for $variant.name."
                        source = variant.javaCompile.source
                        ext.androidJar = "${project.android.sdkDirectory}/platforms/${project.android.compileSdkVersion}/android.jar"
                        classpath = files(variant.javaCompile.classpath.files) + files(ext.androidJar)
                        options.links("http://docs.oracle.com/javase/7/docs/api/");
                        options.linksOffline("http://d.android.com/reference", "${project.android.sdkDirectory}/docs/reference");
                        exclude '** /BuildConfig.java'
                        exclude '** /R.java'
                        }
                    }
                }
            }
        }
    }
    

    关于android - 如何从build.gradle根文件向Android Gradle子项目添加javadoc任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26806057/

    相关文章:

    java - 尝试在 Android 中打开资源文件时出错

    android - 将外部 html 文件重定向到 Phonegap index.html

    android - 改造 ListView

    gradle - 在本地运行Azure Pipeline Gradle任务

    java - 在多项目构建中升级新配置

    java - 包声明上面的 javadoc 注释有什么作用?

    enums - 在自定义 doclet 中处理某些 5.0 语言功能(枚举和注释)的问题

    java - SimpleXML 构造函数异常 - 无法创建内部类

    java - 如何使用 Gradle 为测试和生产代码指定不同的(PMD、Checkstyle、Findbugs)规则集?

    javadoc - 如何防止 swagger 代码生成系统创建 javadoc?