Travis CIでのAndroidアプリケーションの構築

この記事では、Travis CIでオープンソースのAndroidプロジェクト(Maven)を無料でビルドする方法を紹介したいと思います。



何がありますか?





何を取得したいですか?



進捗レポートをメールで送信して、コミット時にプロジェクトを無料で組み立てます。 同時に、エミュレーターで統合テストを実行し、追加のSDKコンポーネント(アドオン、エクストラなど)を使用します。



これをどのように達成しますか?



基礎として、GitHubで既製のスクリプト( https://github.com/serso/android-common)を使用します

Travis CIがビルドに使用するメインスクリプトは.travis.ymlです。

language: java jdk: oraclejdk7 before_install: - chmod +x $PWD/.travis_install_android.sh - $PWD/.travis_install_android.sh - export ANDROID_HOME=$PWD/android-sdk-linux - export PATH=${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools - chmod +x $PWD/.travis_install_android_dependencies.sh - $PWD/.travis_install_android_dependencies.sh - chmod +x $PWD/.travis_start_emulator.sh - $PWD/.travis_start_emulator.sh before_script: - chmod +x $PWD/.travis_wait_for_emulator.sh - $PWD/.travis_wait_for_emulator.sh script: mvn install -Pwith-tests
      
      





プロジェクトの基本言語-Java、次にjdkバージョンを示します-私はOracleのJDK 7を使用します。

ビルドを開始する前に、Android SDKとそのコンポーネント(API、エクストラ、アドオンなど)をインストールする必要があります。 bashスクリプトの.travis_install_android.sh.travis_install_android_sdk.shがこれを担当します。 次に、いくつかのAndroidアーティファクトをローカルのMavenリポジトリ-.travis_install_android_dependencies.shスクリプトにアップロードし、エミュレーター-.travis_start_emulator.shを実行して、 .travis_wait_for_emulator.shが開始されるのを待つ必要があります。



Androidのインストール


 #!/bin/sh # Script installs Android SDK sudo apt-get update -qq if [ `uname -m` = x86_64 ]; then sudo apt-get install -qq libstdc++6:i386 lib32z1; fi wget -O android-sdk.tgz http://dl.google.com/android/android-sdk_r22.0.4-linux.tgz tar xzf android-sdk.tgz export ANDROID_HOME=$PWD/android-sdk-linux export PATH=${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools sudo apt-get install expect chmod +x $PWD/.travis_install_android_sdk.sh $PWD/.travis_install_android_sdk.sh
      
      





説明:64ビットアーキテクチャの場合、アプリケーションのリストを更新します-追加のパッケージをインストールします( ここの説明を参照 )。 次に、ポンプを使用してAndroid SDKを解凍し、環境変数を設定します(bashスクリプトの環境変数は実行後にリセットされるため、.travis.ymlで再度設定する必要があります)。



Android SDKコンポーネントをインストールする


 #!/usr/bin/expect -f # Script installs Android SDK components spawn android update sdk --filter tools,platform-tools,build-tools-19.0.0,extra-android-support,android-17,sysimg-17,addon-google_apis-google-17,android-19,sysimg-19,addon-google_apis-google-19,addon-google_apis-google-19,extra-google-play_billing,extra-google-m2repository,extra-google-analytics_sdk_v2,extra-google-gcm,extra-google-google_play_services,extra-google-play_apk_expansion,extra-android-m2repository --no-ui --force --all expect "Do you accept the license *:" send -- "y\r" expect "Do you accept the license *:" send -- "y\r" expect "Do you accept the license *:" send -- "y\r" expect "Do you accept the license *:" send -- "y\r" expect "Do you accept the license *:" send -- "y\r" expect "Do you accept the license *:" send -- "y\r" expect "Do you accept the license *:" send -- "y\r" interact # WORKAROUND: for some reason we need to download following extras separately (otherwise we will get PkgVersion=2 instead of PkgVersion=2.0.0) spawn android update sdk --filter extra-google-admob_ads_sdk,extra-google-play_licensing --no-ui --force --all expect "Do you accept the license *:" send -- "y\r" interact
      
      





説明:必要なSDKコンポーネントをインストールしようとしています。 ここにちょっとしたトリックがあります-android update sdkは、いくつかのコンポーネントのライセンスに同意することを提案します。 応答できなくなり(スクリプトはリモートで実行されます)、spawnコマンド(このスクリプトを呼び出す前に慎重にインストールされたコマンド)を使用して自動的に応答する必要があります。

なんらかの理由で、アンドロイドはadmobコンポーネントとplay_licensingコンポーネントを別々に収縮させます。 これらを最初の更新に追加すると、PkgVersion = 2.0.0の代わりにPkgVersion = 2になりますが、これはあまり適していません(この変数はMavenリポジトリ内のアーティファクトのバージョンを担当しているため)。



Mavenリポジトリーに成果物をインストールする


 #!/bin/sh # Scripts installs Android SDK artifacts in local Maven repository git clone git://github.com/serso/maven-android-sdk-deployer.git cd ./maven-android-sdk-deployer/ git checkout tags/api-19 mvn install -P4.2 cd ..
      
      





説明:api-19タグを使用してMaven Android SK Deployerフォークをダウンロードし、Androidバージョン4.2用のアセンブリを実行します(4.4ではまだテストしていません)。 オリジナルの代わりにフォークをポンプするのはなぜですか? オリジナルにはタグがないため、プロジェクトコードに変更を加えるとアセンブリが壊れる場合があります。



エミュレーターの起動


 #!/bin/sh # Scripts starts Android emulator with name 'Default' echo no | android create avd --force -n Default -t android-17 --abi armeabi-v7a emulator -avd Default -no-skin -no-audio -no-window &
      
      





説明:Defaultという名前の仮想デバイスを作成し、別のプロセスで実行します。



次に、Travisはプロジェクトのテストインストールを開始します。テストインストールの最後にbefore_scriptフェーズが呼び出され、エミュレータの開始を待ちます。



組立


最後のコードは、アセンブリの起動です。 私の場合、with-testsプロファイルを使用してmvn installを呼び出すだけで、統合テストが実行されます。

 script: mvn install -Pwith-tests
      
      







おわりに



プロジェクトが正常に構成された後、各コミットによりアセンブリが起動され、その後メールに通知されます。 例として、 Travis CIで動作するアセンブリを含むAndroid Common Libraryプロジェクトを見ることができます。

質問や提案がある場合-コメントを歓迎します。 ご清聴ありがとうございました。



All Articles