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