Help us understand the problem. What is going on with this article?

Circle CIでAndroid Support Libraryを含んだプロジェクトの日本語Javadocを出力する

More than 3 years have passed since last update.

Circle CIを使ってAndroidライブラリJavadocを出力する

Circle CIはUbuntu環境でビルドとかができるようですが、ローカルのUbutu環境で実行できても何故かCIではうまく出力できませんでした。具体的には、javadocを出力しようとしてもAndroid Support Libraryのclasspathが足りないらしく、失敗となります。

慢心(ローカルで通るし)と環境の違い(日本語化してるし)があったのかと思いますが、とにかく通らないと気持ち悪いのでなんとか直すために試行錯誤しました。

無事通ったので、そのメモです。

修正前のbuild.gradle

ネット上で探してきた出力用のスクリプトがこれです。多少修正していますが、ほぼそのまま使っています。ですがコレだと日本語が文字化けするし、support libraryを含んでいるとclasspathが足りません。

そもそもSupport Libraryはaarなので、そのままだとclasses.jarにアクセス出来ないっぽいです。

groovy
android.libraryVariants.all { variant ->
    if (!"release".equals(variant.name) || "".equals(ARTIFACT_VERSION)) {
        return;
    }

    task("javadoc", type: Javadoc) {
        title = "${file(".").name} ver ${ARTIFACT_VERSION}"
        description "Generates Android 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) +
                files("build/intermediates/classes/${variant.name}/")

        options.links("http://docs.oracle.com/javase/7/docs/api/");
        options.links("http://d.android.com/reference/");
        exclude '**/BuildConfig.java'
        exclude '**/*Dao.java' /* ignore greenDAO */
        exclude '**/DaoMaster.java' /* ignore greenDAO */
        exclude '**/DaoSession.java' /* ignore greenDAO */
        exclude '**/R.java' /* ignore greenDAO */
    }


    task("javadocJar", type: Jar, dependsOn: javadoc) {
        classifier = 'javadoc'
        from javadoc.destinationDir
    }

    artifacts {
        archives javadocJar
        archives sourcesJar
    }
}

修正後のbuild.gradle

試行錯誤して、Circle CI上で文字化けとSupport Libraryが通るようになったのがコレです。

  • charsetのUTF8指定
  • classpathにfileTreeでbuild/配下にあるAAR解凍キャッシュを指定
  • 追記: ラムダ式等、JDK1.8機能を使う場合はXdoclint:noneを追加することでエラーを回避できる
groovy
android.libraryVariants.all { variant ->
    if (!"release".equals(variant.name) || "".equals(ARTIFACT_VERSION)) {
        return;
    }

    task("javadoc", type: Javadoc) {
        title = "${file(".").name} ver ${ARTIFACT_VERSION}"
        description "Generates Android 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) +
                files("build/intermediates/classes/${variant.name}/") +
                fileTree("build/intermediates/exploded-aar").include("**/*.jar")

        options.links("http://docs.oracle.com/javase/7/docs/api/");
        options.links("http://d.android.com/reference/");
        exclude '**/BuildConfig.java'
        exclude '**/*Dao.java' /* ignore greenDAO */
        exclude '**/DaoMaster.java' /* ignore greenDAO */
        exclude '**/DaoSession.java' /* ignore greenDAO */
        exclude '**/R.java' /* ignore greenDAO */

        options.addStringOption('Xdoclint:none', '-quiet')
        options.encoding = "UTF-8"
        project.configure(options) {
            memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED
            charSet = "UTF-8"
        }
    }


    task("javadocJar", type: Jar, dependsOn: javadoc) {
        classifier = 'javadoc'
        from javadoc.destinationDir
    }

    artifacts {
        archives javadocJar
        archives sourcesJar
    }
}
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away