Tips : Android Studio でGradleビルド
Google I/O 2014でWearにも対応したAndroid Studioですが、Versionも0.8.1(今日現在)とだいぶリリースに近づいた感があります。 Android StudioではIntelliJ IDEAはあくまでも皮で、Gradleが肝。 Androidアプリのビルドシステムを、Gradleに完全移行する宣言をしているGoogleですが、着実に歩を進めているようです。
ということで自分のアプリもGradleに移行してみました。 細かいところは割愛して、自分なりに気になったところだけメモしておきます。 (ほとんどAndroid Developerに書いてあるので、ほぼ翻訳です。)
公式なドキュメントは下記にありますので、興味のある方はこちらへ。
AntプロジェクトのImport
EclipseからExportする記事などもありますが、今はAndroid StudioでImportすることが推奨のようです。
Android Studioのメニューから、File > Import ProjectでAntプロジェクトのルートを指定します。

ポップアップで何か聞かれるかもしれないですが、そのまま進めても大丈夫です。
Appのツリー構成
Gradleビルドシステム下のアプリプロジェクトの構成は、Android Developerにあるように大きく変わっています。

ADT以下でのアプリと同等の単位がapp/になり、それと並列にModuleが扱える構造になっています。
Android Library ProjectなどはModuleとしてアプリプロジェクト以下で1つのプロジェクトとして扱えるようになっています。
app/以下の構造は下記のとおりです。
- ソース:app/src/main/java/
- リソース:app/src/main/res
- マニフェスト:app/src/main/AndroidManifest.xml
- ビルドスクリプト:app/build.gradle
Android Studioでは、フォルダの色が青がMainのソース、緑がTestのソースになります。
Build Variants
この辺からGradleビルドシステムのパワーが発揮されてきます。
GradleではConfigurationで複数のAPK出力ができるようになりました。 Build TypeとProduct Flavorという2つの種類が扱えるようになっており、(Build Type) x (Product Flavor)だけの数のビルドパターンを組むことができます。
アプリプロジェクト内で、どのパッケージを使ってAPKをつくるか、どのリソースを組み込むかなど、細かいConfigurationをbuild.gradleに記述することができ、ディレクトリを分けて管理・実行することができます。 例えばβ用とRelease用を分けたり、無料版、有料版を分けたりする場合にとても有用です。
最初にプロジェクトをImportもしくは作成したときに、build.gradleにRelease用のスクリプトが生成されていると思います。
apply plugin: 'android' android { ... buildTypes { release { runProguard true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } }
こちらの記事が詳しく記載しているので参考になりますが、このbuildTypes以下にConfigurationを加えることで、Build Typeを追加していけます。

Build TypeやProduct Flavorを追加すると、Android Studioでは左下のBuild Variantsにその組み合わせた種類のぶんだけ表示が追加され、実行できるようになります。
dependenciesによる依存解決
ADTでは、Mavenを使えるツールが出回っていたようですが、GradleではMaven Repositoryを利用できます。 Android DeveloperのSnippetを拝借すると、下記のように指定できます。
dependencies {
// Module dependency
compile project(":lib")
// Remote binary dependency
compile 'com.android.support:appcompat-v7:19.0.1'
// Local binary dependency
compile fileTree(dir: 'libs', include: ['*.jar'])
}
デフォルトではapp/libsは空ですが、jarを配置すれば読み込んでくれるように、compile fileTree(dir: 'libs', include: ['*.jar'])が元から記載されていると思います。
また、compile project(":lib")でModuleの依存関係も解決できます。
外部ライブラリを利用する場合は、Maven Repositoryの情報をgroup:name:versionというフォーマットで記載することで解決できます。
またversionは、3.5のように固定するだけでなく、メジャーバージョンが3の最新が欲しいというときは3.+と記載することで常に最新のライブラリを利用できるようになります。
Signing Configuration
最後に、Release用に必ず利用する署名についてです。
署名はsigningConfigsを追記することで利用するKeystoreやパスワードの指定ができます。
signingConfigs {
release {
def console = System.console();
keyAlias 'YourKey'
keyPassword 'YourKeyPassword'
storeFile file('yourkeyname.keystore')
storePassword 'YourStorePassword'
}
}
storeFileのfile()のパスは何も指定しないときはapp/直下を指しています。Groovyに従った記述で好きなところを指定できます。
keyPasswordとstorePasswordを直接記載したくなかったので、コンソールから入力するようにしたのですが、Android Studioを利用していると、Gradle syncしたときにCannot invoke method readLine() on null objectと怒られます。
Console()はコマンドライン用のスクリプトのようで、Android Studioでは解決できないようです。 他にも回避策があるかもしれませんが、自分は下記のようにnullチェックを入れています。
signingConfigs {
release {
def console = System.console();
keyAlias 'YourKey'
if (console != null) {
keyPassword console.readLine("\nKey password: ");
}
storeFile file('yourkeyname.keystore')
if (console != null) {
storePassword console.readLine("\nKeystore password: ");
}
}
}
Releaseビルドのときは、コマンドラインから、
$ ./gradlew assembleRelease --no-daemon
とすることで、パスワード入力をしてビルドをすることが可能です。

Android StudioではじめるAndroidプログラミング入門
- 作者: 掌田津耶乃
- 出版社/メーカー: 秀和システム
- 発売日: 2014/04
- メディア: 単行本
- この商品を含むブログ (2件) を見る

Gradle徹底入門 次世代ビルドツールによる自動化基盤の構築
- 作者: 綿引琢磨,須江信洋,林政利,今井勝信
- 出版社/メーカー: 翔泳社
- 発売日: 2014/11/05
- メディア: 大型本
- この商品を含むブログ (2件) を見る