intellijでv7 appcompatを使う

最近はintellij + scala + sbtでandroidアプリを書いたりしているのですがハマるところ多すぎじゃね?という感じです。

で、タイトルの通りandroid support libraryのv7 appcompat libraryをintellij ideaで使う方法なんですが、scalaとかsbtとかあんまり関係ない話です。

試した環境

手順

v7 appcompat libraryのインストール

Android SDK ManagerでAndroid Support Libraryをダウンロードしてくる。

f:id:akiomik:20150311033143p:plain

v7 appcompat libraryを依存関係に追加

build.sbtに以下のように追加する。

resolvers += "Local android extras" at s"file:///${System.getenv("ANDROID_HOME")}/extras/android/m2repository"

libraryDependencies ++= Seq(
  "com.android.support" % "appcompat-v7" % "21.0.3"
)

v7 appcompat libraryのモジュール化

v7に含まれているリソースを利用するためにこの作業が必要。 同じsupport libraryでも、リソースがないv4などではこの作業は不要。

Fileメニュー > Import Module...を選択し、出てきたダイアログに$ANDROID_HOME/extras/android/support/v7/appcompatのパスを入れる。

f:id:akiomik:20150311033740p:plain

あとはメインのAndroidモジュールの方に、モジュール化したv7 appcompat libraryを依存関係に追加する。

f:id:akiomik:20150311035619p:plain

自分の環境ではこれだけで動いた……と思うけど、他にもproguardの設定とかなんかあるかも。

エラーが出るとき

API Levelに合わせて正しいSDKを設定していないとエラーが出てビルドできません。例えばAndroid 4.4.2のSDK(API Level 19)でAndroid 5.0.1のライブラリ(API Level 21)を利用しようとすると以下のようなエラーが大量に出ました。

Error:(75, -1) android-apt-compiler: [android-support-v7-appcompat] /usr/local/opt/android-sdk/extras/android/support/v7/appcompat/res/values-v21/styles_base.xml:75: error: Error retrieving parent for item: No resource found that matches the given name 'android:Widget.Material.ActionButton'.

project.propertiestarget=android-**は変えても変えなくても動くっぽいけど、念のため合わせておいたほうが良さそう。

参考