BitriseでAndroidビルドをするときにハマった4つのポイント
仕事で CI サービス Bitrise を使うことになり、Android のビルドを通すまでに何度もつまずきました。ドキュメントどおりにやってもエラーが続いたので、ハマったポイントと解決策を4つ残しておきます。
つまずき1: NDK を使っているとビルドが通らない
アプリが NDK を利用している場合、WorkFlow で SDK のインストールと合わせて NDK のインストールも行う必要がありました。SDK だけ入れて NDK を忘れると、ビルド時に見つからず失敗します。
つまずき2: build.gradle に署名設定が書いてある
build.gradle にすでに署名(signing)設定を書いている場合、Bitrise の「Android Sign」ステップと二重になってかみ合いません。署名込みで build.gradle が完結しているなら、Gradle Runner でそのままビルドする方が素直でした。
つまずき3: なぜか SDK インストールで失敗する
SDK インストールのステップが不安定で失敗することがありました。最終的にはビルドを全部 fastlane に寄せて、Bitrise からは lane を呼ぶだけにすることで安定しました。CI 側の個別ステップを減らし、ビルドロジックを fastlane に集約する方針です。
つまずき4: Artifacts で APK が取得できない
ビルドは通るのに Artifacts に APK が出てこない。原因は余計なステップが APK の出力を邪魔していたことでした。不要なジョブ(特に不安定だった SDK インストール)を削り、最小構成にしたら取得できるようになりました。
結果、WorkFlow はこんな見た目に落ち着きました。

落ち着いた bitrise.yml(例)
個人開発でも build.gradle に署名設定を入れているケースは多いと思うので、参考までに最小構成の bitrise.yml を置いておきます(トークン類はすべて環境変数参照です)。
---
format_version: '7'
default_step_lib_source: https://github.com/bitrise-io/bitrise-steplib.git
project_type: android
workflows:
debug-deploy:
steps:
- activate-ssh-key@4.0.3:
run_if: '{{getenv "SSH_RSA_PRIVATE_KEY" | ne ""}}'
- git-clone@4.0.14: {}
- script@1.1.5:
title: Do anything with Script step
inputs:
- content: |
#!/usr/bin/env bash
set -e
set -x
- cache-pull@2.0.1: {}
- gradle-runner@1.9.0:
inputs:
- gradle_task: assembleDebug
- gradlew_path: "$PROJECT_LOCATION/gradlew"
- deploygate--upload-app-bitrise-step@1.0.1:
inputs:
- owner_name: "$DEPLOYGATE_OWNER"
- app_path: "$BITRISE_APK_PATH"
- message: "[$BITRISE_BUILD_NUMBER] Debug Build [$BITRISE_GIT_BRANCH]"
- api_key: "$DEPLOYGATE_API_KEY"
- deploy-to-bitrise-io@1.4.1: {}
- cache-push@2.2.0: {}
- slack@3.1.2:
inputs:
- webhook_url: "$SLACK_URL"
app:
envs:
- opts: { is_expand: false }
PROJECT_LOCATION: "."
- opts: { is_expand: false }
MODULE: app
- opts: { is_expand: false }
VARIANT: ''
trigger_map:
- push_branch: master
workflow: debug-deploy
まとめ
Bitrise の Android ビルドでハマったら、(1) NDK の入れ忘れ、(2) 署名設定の二重定義、(3) ステップの不安定さは fastlane 集約で回避、(4) 余計なステップを削って最小構成に——この4点を疑ってみてください。「ステップを足す」より「削って fastlane に寄せる」方が、結果的に安定しました。