はじめに
最近好きなのはGradle
。AndroidツールはGradleをサポートしている。
サクッとプロジェクトを作ってテストアプリとか作れるのはいい。
IntelliJ IDEAやAndroid Studioから作ったほうが楽だと思うのだが、コマンドからでも作れることをメモしておきたい。それにGradleを理解するのに役に立った。実験的な要素も含んだメモ。
ちなみに自分はIntelliJを使っているのだが、それでプロジェクト作るとマルチプロジェクトになるからIDEから作るのはちょっと好きではないのだ。
- ubuntu 14.04
Gradleの導入
Wrapperがあるが、Gradleを使うなら自身のPCにインストールしておいて損はない。
GVMのインストール
様々な方法があるが、自分の場合はバージョン管理も楽だしGVMから。
サイトにあるインストールスクリプトをコピペで終わり。超簡単。
$ curl -s get.gvmtool.net | bash
Gradleのインストール
GradleインストールするならGroovyもインストールしておこうじゃないか。
GroovyってのはjavaライクなGradleで使われている言語。
$ gvm install groovy # groovyをインストール
$ gvm install gradle # gradleをインストール
Project作成
Android SDKのパスが通っているものとする。
で、Androidツールコマンドを使ってGradleのAndroidプロジェクトを作成する。
$ android create project
-gradle -v 1.1.3 # gradleを使用する (バージョン番号指定する)
--target 7 # ターゲット番号(`$ android list target`で確認)
--name hoge # project name
--path hoge # プロジェクトディレクトリ名
-- package com.caad1229.hoge # パッケージ名
--activity MainActivity # アクティビティ名
# Gitでローカルブランチにコミットしておく。後半にちょっと確認したい部分があるので。
$ cd ./hoge
$ git init; git add -A; git commit -a -m "init";
Gradle Android Pluginのバージョン指定はここから。2015年4月現在、ベータを抜かした最新バージョンは1.1.3
。
現在も頻繁にバージョンが変わっている模様。
wrapperでビルド
で、せっかく生成してWrapperによりGradleもはいっているのでgradlew
でビルドしたところエラー orz
$ cd ./hoge
$ ./gradlew build
FAILURE: Build failed with an exception.
* Where:
Build file '/home/hoge/temp/hoge/build.gradle' line: 9
* What went wrong:
A problem occurred evaluating root project 'hoge'.
> Could not create plugin of type 'AppPlugin'.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Total time: 1.703 secs
WrapperされたGradleのバージョンを確認してみると、1.12
のようだ。古い。
$ cat ./gradle/wrapper/gradle-wrapper.properties
#Wed Apr 10 15:27:10 PDT 2013
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=http\://services.gradle.org/distributions/gradle-1.12-all.zip
自分のGradleでビルド
Wrapperを使わずに自分のGradleでビルドする。がこれも失敗する。
$ gradle build
FAILURE: Build failed with an exception.
* Where:
Build file '/home/sasaki/temp/hoge/build.gradle' line: 17
* What went wrong:
A problem occurred evaluating root project 'hoge'.
> Could not find method runProguard() for arguments [false] on BuildType_Decorated{name=release, debuggable=false, testCoverageEnabled=false, jniDebuggable=false, pseudoLocalesEnabled=false, renderscriptDebuggable=false, renderscriptOptimLevel=3, applicationIdSuffix=null, versionNameSuffix=null, minifyEnabled=false, zipAlignEnabled=true, signingConfig=null, embedMicroApp=true, mBuildConfigFields={}, mResValues={}, mProguardFiles=[], mConsumerProguardFiles=[], mManifestPlaceholders={}}.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Total time: 2.536 secs
理由はrunProguard
の名前が1.0.0
以降変わっているのだ(参考)。
なので以下のように修正する。
$ vim ./build.gradle
- runProguard true
+ minifyEnabled true
で、再度挑戦すると成功した。
$ gradle build
: # 省略
check
:build
BUILD SUCCESSFUL
Total time: 3.928 secs
自分のGradleでWrapperしなおす
もし、このプロジェクトを他の人に渡す場合、他の人にもGraleインストールしてくださいという必要がある。が、そんなことしたらGradleのいいところを半分以上捨てているようなもの。環境が変わってもプロジェクト単位で開発環境を保持できるwrapper
があるのがGraldeのすごい魅力的なところだと思う。
Gralde Wrapper
早速wrapperをやってみる。
$ gradle wrapper
:wrapper
BUILD SUCCESSFUL
Total time: 2.826 secs
Wrapperでビルド
今度はgradlew
スクリプトでビルド実行すると成功する。
$ gradle build
: # 省略
check
:build
BUILD SUCCESSFUL
Total time: 3.928 secs
なにがどうなったのか
git
で最初のソースをコミットしているので差分を確認してみる。
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: build.gradle
modified: gradle/wrapper/gradle-wrapper.jar
modified: gradle/wrapper/gradle-wrapper.properties
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gradle/
build/
no changes added to commit (use "git add" and/or "git commit -a")
注目したいのはwrapper
の中身が変わっていること。diff
で確認。
$ git diff gradle/wrapper/gradle-wrapper.properties
: # 省略
-distributionUrl=http\://services.gradle.org/distributions/gradle-1.12-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.3-bin.zip
gradleのバージョンが変わっている。これで他の人が他の環境でgradlew
を実行したら自分と同じ2.3
を使ってビルドしてくれるはず。
おしまい
すごい初歩的なことだけど、こういったこと確認して納得できると楽しい。