Android Studio最速入門~効率的にコーディングするための使い方

第6回 Android StudioとGradle[後編]

この記事を読むのに必要な時間:およそ 9 分

[TIPS#2]プロジェクトにライブラリを追加したいんですが,どうしたらいいんですか

Android Studioが推奨したいのは,このどちらなのかわかりませんが,大きく2通りのやり方があります。どの方法もbuild.gradleにライブラリの記述をすることは変わりありません。

その1:build.gradleに設定した内容をAndroid Studioに自動反映させる

すでに登録済みのandroid-support-v4.jarと同じように,<PROJECT_HOME>/MyFirstApp/libsに追加したいライブラリ(Jarファイル)を配置してbuild.gradleにその旨を記述しますリスト1⁠。

リスト1 build.gradleへのライブラリ追加の記述(ローカル参照)

dependencies {
  compile files('libs/android-support-v4.jar')
  compile files('libs/gson-2.2.4.jar')
}

リスト1のようにbuild.gradleを修正し,<PROJECT_HOME>/MyFirstApp/libsディレクトリにライブラリを配置した後,該当プロジェクトを開き直します(メニューバーの「File → Close Project」で閉じて開き直すのが便利です⁠⁠。すると,しばらく何かを処理したかと思うと,指定したJarファイルが図7のようにAndroid Studioのライブラリとして認識されます(Android Studioに認識されるとJarファイルに三角のアイコンが付きます⁠⁠。

GradleはMavenIvyのようにネット上のリポジトリからライブラリをダウンロードする機能があるのですが,その方法でもライブラリを追加することができますリスト2⁠。

リスト2 build.gradleへのライブラリ追加の記述(ダウンロード方式)

repositories {
  mavenCentral()
}

dependencies {
  compile files('libs/android-support-v4.jar')
  compile 'com.google.code.gson:gson:2.2.4'     // <-- here!!
}

冒頭の3行はMavenリポジトリからライブラリをダウンロードするためのおまじないです。こちらも先ほどと同じように,build.gradleを修正してから,プロジェクトを開き直すとJarファイルのダウンロードを行い,ライブラリとしてプロジェクトに追加します。ダウンロード方式の場合,Jarファイルはプロジェクトの外<HOME>/.gradleにあるため,図8のようにAndroid Studioでは外部ライブラリ(External Library)として認識されます。

Jarファイルはインターネット上のMavenリポジトリからダウンロードしてくるので,職場のPCなどファイアーウォール内で作業する場合は,第2回で示したようにAndroid Studioにプロキシ設定を行っておいてください。

Gradle自体にもプロキシの設定があります。Android Studio経由でGradleを実行する場合は,Android Studioのプロキシ設定が引き継がれるようですが,コマンドラインからGradleを利用する場合は,その限りではありません。コマンドラインからGradleを利用する事もあるので,念のためGradleのプロキシ設定も行っておきましょう。

Gradleのプロキシ設定は,GradleのUser Guideにあるように <HOME>/.gradle/gradle.properties に対して行います。リスト3gradle.propertiesにプロキシ設定を行った例です。

リスト3 <HOME>/.gradle/gradle.properties

systemProp.http.proxyHost=proxy.example.com
systemProp.http.proxyPort=8080

設定の優先度は,以下の通りでした。

gradle.properties「Preferences / HTTP Proxy」

build.gradleを変更するたびにプロジェクトを開き直すのが煩わしいのですが,一応この方法でAndroid Studioの設定に反映させることができます。⁠一応」と付けたのにはワケがありまして,v0.1.2で試した限りでは次のような問題がありました。

testCompile,runtimeなどのスコープ指定が効かない(無視される)
GradleのUser GuideによるとMavenのようにライブラリのスコープを設定できるのですが,compile以外の指定があるとAndroid Studioへの自動反映がうまくできませんでした。
build.gradleからライブラリ指定を削除してもAndroid Studioに反映されない
ライブラリの追加はできますが,build.gradleから特定のライブラリを削除しても,そのことはAndroid Studioに反映されませんでした(削除されずに残ります⁠⁠。ライブラリのバージョンを変更した場合も同様に,Android Studioでは以前の設定が残り,違うバージョンのライブラリが新規追加されるだけでした。

一見うまく行ってそうですが,このような問題がいろいろあるようです。ちなみに,上記のような状況になった場合は「Project Structre / Libraries」から該当ライブラリを直接削除すれば良いです。

[コラム]Android Studio v0.1.3の場合

v0.1.3からツールバーに「Sync Project with Gradle Files」というアイコンが付きました(メニューバー経由の場合は「Tools → Android → ...⁠⁠。このボタン(以下,同期ボタン)を押すことで,プロジェクトを開き直さなくてもbuild.gradleの変更をProject Structureに反映できるようになりました。

図9 ⁠Sync Project with Gradle Files」ボタン

図9 「Sync Project with Gradle Files」ボタン

何回か試してみましたが,いまいち反応が鈍いようで,うまくライブラリに反映されず何度か同期ボタンを押すことで反映されるということがありました。またbuild.gradleに間違いがある状態で同期ボタンを押すと,図10のようなエラーが出る場合がありました。

図10 Gralde Filesの同期失敗エラー

図10 Gralde Filesの同期失敗エラー

詳細メッセージの内容はエラーの状況によって異なります。

こうなるとちょっとお手あげなのですが,ビルドボタンを押すことで何かがリセットされるのか,その後同期処理を復帰することができました。

図11 ビルドボタンでGradleのエラーをリセット

図11 ビルドボタンでGradleのエラーをリセット

また,v0.1.2以前では無視されるだけだった build.gradledependencies での testCompileruntime といったスコープ指定がエラーになりました。

図12 v0.1.3ではtestCompile指定がエラーになる

図12 v0.1.3ではtestCompile指定がエラーになる

それと,はっきりとした確証は得ていませんが,Gradleのプロキシ設定にAndroid Studioの設定が反映されず,<HOME>/.gradle/gradle.propertiesの値だけを参照している様子が見られました。⁠念には念を」という意味でもgradle.propertiesは準備しておいたほうが良いのかも知れません。

著者プロフィール

今井勝信(いまいまさのぶ)

システムエンジニア。日本ユニシス株式会社所属。仙台在住。

Android開発はまったくやったことがないけれどIntelliJ IDEAが大好き。

Twitter: @masanobuimai