AndroidコマンドでGradleプロジェクトを作る
最近好きなのは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
を使ってビルドしてくれるはず。
すごい初歩的なことだけど、こういったこと確認して納得できると楽しい。