Unyablog.

のにれんのブログ

pom.xml なプロジェクトをAndroid Library にして IDE に読ませる

picasso で resize できるの便利なのですが、resize したときに callback がしたいと思ったので fork した ものを AndroidStudio で頑張って読み込ませた話です。

picasso には build.gradle がなく pom.xml 的なアレ。なのでこのままだと AndroidStudio で読み込んでくれません。

手段としては

などあるのですが、複数のマシンでいい感じに開発したかったので git submodule を使いたい。ということで gradle ファイルを自分で作りました。

といっても pom なプロジェクトのトップで

gradle init --type pom

とすればある程度いい感じに build.graedle が生成されるので、そこを弄ります。

picasso の場合 sample など3つのモジュールに分割されているのですが、picasso本体(picaso/picasso)しか使う予定がなかったのでプロジェクトトップにあった build.gradle は捨てて picasso本体のみで弄ることにしました。

ということでさっき生成された gradlew 等のファイルは本体以外にあるものは不要なので削除します。

しかし、そのままビルドすると picassojavaライブラリとして認識されているのでいい感じにandroidに認識させるために Andorid Library っぽく書き換えました。

google の volley ライブラリ をお手本にして gradle を書き換えた結果がこちらです。

gradle init から変化した点は

  • AndroidManifest.xml を追加した
<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.squareup.picasso">
    <application />
</manifest>
  • build.gradle を AndroidLibrary っぽく設定した
apply plugin: "com.android.library"

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        targetSdkVersion 22
        versionCode 1
        versionName "2.5.2-nonylene"
    }

}

と言った感じです。*1

そしてあとは volley と同じようにパスを通して読み込ませる といい感じにロードすることができました。

テストも実行してみました*2が通ってくれたのでまあ大丈夫そう。*3

*1:ここでクラスパスが重複したりしましたが モジュールトップを右クリックして出て来る Project Structure の Dependencies から https://github.com/nonylene/picasso/commit/67f69b8c54ea96c8cf738d04c2faf0356c80dde6#diff-b63c6b2c1ea5f0e0147c9f567985d02cR23 のように provided にすることで解決しました。

*2:Build Variants から Unit Tests に変更して JUnit テストを実行する

*3:結局その後元の picasso に戻してしまったので徒労に終わったわけですが...