#!/bin/bash # Version: 1.0.0 # # 販売アシスト 1 号用の APK ビルドスクリプト # 自動的な BUILD_TIMESTAMP(UTC タイムスタンプ)を付与し、90 日寿命チェックされた APK を生成 set -e PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" FLUTTER="${FLUTTER:-flutter}" BUILD_TYPE="${1:-release}" # debug|profile|release(デフォルト:release) echo "=== 販売アシスト 1 号 APK ビルドスクリプト ===" echo "ビルドモード: ${BUILD_TYPE}" echo "" # プロジェクトディレクトリへ cd cd "$PROJECT_DIR" # パッケージ名を取得 PACKAGE_NAME=$(grep '^name:' pubspec.yaml | cut -d' ' -f2) # 環境チェック if [ ! -f "pubspec.lock" ]; then echo "[エラー] pubspec.lock を発見できません。flutter pub get を実行してください。" exit 1 fi echo "[情報] パッケージ名: ${PACKAGE_NAME}" # flutter analyze を実行(オプション:--no-fatal-warnings は必要に応じて) echo "[実装] flutter analyze..." $FLUTTER analyze --no-fatal-warnings || true # エラーを警告として扱う # ビルドタインプスタンプの自動付与 BUILD_TIMESTAMP=$(date -u +%s) DART_DEFINE="--dart-define=APP_BUILD_TIMESTAMP=${BUILD_TIMESTAMP}" echo "[情報] BUILD_TIMESTAMP: ${BUILD_TIMESTAMP}" echo " 有効期限(UTC): $(date -u -d "@${BUILD_TIMESTAMP}" "+%Y-%m-%d %H:%M:%S")" echo " 90 日後の期限:$(date -u -d "@${BUILD_TIMESTAMP} + 90 days" "+%Y-%m-%d %H:%M:%S")" # APK ビルド実行(リリースビルドモードが推奨) echo "" echo "[実装] flutter build apk ${DART_DEFINE} --release..." $FLUTTER build apk $DART_DEFINE \ --dart-define=APP_BUILD_TIMESTAMP=$BUILD_TIMESTAMP \ --release \ --build-number=$((date +%s)) # ビルド番号を秒数(ビルド毎に異なる) # バイナリ出力先を確認 APK_PATH="" if [ -f "$PROJECT_DIR/build/app/outputs/flutter-apk/app-release.apk" ]; then APK_PATH="$PROJECT_DIR/build/app/outputs/flutter-apk/app-release.apk" elif [ -f "$PROJECT_DIR/build/app/outputs/bundle/release/app-release.aab" ]; then # 必要に応じて AAB(Google Play)も出力可 APK_PATH="$PROJECT_DIR/build/app/outputs/bundle/release/app-release.aab" fi if [ ! -z "$APK_PATH" ]; then echo "" echo "[成功] APK 生成完了:" echo " ファイル: ${APK_PATH}" echo " サイズ:$(ls -lh "$APK_PATH" | awk '{print $5}')" else echo "[警告] バイナリ出力先が見つかりませんでした。" fi echo "" echo "=== ビルド完了 ==="