これは、Codemagic CI/CDを使ってAndroidのネイティブアプリを構築するための入門ガイドです。2021年6月 に Souvik Biswas が執筆・更新いたしました。
本記事では、Codemagic CI/CDでAndroidネイティブプロジェクトを構築する ためのcodemagic.yamlファイルの設定方法をご紹介いたします。codemagic.yaml`ファイルが導入されて以来、ビルド構成をより整理し、単一のファイルだけですべてのワークフローを管理することがとても簡単になりました。このファイルはバージョンコントロールにコミットすることができ、Codemagic UIからビルド中に自動的に検出されます。
Codemagicには、AndroidやiOSのネイティブアプリをUIから直接ビルドする機能はありませんが、ネイティブアプリをビルドするためのcodemagic.yaml
ファイルを簡単に設定できます。本記事では、Codemagicで Androidネイティブ プロジェクトをビルドするために、codemagic.yaml
ファイルを設定する方法をご紹介いたします。
理解を深めるために本記事を読み進めることをお勧めいたしますが、すでに
codemagic.yaml
ファイルのご使用経験がある方は、Androiネイティブプロジェクト用の YAMLテンプレート をこちらから入手できます。
それでは、Codemagic CI/CDを使って、Androidネイティブアプリに向けてCI/CDをいかに簡単に設定できるのかを手順を追ってご説明いたします。
Androidの継続的インテグレーション:Codemagicを使って始めましょう
あなたのAndroidネイティブプロジェクトが、バージョンコントロールシステムを使ってコードホスティングプラットフォーム(GitHub、Bitbucket、GitLabなど)にアップロードされていることをご確認ください。
- Codemagicにログインします。 まだユーザーでない方は、サインアップしてください。
2.「アプリケーション」ページで、アプリケーションの追加をクリックします。
-
使用するGitプロバイダーを選択します(または、リポジトリのクローンURLを使って追加する場合は、その他(Other)を選択します)。
-
次に、統合を承認する をクリックして、Codemagicを承認します。選択したGitプロバイダーの承認がお済みの場合は、その代わりに次に、レポジトリを選択(Next: Select repository) を選択してください。
GitHubをGitプロバイダーとして使用している場合は、リポジトリを選択する前に追加ステップが1つあり、GitHubアプリをインストール(Install GitHub App) をクリックして統合をセットアップします。GitHubアプリ統合の設定についての詳細は、こちらをご覧ください。
-
ここで、リポジトリを選択(するか、その他を使用している場合はクローンURLを追加)し、プロジェクトタイプを選択して、終了して、アプリケーションを追加(Finish: Add application) をクリックします。
-
プロジェクトの設定画面が表示されます。ここでは、構成ファイルが見つかりません(No configuration file found) という文が表示されますが、これは、まだプロジェクトに
codemagic.yaml
ファイルを追加していないためです。また、ドキュメントへのリンクもありますので、
codemagic.yaml
を使ってAndroidプロジェクトを始める際の参考にしてみてください。
Androidのワークフロー例
Androidのワークフロー例であるcodemagic.yaml
はこちらから入手できます。この例のYAMLファイルには多くの設定が含まれていますので、必要に応じて自由に変更してください。
シンプルなAndroidのワークフローの基本構造は次のようなものです:
workflows:
simple-workflow:
name: Native Android
max_build_duration: 60
scripts:
- name: Run tests
script: ./gradlew test
- name: Build debug apk
script: ./gradlew assembleDebug
artifacts:
- app/build/**/outputs/**/*.apk
publishing:
email:
recipients:
- sbis1999@gmail.com
上記の例では、simple-workflow
が ワークフローID で、Native Android
が ワークフロー名 となります。この2つの名前は、プロジェクトに適したものに変更できます。
このシンプルなワークフローは、Androidアプリのデバッグビルドを生成するのに役立ちます。
YAMLに深く飛び込む
それでは、codemagic.yaml
ファイルを詳しく見て、このファイルが持つ本当の力を理解しましょう。
スクリプト
Androidプロジェクトで定義されたローカルのユニットテストを実行するには、YAMLファイルのscripts
セクションに以下を追加します:
./gradlew test
Running instrumented unit tests:
./gradlew connectedAndroidTest
また、インストルメント化ユニットテスト(物理デバイスやエミュレータを使用して行う単体テスト)を実行するには、Androidエミュレータ を起動する必要があります。次のコマンドを追加します:
emulator -avd emulator > /dev/null 2>&1 &
このコマンドの最後に&
をつけることで、エミュレータを バックグラウンド で動作させることができます。そうしない場合、emulator
コマンドがターミナルをブロックし、それ以降のコマンドが実行できなくなります。> /dev/null 2>&1
を使用すると、このコマンドのすべての出力を無視することができます。
ヒント: エミュレータの起動には多少時間がかかるため、このコマンドはスクリプトの最初に追加したほうがよいでしょう。
デバッグモードでアプリをビルド:
./gradlew assembleDebug
成果物
生成された .apk ファイルは、成果物(artifacts)
にそのパスを追加することで取得できます。通常、パスは次のようになっています:
artifacts:
- app/build/**/outputs/**/*.apk
公開
ビルドのレポートと生成された成果物を メール で受け取るには、次のように指定します:
publishing:
email:
recipients:
- name@example.com # enter your email id here
公開 についての詳細は、こちらのリンクをご参照ください。
Androidプロジェクトをリリースビルド用にセットアップする
まず、リリースビルドを生成するためにコード署名を設定しなければなりません。
キーストアの生成
まだキーストアを作成していない場合は、ターミナルから次のコマンドを使ってキーストアを生成できます。
keytool -genkey -v -keystore keystore_name.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
プロジェクトの構成
以下の手順で、リリースビルドに向けてプロジェクトの準備をします:
-
Android Studio でプロジェクトを開きます。
-
プロジェクトビュー に切り替えます。
-
プロジェクトのルートフォルダ内に、
key.properties
という新しいファイルを作成します。 -
このファイルに以下を追加します:
storePassword=<enter keystore password> keyPassword=<enter key alias password> keyAlias=<enter key alias name> storeFile=<enter .keystore file path>
角括弧とその中身を適切な値に置き換えてください。 -
誤ってこのファイルをコミットしてしまわないように、ファイルを保存して
.gitignore
に追加します。 -
次に、Androidビュー に切り替えて、アプリレベルの
build.gradle
に移動します。 -
このファイルに以下を追加します:
def keystorePropertiesFile= rootProject.file("key.properties") def keystoreProperties = new Properties() keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) // Add above this line android {
-
signingConfigs を追加します:
signingConfigs { config { keyAlias keystoreProperties['keyAlias'] keyPassword keystoreProperties['keyPassword'] storeFile file(keystoreProperties['storeFile']) storePassword keystoreProperties['storePassword'] } }
-
buildTypesリリース内に、以下を追加します:
buildTypes { release { //... signingConfig signingConfigs.config } }
コード署名用にYAMLを修正
ビルドに署名するには、keystore ファイルが必要です。これにアクセスするには、key.properties
ファイルも必要です。
key.properties
ファイルを.gitignore
に追加したので、Codemagicでのビルド中には利用できません。そのため、機密情報をすべて暗号化し、それを codemagic.yaml
ファイルに追加して key.properties
ファイルを生成し、今度はそれを使って .keystore
ファイルのロックを解除できます。
以下の手順で、機密情報を暗号化します:
-Codemagicでご自分のプロジェクト 設定 に移動します。
-ロック アイコンをクリックします。
-ここにファイルを ドラッグ&ドロップ するか、値を入力 して、暗号化されたバージョンのファイルを生成できます。
ここで、リリースビルド用にrelease-workflow
という新しいワークフローを作成し、以下を追加します:
release-workflow:
name: Native Android
max_build_duration: 60
environment:
vars:
CM_KEYSTORE: # Add encrypted keystore file
CM_KEYSTORE_PASSWORD: # Add encrypted keystore password
CM_KEY_ALIAS_PASSWORD: # Add encrypted alias password
CM_KEY_ALIAS_USERNAME: # Add alias name
scripts: # Add the build configurations here
artifacts:
- app/build/**/outputs/**/*.apk
publishing:
email:
recipients:
- sbis1999@gmail.com
それでは、ビルドスクリプトを定義してみましょう。
まず、.keystore
ファイルを復号し、key.properties
ファイルを生成します。
scripts:
# ...
- |
# set up release keystore
echo $CM_KEYSTORE | base64 --decode > /tmp/keystore.keystore
cat >> "$CM_BUILD_DIR/key.properties" <<EOF
storePassword=$CM_KEYSTORE_PASSWORD
keyPassword=$CM_KEY_ALIAS_PASSWORD
keyAlias=$CM_KEY_ALIAS_USERNAME
storeFile=/tmp/keystore.keystore
EOF
その後、通常通りにテストを追加し、以下のコマンドでリリースビルドを生成できます:
./gradlew assembleRelease
これで、アプリのリリースビルドを生成するためのセットアップが正常に完了しました。
Google Playストアへのリリース
Codemagicがあなたのアプリを直接 Google Play Store に公開するのを許可する場合、Google Play APIを使用してアクセスを設定する必要があります。
注意: 最初のバージョンのアプリを手動でGoogle Playストアにアップロードする必要があります。Codemagicが生成した成果物から、
app-release.apk
ファイルをダウンロードして、Playストアにアップロードできます。
サービスアカウントの作成
あなた個人のユーザー認証情報を提供せずに、Codemagicを使ってAPIにアクセスするには、サービスアカウントを設定する必要があります。
-
Google Play Consoleにアクセスします。
-
「設定」>「開発者アカウント」>「APIアクセス」 を選択し、リンクするプロジェクトを選択 をクリックします。
- ご利用規約のダイアログボックスで「同意します(I agree)」をクリックします。
- APIアクセス ページで、サービスアカウントセクションの 新規サービスアカウントの作成(Create new service account) をクリックします。
- ダイアログボックスが表示されます。最初のステップで提示された Googleクラウドプラットフォーム へのリンクをクリックします。
- これにより、サービスアカウントの Googleクラウドプラットフォーム につながります。画面上部のドロップダウンメニューで「Google Play Android Developer」が選択されていることをご確認ください。次に、サービスアカウントの作成(CREATE SERVICE ACCOUNT) をクリックします。
- ステップ1では、サービスアカウント名(Service account name) と 説明(description) を入力する必要があります。次に、作成(CREATE) をクリックします。
- ステップ2では、ドロップダウンメニューから役割(Role) を選択する必要があります。サービスアカウント > サービスアカウントユーザーを選択します。次に、 続ける(CONTINUE)をクリックします。
- ステップ3では何も入力する必要はありません。下部の 完了(DONE) をクリックするだけです。
- Googleクラウドプラットフォーム内に新しいサービスアカウントが表示されますが、それに関連するキーはありません。
-
新しいキーを生成するには、アクション セクションで3つのドットをクリックし、キーの管理(Manage keys)」を選択します。
-
キー(Keys) ページで、キーの追加 をクリックし、新規キーの作成(Create new key) を選択します。
- キータイプ を
JSON
のままにします。作成(CREATE) をクリックします。
- これにより、このサービスアカウントの秘密鍵がダウンロードされます。安全な場所に保管しておいてください。また、このキーは Codemagic から自動公開を設定する際にも必要となります。
- サービスアカウントの Google Play Console に戻ります。作成した名前で新しいサービスアカウントが表示されているのがわかります。アクセス許可(Grant access) をクリックします。
- アプリのアクセス許可(App permissions) タブで、アクセスを許可したいアプリケーションを追加します。アプリのアクセス許可についてはデフォルトの設定のままで、適用(Apply) をクリックします。アカウントのアクセス許可(Account permissions) タブでは、デフォルトの選択のまま、ユーザーを招待する(Invite user) をクリックします。
これでGoogle Play Consoleのサービスアカウントの設定は完了です。
Codemagicでの自動公開の設定
Codemagicを使ってアプリのGoogle Playへの公開を自動化するには、サービスアカウントを接続する必要があります。
-
プロジェクトディレクトリ内の
codemagic.yaml
ファイルに移動します。 -
YAMLファイルの
publishing
セクション内で、以下を使ってGoogle Playのサポートを追加できます:publishing: email: recipients: - name@example.com # Add the following to the script: google_play: credentials: <Encrypted file> track: <Name of the track>
-
先にダウンロードしたJSONファイルを暗号化して、
credentials
変数にセットする必要があります。CodemagicのUIからプロジェクト設定(project settings) にアクセスして、ファイルを暗号化できます。次に、変数を暗号化(Encrypt variables) ボタンをクリックして、ファイルをドラッグ&ドロップするだけです。生成された暗号化済みの文字列をコピーして、
credentials
変数に設定します。 -
track
変数を、アプリを公開するGooglePlayの宛先トラックに設定します。
これで、Codemagicを使ってGoogle Playストアにアプリを公開する準備が整いました。ビルドの開始方法については、次のセクションにお進みください。
CodemagicでのAndroidプロジェクトの構築
Codemagicでビルドを開始する前に、codemagic.yaml
ファイルをバージョンコントロールシステムにコミットしていることを確認してください。
以下の手順でビルドを開始します:
-
プロジェクト設定に進み、最初のビルドを開始する(Start your first build) をクリックします。
-
ワークフローを選択し、新規ビルドを開始(Start new build) をクリックします。
これにより、Androidネイティブプロジェクトの新規ビルドが開始されます。
おめでとうございます! Codemagic CI/CDでの最初のAndroidビルドが完了しました!🎉
結論
Codemagicは、Flutterアプリのみに特化した公式CI/CDソリューションとしてスタートしましたが、今ではすべてのモバイルプロジェクトを最速のCI/CDに迎え入れております。Codemagic CI/CDをお使いいただくと、Android、iOS、React Native、Flutterのアプリを簡単にビルド、テスト、公開できます。
このように、codemagic.yaml
ファイルを使ってCodemagicで Androidネイティブ アプリを構築するのはとても簡単です。また、YAMLを使うことで、ワークフローの管理がとても簡単になり、ビルド構成をより整理しやすくなるという利点も追加されます。さらにこれは、Codemagicでビルドを開始する際に、バージョンコントロールシステムから自動的に検出されます。
役に立つリンクと参考資料
-Androidコード署名 についての詳細はこちらをご覧ください。
-サンプルプロジェクトのGitHubリポは[こちら]((https://github.com/sbis04/tasks_demo)です。
Souvik Biswas は、情熱的なモバイルアプリ開発者です(AndroidとFlutter)。彼はこれまでの歩みの中で、数多くのモバイルアプリを手がけてまいりました。GitHubでのオープンソース貢献が大好きです。彼は現在、Indian Institute of Information Technology Kalyaniでコンピューターサイエンスとエンジニアリングの技術学士号の取得を目指しています。また、Medium - Flutter CommunityでFlutterの記事も執筆しております。