1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Flutterアプリ開発の自動化(ビルド@コンテナ、エミュレータ@ホスト) 1. ホスト準備

Posted at

全体の方針

やりたいこと

  • スマホアプリ開発を効率的にしたい → Flutter を採用
  • 商用利用も無料で行いたい → Android Studio は使わず CLI ベースに
  • ホスト環境を汚したくない・開発メンバーで開発環境を統一したい → コンテナ(Docker / Podman)を利用

方針

  • ホストには必要最低限のものだけをインストール
  • Flutter SDK + Android SDK を含んだコンテナを用意し、

環境

  • macOS Sequoia ver. 15.4.1

スクリーンショット 2025-06-21 1.14.22.png


1. ホスト準備の手順

Java JDK 21 のインストール

  echo "📦 Downloading OpenJDK 21 (Adoptium) for $PLATFORM..."

  JDK_URL="https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.1%2B12/OpenJDK21U-jdk_x64_mac_hotspot_21.0.1_12.tar.gz"
  
  TEMP_DIR=$(mktemp -d)
  ARCHIVE_PATH="$TEMP_DIR/jdk21.tar.gz"

  curl -L -o "$ARCHIVE_PATH" "$JDK_URL"
  tar -xzf "$ARCHIVE_PATH" -C "$TEMP_DIR"
  JDK_DIR=$(find "$TEMP_DIR" -type d -name "jdk-21*" | head -n 1)

  mkdir -p "$HOME/java"
  mv "$JDK_DIR" "$HOME/java/"
  echo "✅ JDK installed to $HOME/java/"
  • Android SDK の CLI には Java が必要。
  • 今回は、JDK 21 を Adoptium からダウンロード・展開。

Java の存在確認と PATH 設定

JAVA_DIR=$(find "$HOME/java" -type d -name "jdk-21*" 2>/dev/null | head -n 1)
JAVA_HOME="$JAVA_DIR/Contents/Home"
export JAVA_HOME
export PATH="$JAVA_HOME/bin:$PATH"

# Java 実行可能ファイルが存在しない場合はダウンロードして再設定
if [[ ! -x "$JAVA_HOME/bin/java" ]]; then
  install_openjdk_21
  JAVA_DIR=$(find "$HOME/java" -type d -name "jdk-21*" | head -n 1)
  JAVA_HOME="$JAVA_DIR/Contents/Home"
  export JAVA_HOME
  export PATH="$JAVA_HOME/bin:$PATH"
fi
  • JAVA_HOMEPATH を動的に設定することで sdkmanageremulator の利用を可能に。

Android SDK の CLI ツール確認と導入

SDK_DIR="$ANDROID_SDK_ROOT"
CMDLINE_TOOLS_DIR="$SDK_DIR/cmdline-tools/latest"
export PATH="$JAVA_HOME/bin:$CMDLINE_TOOLS_DIR/bin:$SDK_DIR/platform-tools:$PATH"

# sdkmanager が無い場合は cmdline-tools をダウンロード
if [[ ! -x "$CMDLINE_TOOLS_DIR/bin/sdkmanager" ]]; then
  mkdir -p "$SDK_DIR/cmdline-tools"
  cd "$SDK_DIR/cmdline-tools"
  
  PLATFORM_TAG="mac"
  
  curl -L -o cmdline-tools.zip "https://dl.google.com/android/repository/commandlinetools-${PLATFORM_TAG}-11076708_latest.zip"
  unzip -q cmdline-tools.zip && rm cmdline-tools.zip
  mv cmdline-tools latest
  cd -
fi
  • Android SDK の cmdline-tools ディレクトリの存在確認。
  • 無ければ Google 公式から zip をダウンロードし、自動展開。
  • 環境変数 PATH に必要な bin を追加。

Android SDK(Software Development Kit)

  • Googleが提供するAndroidアプリ開発用のツール群セット。FlutterがAndroidアプリとしてビルド・実行するために必要。
  • FlutterはAndroid Studioなしでも動作するが、その場合でもAndroid SDKのCLIツールがないとビルド・テスト・デプロイができない。

Android SDK Overview

sdkmanager によるライセンス承諾と必要モジュールのインストール

yes | sdkmanager --licenses

sdkmanager \
  "platform-tools" \
  "emulator" \
  "platforms;android-33" \
  "system-images;android-33;google_apis;x86_64"

echo "✅ Initialization complete."
  • Android SDK の CLI 利用にはライセンス承諾が必須 → yes | で自動化。
  • Flutter のビルド・テスト・実機実行に必要な構成(emulator、platform-tools、system-images など)を一括導入。

sdkmanager(Android SDK Package Manager)

  • Android SDKに含まれるCLIツール。SDKの構成要素(emulatorやplatform-toolsなど)を管理・導入するためのユーティリティ。
  • GUIなしでSDKを管理するにはこのツールが必須。Flutterのflutter doctorでもsdkmanagerの存在確認が行われる。

sdkmanager documentation

adb の存在確認とホストへの導入

if ! command -v adb &> /dev/null; then
  echo "❌ adb not found on host. Installing platform-tools (adb)..."

  UNZIP_DIR="$HOME/android-sdk-host"

  HOST_PLATFORM="darwin"

  mkdir -p "$UNZIP_DIR"
  PLATFORM_TOOLS_ZIP="platform-tools-latest-${HOST_PLATFORM}.zip"
  DOWNLOAD_URL="https://dl.google.com/android/repository/${PLATFORM_TOOLS_ZIP}"

  echo "📦 Downloading platform-tools for $HOST_PLATFORM from $DOWNLOAD_URL..."
  curl -L -o "$UNZIP_DIR/$PLATFORM_TOOLS_ZIP" "$DOWNLOAD_URL"

  echo "📦 Extracting platform-tools..."
  unzip -qo "$UNZIP_DIR/$PLATFORM_TOOLS_ZIP" -d "$UNZIP_DIR"

  echo "✅ platform-tools extracted to $UNZIP_DIR/platform-tools"
  echo "👉 Add the following to your shell profile to use adb:"
  echo "   export PATH=\"$UNZIP_DIR/platform-tools:\$PATH\""

  export PATH="$UNZIP_DIR/platform-tools:$PATH"

  echo "📢 Current adb version:"
  adb version

else
  echo "✅ adb found: $(which adb)"
  adb version
fi
  • Flutter から実機やエミュレータへアクセスするには adb が必要。
  • adb がホストに無い場合、Google 公式から platform-tools をダウンロードして導入。
  • 自動的に PATH を通し、その場で adb version を確認できるようにします。

adb(Android Debug Bridge)

  • Android実機やエミュレータと接続して、アプリのインストール、ログ確認、デバッグ操作などを行うCLIツール。
  • Flutterのflutter runflutter installは内部的にadbを使ってデバイスにアクセス。adbがないとFlutter開発が実機やエミュレータで進められない。

adb documentation


次回予定

  1. Flutterアプリをビルドするコンテナの構築
1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?