Android
CircleCI
javadoc

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
}
}