31
32

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Travis CIでAndroidアプリを簡単にビルドしてRobolectricのテストを動かす

Last updated at Posted at 2014-05-22

概要

Travisを使うまでは今までJenkinsを使っていました。テストコードを充実させていくうちにGitHubのPull Requestごとにビルドさせたいという意識が高まり、GitHub pull request builder plugin といったJenkinsプラグインをインストールしようと試みました。
しかしあまりにも設定が面倒なので、Jenkins職人への道は諦めてTravisでCIを回すようにしました。

Travis CI: Building an Android Project (beta)

まだBetaの段階ですがJavaとして.travis.ymlに書かなくてもAndroidとして設定に書けるみたいで、見た感じすごい簡単そうなのでやってみることにしました。

なお、Robolectricの gradle-android-test-plugin が入っていることが前提に進めていきます。

Robolectricでテストする

ドキュメントに書いてありますが、scriptを指定しない時のデフォルトは

gradle build connectedCheck

またはgradlewがある場合

./gradlew build connectedCheck

が実行されるのでエミュレータが立ち上がってしまいます。エミュレータに関する記述が全くないとビルドに失敗するので、Robolectricでテストするために

.travis.yml
script:
  - ./gradlew build test

とするとエミュレータの存在確認が行われなくなり、Robolectricのテストが走るようになります。

.travis.yml

.travis.yml
android:
  components:
    - build-tools-19.0.3
    - android-19
    - extra-android-m2repository
  licenses:
    - android-sdk-license-bcbbd656

env:
  global:
    - TERM=dumb
    - secure: ......
    - secure: ......
    - secure: ......
    - secure: ......

script:
  - ./gradlew build test

componentsはビルドに必要なものを指定します。
licensesにはインストールされるコンポーネントの承諾するライセンスを指定します。これを書いておかないと自動的にライセンスを承諾できずビルドできません。

Travisでリリースビルドを作る

./gradlew build はリリースビルドも作るため、keystoreやパスワードをTravisで入力されるようにする必要があります。
keystoreを含めたりするのはよくないので、そもそもTravisでリリースビルドを作らなければいいわけです。

.travis.yml
script:
  - ./gardlew assembleDebug test

とするとdebugのみビルドされます。これをやると下記の作業をやらなくていいことになります。

暗号化文字列の作成

travis encryptを使って暗号化された文字列を作成します。
travis コマンドが入っていなければRubyGemsを使って gem install travis でインストールできます。

% travis encrypt BUILD_RELEASE_STORE_FILE=foobar.keystore
Please add the following to your .travis.yml file:

  secure: "......"

Pro Tip: You can add it automatically by running with --add.
% travis encrypt BUILD_RELEASE_STORE_PASSWORD=hatsukoi
Please add the following to your .travis.yml file:

  secure: "......"

Pro Tip: You can add it automatically by running with --add.
% travis encrypt BUILD_RELEASE_KEY_ALIAS=foo
Please add the following to your .travis.yml file:

  secure: "......"

Pro Tip: You can add it automatically by running with --add.
% travis encrypt BUILD_RELEASE_KEY_PASSWORD=anoko
Please add the following to your .travis.yml file:

  secure: "......"

Pro Tip: You can add it automatically by running with --add.

--add オプションで自動的に .travis.yml に追加してくれるという機能があるのですが、YAMLが勝手にフォーマットされてインデントが崩れるのでおすすめしません。

.travis.yml にはこんな感じに書きます。

.travis.yml
before_script:
  - echo "storeFile=${BUILD_RELEASE_STORE_FILE}" >> secure.properties
  - echo "storePassword=${BUILD_RELEASE_STORE_PASSWORD}" >> secure.properties
  - echo "keyAlias=${BUILD_RELEASE_KEY_ALIAS}" >> secure.properties
  - echo "keyPassword=${BUILD_RELEASE_KEY_PASSWORD}" >> secure.properties

Gradleの設定

Gradleでビルドする際、secure.properties を参照するようにします。

build.gradle
android {
    signingConfigs {
        release {
            File securePropertiesFile = file('secure.properties')
            Properties p = new Properties()
            p.load(new FileInputStream(securePropertiesFile))
            storeFile file(p.storeFile)
            storePassword p.storePassword
            keyAlias p.keyAlias
            keyPassword p.keyPassword
        }
    }
}

これを書いてしまうとローカルで署名付きのAPKを作成するときにsecure.propertiesが必要になってしまいます。前述のとおり ./gradlew assembleDebug のみ実行して署名付きビルドをつくらなければこんなことしなくてもいいです。

エミュレータを使ったテスト

ちなみにエミュレータを使ったテストをやりたい場合、エミュレータを立ち上げて起動が終わるまで待機するところまで対応していないので.travis.ymlに自分で書く必要があります。

最後に

これでめでたくTravisでAndroidアプリがビルドできていることでしょう。いつでもTravisおじさんを眺めることができます。感動!!

31
32
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
32

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?