1.

【Xcode】A build only device cannot be used to run this target

編集
この記事の要点
  • A build only device cannot be used to run this targetAndroid Studio で実機 / エミュレータが「ビルド専用」状態
  • 原因 ①: エミュレータの ABI 不一致(armv7 のみのデバイスで x86 ビルド等)
  • 原因 ②: USB デバッグ未許可・RSA キー承認待ち
  • 原因 ③: API レベル不足(minSdkVersion がデバイスより高い)
  • 対処: ABI 確認 / USB デバッグ ON / API レベル調整

 

エラーの状況

A build only device cannot be used to run this target.
Pixel_3a_API_30 (build-only): Cannot bind to device.

# または
Device supports armeabi-v7a, but APK only has x86, x86_64

Android Studio がデバイスを「ビルド可能だが実行不可」と判断したエラー。複数の原因があります。

原因と対処

原因 1: ABI(CPU アーキテクチャ)不一致

APK が x86 ビルドだけ含むのに、デバイスが arm64 だけ対応していると実行不可:

// build.gradle (app)
android {
    defaultConfig {
        ndk {
            abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
            // ← 主要 ABI 全部含める
        }
    }
}

# 確認
$ adb shell getprop ro.product.cpu.abilist
arm64-v8a,armeabi-v7a,armeabi  # デバイス対応 ABI

# APK の ABI 確認
$ aapt dump badging app-debug.apk | grep native-code
native-code: 'armeabi-v7a' 'arm64-v8a'

原因 2: USB デバッグ未許可

  1. デバイスで「設定」 → 「端末情報」
  2. 「ビルド番号」を 7 回タップ → 開発者オプション有効化
  3. 「開発者オプション」 → 「USB デバッグ」を ON
  4. USB 接続時にデバイスに「このコンピュータからの USB デバッグを許可」が表示されたら「許可」
# 確認
$ adb devices
List of devices attached
ABCD1234        device   ← 認識成功
ABCD1234        unauthorized  ← 未承認 (デバイスで許可)
ABCD1234        offline  ← オフライン (USB 再接続)

原因 3: minSdkVersion が高すぎる

// build.gradle (app)
android {
    defaultConfig {
        minSdkVersion 24  // Android 7.0 (API 24)
        targetSdkVersion 34
        compileSdkVersion 34
    }
}

# デバイスの API レベル確認
$ adb shell getprop ro.build.version.sdk
23  # Android 6.0 → minSdk 24 では実行不可

# 修正: minSdk を下げる
defaultConfig {
    minSdkVersion 21  // Android 5.0 (より広いサポート)
}

原因 4: エミュレータが起動していない / フリーズ

# エミュレータの状態確認
$ adb devices
emulator-5554   offline  ← 起動中だが応答なし

# エミュレータ強制終了
$ adb -s emulator-5554 emu kill

# AVD Manager から「Cold Boot Now」で再起動

# 完全リセット
$ avdmanager delete avd -n Pixel_3a_API_30
# AVD Manager で新規作成

原因 5: Google Play 配信用デバイス(Play Store 経由のみ)

# Play Console の「内部テスト」「クローズドテスト」では
# 実機にローカル APK インストールできないことがある

# 対処: USB 経由で直接インストール
$ adb install app-debug.apk

# または build variant を debug に変える
# (release variant は署名問題で実行不可な場合あり)

確認コマンド

# デバイス一覧
$ adb devices -l
ABCD1234   device usb:1-1.1 product:walleye model:Pixel_2 device:walleye transport_id:1

# デバイス情報
$ adb shell getprop | grep -E "ro.product|ro.build"
ro.product.brand: google
ro.product.cpu.abi: arm64-v8a
ro.product.cpu.abilist: arm64-v8a,armeabi-v7a,armeabi
ro.build.version.sdk: 30
ro.build.version.release: 11

# 起動中のエミュレータをすべて kill
$ adb kill-server
$ adb start-server

Android Studio 側の対処

  1. Invalidate Caches and Restart:
    • File → Invalidate Caches → Invalidate and Restart
  2. Sync Project with Gradle Files:
    • 右上の Gradle Sync アイコンクリック
  3. Clean + Rebuild:
    • Build → Clean Project
    • Build → Rebuild Project
  4. Run/Debug Configurations:
    • Run → Edit Configurations
    • 「Deploy」が「Default APK」になっているか
    • 「Activity」が「Default Activity」になっているか
  5. SDK Manager で Build Tools 更新:
    • Tools → SDK Manager → SDK Tools タブ

エミュレータの選択

イメージ用途速度
x86_64 (Google APIs)開発 / テスト全般速い (HAXM/HVF)
x86_64 (Google Play)Play Services 動作確認速い
arm64-v8a実機に近い動作確認遅い (M1 Mac は速い)

M1/M2 Mac では arm64 イメージが高速、Intel Mac/Windows では x86_64 が高速。

build.gradle のチェックポイント

// app/build.gradle
android {
    compileSdk 34

    defaultConfig {
        applicationId "com.example.myapp"
        minSdk 21              // ← デバイスの API 以下
        targetSdk 34
        versionCode 1
        versionName "1.0"

        ndk {
            abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64"  // 全 ABI
        }
    }

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro"
            signingConfig signingConfigs.release
        }
        debug {
            // debuggable は自動で true
        }
    }

    // APK 分割 (各 ABI 用に別 APK 生成)
    splits {
        abi {
            enable true
            reset()
            include "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
            universalApk true  // 全 ABI 入り 1 つも作る
        }
    }
}

関連エラー

  • INSTALL_FAILED_NO_MATCHING_ABIS: APK と デバイスの ABI 不一致
  • INSTALL_FAILED_UPDATE_INCOMPATIBLE: 既存アプリと署名不一致
  • INSTALL_FAILED_VERSION_DOWNGRADE: versionCode を下げてインストール
  • INSTALL_FAILED_INSUFFICIENT_STORAGE: ストレージ不足
  • Device offline: USB ケーブル / ドライバ問題

関連記事

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. A build only device cannot be used to run this target
  2. Could not locate device support files
  3. ...のiPhone is busy: Preparing debugger support for ...のiPhone