NRIネットコム社員が様々な視点で、日々の気づきやナレッジを発信するメディアです

注目のタグ

    AWS CodeBuildを使ってAndroidアプリをビルドしてみた

    本記事は  【Advent Calendar 2024】  22日目の記事です。
    🌟🎄  21日目  ▶▶ 本記事 ▶▶  23日目  🎅🎁

    はじめに

    こんにちは。クラウド事業推進部の松野です。 普段は主にモバイルアプリの開発・運用を行っています。

    今回はアプリのビルドサービスを試してみようと思います。
    アプリのビルドを自動化している方は多いと思うのですが、私はあまり利用してきませんでした。
    バイナリを作成する頻度が低いのもあって、普段は手動で対応することがほとんどです。

    Jenkinsは以前使ったことがあるのですが、ほかもいろいろ試してみたいと思っていたので、 今回はモバイルアプリ以外で利用したことのあるCodeBuildでAndroidアプリをビルドしてみました。

    AWS CodeBuildとは?

    AWSが提供するフルマネージドなビルドサービスです。
    コードのビルドやテストを自動でやってくれます。
    従量課金制で必要最小限のコストで利用できます。

    AWS CodeBuild(継続的スケーリングによるコードのビルドとテスト)| AWS

    CodeBuildプロジェクトの作成

    CodeBuildでアプリをビルドするための設定をしていきましょう。

    ソースプロバイダの選択

    CodeBuildのソースプロバイダはGitHub、 Bitbucket、 GitLab、S3、CodeCommitから選択可能です。
    私はGitHubにアプリのソースを配置しておいたので、GitHubで設定しました。

    ビルド環境の設定

    AWSマネージドの環境にはandroid-sdkは入っていませんので、インストールする必要があります。 Dokerイメージを設定できるので、今回はDockerイメージを使いました。 自分で作ってもいいですし、とりあえずビルドしてみるならDockerHubで探して利用でもいいと思います。

    Dockerイメージを使う場合は「環境イメージ」を「カスタムイメージ」に設定します。 「コンピューティング」はカスタムイメージに設定するとEC2しか使えません。 環境タイプ以降の設定は利用するDockerイメージに合わせて設定してください。

    ちなみにMacの環境は選べないので、iOSアプリをビルドする場合は別途EC2などにMacのサーバーを立てる必要があります。

    Buildspecの記載

    Buildspecとは、ビルド実行時のビルドコマンドや設定を記載するYAML形式のファイルです。
    CodeBuildでは 今回はビルドしてapkファイルを作成までを実施しようと思いますので、以下のように記載してみました。

    version: 0.2
    
    phases:
      build:
        commands:
          - ./gradlew assembleRelease
    artifacts:
      files:
        - app/build/outputs/apk/debug/app-debug.apk

    Dockerイメージを利用しない場合はandroid-sdkのインストールをするように記載します。
    以下ドキュメントを参考にカスタマイズしてみてください。 docs.aws.amazon.com

    アーティファクトの設定

    できあがったapkの置き場所を設定します。 私はS3バケットのapkフォルダ配下に保存するように設定しました。

    これ以外の設定はこだわりがなければデフォルトでよいです。 そのままプロジェクトを作成します。

    CodeBuildでビルドしてみる

    環境ができたらいざビルド! 「ビルドを開始」を押下してビルドしてみましょう。
    ステータスが最終的に「成功」となれば完了です。

    今回の設定であれば、「ビルド詳細」タブのアーティファクトにあるS3バケットにapkファイルが作成されます。
    指定したフォルダ内でapp/build/outputs/apk/debug/app-debug.apkで作成されていました。

    ちなみに

    今回ソースプロバイダをGitHubにしていますが、それならGithub Actionsを使う方が簡単です。
    iOSもワークフローのYAMLを記載だけでビルドできるので、Mac環境を別途作らなくても問題ありません。

    例えばAndroidで検索したらAndroid向けのワークフローが出てきますので、これをベースにカスタマイズしていけばよいです。

    CodeBuildで実施した内容と同じことをするなら以下のようになります。

    name: Android CI
    
    on:
      push:
        branches: [ "main" ]
      pull_request:
        branches: [ "main" ]
    
    jobs:
      build:
    
        runs-on: ubuntu-latest
    
        steps:
        - uses: actions/checkout@v4
        - name: set up JDK 17
          uses: actions/setup-java@v4
          with:
            java-version: '17'
            distribution: 'temurin'
            cache: gradle
    
        - name: Grant execute permission for gradlew
          run: chmod +x gradlew
          
        - name: Build with Gradle
          run: ./gradlew assembleRelease
    
        - name: Upload APK
          uses: actions/upload-artifact@v4
          with:
            name: app-debug.apk
            path: app/build/outputs/apk/debug/app-debug.apk

    まとめ

    CodeBuildはモバイルアプリ向きではないのでもっと大変かと思っていましたが、Dockerイメージを使えるので想定より簡単にビルドできました。
    ただandroid-sdkは用意しないといけないですし、iOSをやろうと思うとMacのサーバーの準備も要るので、やはりGithub Actionsなど他サービス使うほうがいいですね。
    AWSサービスとの連携はCodeBuildのほうがしやすいので、AWSを利用しているプロジェクトの場合はCodeBuildを利用しても良いと思います。
    もっとモバイルに特化したサービスもあるようなので、今後も別のサービスやもっと運用に近い設定をいろいろ試してみようと思います。

    参考

    https://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/welcome.html https://aws.amazon.com/jp/blogs/mobile/automatically-build-your-android-app-with-aws-codebuild/