fkm blog

software開発に関することを書いていきます

Android用Java libraryを作る

Android用ライブラリといえばAndroid Library Project. aar参照やproject丸ごとimportで使うやつですな.

Android Library Projectのメリットは, リソースを含めることができる点. アプリのビルド時にうまいことリソースをマージしてくれる.

でもその代償として, pure javaなクラスのテストもAndroid testとなるので, 実機がないとエミュレーターが起動してこれまた面倒くさい.

なので, android.jarに依存しない部分だけjarとして切り出して, Java library projectとしたくなる.

Android StudioでもJava library projectが作れるので, これを使ってテストのコストを下げることにチャレンジしてみた. 結論からいうと出来ます.

build.gradleを編集する

maven local repositoryにいれる準備. この部分は同じ

apply plugin: 'maven'

uploadArchives {
    repositories.mavenDeployer {
        repository url: "file://$System.env.HOME/.m2/repository"
        pom.groupId = 'jp.fkmsoft'
        pom.artifactId = 'java-lib'
        pom.version = '0.0.1'
    }
}

maven local repositoryにインストール

こちらはinstallタスクでいい

$ ./gradlew install

org.jsonに依存する場合は?

org.jsonは残念ながらandroid.jar内だったりする. なので普通にdependenciesにcompileとして書くと, ぶつかって警告がでる(警告がでるけどなんとかなってる気はする)

警告が出るのもあんまりなので, pom.xml作成時は除外する方法を模索してみた. providedを定義し, org.jsonをprovidedとして依存関係に追加する. Android Studioもうまいことやってくれる.

configurations {
    provided
}

sourceSets {
    main.compileClasspath += configurations.provided
    test.compileClasspath += configurations.provided
    test.runtimeClasspath += configurations.provided
}

dependencies {
    provided 'org.json:json:20090211'
}