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件) を見る