虹とトルネード

趣味のこととか少し技術的なこととかメモします

AndroidコマンドでGradleプロジェクトを作る

f:id:caad1229:20150422110351p:plain 最近好きなのはGradleAndroidツールはGradleをサポートしている。 サクッとプロジェクトを作ってテストアプリとか作れるのはいい。

IntelliJ IDEAAndroid Studioから作ったほうが楽だと思う。 でもコマンドからでも作れるのをメモしておきたい。それにGradleを理解するのに役に立った。実験的な要素も含んだメモ。

ちなみに自分はIntelliJを使っているのだが、それでプロジェクト作るとマルチプロジェクトになるからIDEから作るのはちょっと好きではないのだ。

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を使ってビルドしてくれるはず。

すごい初歩的なことだけど、こういったこと確認して納得できると楽しい。