Tips : Android Studio Gradle Pluginでjarをapkに含めずにコンパイルする
なかなかマニアックなユースケースですが、例えばandroid.jarのようにコンパイル時に参照解決するけど、apkには含めないような形で、独自のjarに依存するapkをGradleでビルドする方法についてメモしておきます。
Gradleのruntimeメソッドはない
Gradleのドキュメントを調べると、runtimeメソッドがあるようで、これを使うことで目的が達成できるようです。
dependencies { runtime fileTree(dir: "${project.rootDir}/path_to_libs_dir", include: '*.jar') }
しかし、AndroidのGradle pluginではこのメソッドがサポートされていません。(excludeもないっぽいです)
なので別の方法で参照解決をする必要があります。
build.gradle の編集と確認
要は、コンパイル時にclasspathに入っていればいいので、それをbuild.gradleに追記していきます。
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が入っていないか調べるために、中身をみてみます。
$ mv app-debug.apk app-debug.zip
$ unzip app-debug.zip
この中に、classes.dex
があるので、これをdex
からclass
に変換します。
$ d2j-dex2jar classes.dex
これでjar
ができるので、zip
に拡張子を変更してまた解凍します。
中にjarに相当するパッケージのディレクトリ階層やclass
ファイルがなければ成功です。
- 作者: Tim Berglund
- 出版社/メーカー: O'Reilly Media
- 発売日: 2013/07/16
- メディア: Kindle版
- この商品を含むブログを見る