読者です 読者をやめる 読者になる 読者になる

備忘録代わりのブログ

タイトル通りの私用備忘録。適当に残しておきたいことを書いておくブログ

Android開発録 android-support-v4が重複してビルドできない話

ついに仕事の開発環境をAndroid Studioへ移行

やーっとEclipse + ADTという闇から開放されたぱせりん。

ええ、この闇を払うためなら俺の工数くらいはいくらでも掛けますよ。

なによりGradleがありがたい!ビルド時にスクリプトを入れておくことでコンパイルするライブラリを外部から引っ張れるのはすごいことだと思うんですよ。

わざわざ「あああああSDKアップデートしなきゃFaceb○○kのバージョンがああああああ」とか考えなくていいんですから。

まあコンパイルにネットワーク接続が必須になるっていう罠もありますけどね。

最近のコンパイル環境でネットワークがないのはなかなかないでしょwwwww…いやあるんだろうなぁ

閑話休題

移行中、こんな問題が発生。

multiple dex files define landroid/support/v4/app/〜

どうやらandroid-v4が重複して出力されているらしい。

んで調べてみた。

調べ方は、

./gradlew -q [プロジェクト名:]dependencies

で、グラフ表示が出来る。そこで複数出ていそうなものをピックアップしてエクスクルードしてやればよさそうだ。

広告関連でgoogle play service libとFacebookSDKを使用していたが、どうやらその2つがsupport-v4.jarを出力していたらしい。

しかも実装上必要ということでモジュールレベルでもsupport-v4.jarをインポートしているため、こいつらと一緒に競合しているっぽい。

これを防ぐためにどうすればいいのか、Gradleならけっこう楽に出来る。

configurations {
    all*.exclude group: 'com.android.support', module: 'support-v4'
    all*.exclude group: 'com.android.support', module: 'support-annotations'
}

これを、モジュールレベルのbuild.gradleへ投入。

意味としては、

support-v4モジュールとsupport-anotaitionsモジュールを、サブプロジェクトからエクスポートしないようにする

というものっぽい(?)

これで取り急ぎビルドまでは出来るようになったぞー。

おそらくEclipse移行や広告インスコでこういうことが起きる人は少なからずいると思うので、備忘録と情報共有としてポイしておきます。