Tips : Android Studio Gradle Pluginでjarをapkに含めずにコンパイルする

なかなかマニアックなユースケースですが、例えばandroid.jarのようにコンパイル時に参照解決するけど、apkには含めないような形で、独自のjarに依存するapkをGradleでビルドする方法についてメモしておきます。

Gradleのruntimeメソッドはない

Gradleのドキュメントを調べると、runtimeメソッドがあるようで、これを使うことで目的が達成できるようです。

1
2
3
dependencies {
    runtime fileTree(dir: '${project.rootDir}/path_to_libs_dir', include: '*.jar')
}

しかし、AndroidのGradle pluginではこのメソッドがサポートされていません。(excludeもないっぽいです)

なので別の方法で参照解決をする必要があります。

build.gradle の編集と確認

要は、コンパイル時にclasspathに入っていればいいので、それをbuild.gradleに追記していきます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
configurations {
    provided
}

dependencies {
    // ...
    provided fileTree(dir: '${project.rootDir}/path_to_libs_dir', include: '*.jar')
}

// Android's version of sourceSets.main.compileClasspath
android.applicationVariants.each { variant ->
    variant.javaCompile.classpath += configurations.provided
}

これで出来上がりです。この方法は、こちらの内容を参考にしました。

本当にjarが入っていないか調べるために、中身をみてみます。

1
2
$ mv app-debug.apk app-debug.zip
$ unzip app-debug.zip

この中に、classes.dexがあるので、これをdexからclassに変換します。

1
$ d2j-dex2jar classes.dex

これでjarができるので、zipに拡張子を変更してまた解凍します。

中にjarに相当するパッケージのディレクトリ階層やclassファイルがなければ成功です。

Gradle Beyond the Basics Amazonで見る
Built with Hugo
テーマ StackJimmy によって設計されています。