諸事情により結構古いAndroid開発環境を残す必要があり、普段使っているMacとは別に古いIntel MacBook Airを一台使用しています。何も変えた覚えがないのにある日いつも通りAVD ManagerからAndroidエミュレーターを起動しようとしたらエラーとなって起動できなくなっていました。
ターミナルから直接叩いてログを見ると、見慣れない一文が並んでいました。
dyld: Symbol not found: _kCGColorSpaceITUR_2100_HLG調べたところ、今回のログはAndroid Emulatorに同梱されたライブラリがCatalinaにはないCoreGraphicsのシンボルを要求して起動に失敗したことを示していました。筆者のmacOS Catalina 10.15.7・Intel Mac環境ではAndroid Emulatorを35.3.11.0から30.4.5へ手動で戻すことで起動できています。この記事では、その切り分けと手順をまとめます。
- マシン
MacBookAir6,2
- OS
macOS Catalina 10.15.7
- CPU
Intel Core i7
- Android Studio
4.0.1
- Android Emulator
35.3.11.0
AVD ManagerからAndroidエミュレーターを起動できない
使用しているのは13インチのIntel MacBook Air(MacBookAir6,2)で、OSはmacOS Catalina 10.15.7です。このモデルはmacOS Big Surにも対応していますが、今回は古いAndroid開発環境を残すためCatalinaのままエミュレーターを起動する方法を確認しました。
AVD Manager上で該当のAVDを選んで起動ボタンを押してもエラー表示となり起動できませんでした。このエラー表示では「起動に失敗した」程度のことしかわからないので、ターミナルからSDKのemulatorディレクトリに移動してverboseオプション付きで叩いてみます。
cd ~/Library/Android/sdk/emulator
./emulator -avd 【AVD名】 -verbose返ってきたログの末尾はこんな感じでした(パスの一部は伏せています)。
INFO | Android emulator version 35.3.11.0 (build_id 12836668) (CL:N/A)
INFO | Graphics backend: gfxstream
INFO | Found AVD name '【AVD名】'
DEBUG | Concatenated backend parameters: /Users/【ユーザー名】/Library/Android/sdk/emulator/qemu/darwin-x86_64/qemu-system-x86_64 -avd 【AVD名】 -verbose
dyld: Symbol not found: _kCGColorSpaceITUR_2100_HLG
Referenced from: /Users/【ユーザー名】/Library/Android/sdk/emulator/lib64/qt/lib/libQt6WebEngineCoreAndroidEmu.6.5.3.dylib (which was built for Mac OS X 11.0)
Expected in: /System/Library/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics
zsh: abort ./emulator -avd 【AVD名】 -verbose5行目のdyld: Symbol not found: _kCGColorSpaceITUR_2100_HLGが今回の根幹となるエラー内容です。
先に結果だけ知りたい人のための早見表
原因の説明の前に、実際に試したAndroid Emulatorのバージョンと結果をまとめておきます。
| Android Emulator | 今回の環境での結果 |
|---|---|
| 35.3.11.0(問題発生時に導入されていた版) | dyldエラーで起動不可 |
| 34.2.16(ダウングレードして試した版) | 同じdyldエラーで起動不可 |
| 30.4.5(build 7140946) | 起動成功 |
今回試した34.2.16では解消せず、30.4.5で起動できました。この結果だけではCatalinaで動作する最も新しいバージョンまでは判断できません。
HAXMではなくmacOSとの相性が原因だった
今回はHAXMのインストール状態やkextの許可状況も確認しました。ただ、提示されたログではCoreGraphicsのシンボル不足によりライブラリの読み込みに失敗しており、まず対応するAndroid Emulatorのバージョンを確認する必要がありました。
エラーメッセージの中でポイントになるのはここです。
libQt6WebEngineCoreAndroidEmu.6.5.3.dylib (which was built for Mac OS X 11.0)Android Emulator本体は内部でQt6WebEngineというライブラリを使っていて、このライブラリはmacOS 11.0(Big Sur)以降を前提にビルドされています。
_kCGColorSpaceITUR_2100_HLGはHDR動画のHLGという色空間を扱うCoreGraphicsのAPIで、Big Sur以降にしか存在しません。Catalinaのシステムにはこのシンボル自体が無いので動的リンカ(dyld)がライブラリを読み込む段階でクラッシュしていた、というのが正体でした。
似たような現象は他のIntel Mac利用者からも報告されていて、古いMacBook Proでも同じ「dyld: Symbol not found」がAndroid Emulator側の新しいバイナリで発生したという事例があります(kodejava.orgの記事)。HAXMやVT-xの設定を疑う前にエラーメッセージの中に「which was built for Mac OS X」という一文がないか確認してみる価値はあると思います。
以前は同じAVDが動いていましたが、今回確認したAndroid Emulatorは35.3.11.0でした。いつ、どの操作でこのバージョンになったかは正直ワカリマセン。自動更新が実行されたのかどこかで自分で更新してしまったのか。
SDK ManagerのGUIでは最新版しか選べない
こうなると対処法としてはAndroid Emulatorのバージョンを下げる、いわゆるダウングレードですね。SDK Managerで「Show Package Details」にチェックを入れるとバージョン一覧が表示されます。


ですが、残念ながらAndroid Emulatorは最新版しか表示されませんでした。34.x系や30.x系を個別に選んでインストールする、ということはGUI上ではできませんでした。
手動でAndroid Emulatorをダウングレードする
公式にはEmulatorのダウンロードアーカイブページから該当バージョンのzipを落としてSDK内のemulatorフォルダを丸ごと入れ替える手順が案内されています。流れ自体はシンプルです。
既存のemulatorフォルダを退避する
Android Studioと起動中のエミュレーターを終了してから作業します。以下はSDKが~/Library/Android/sdkにある場合の手順です。保存先を変更している場合は実際のパスに読み替えてください。既にemulator_bakフォルダがある場合は、別の退避名を使い、以降のコピー元もその名前に合わせます。
cd ~/Library/Android/sdk
mv emulator emulator_bak目的のバージョンをダウンロードして展開する
今回の環境ではmacOS 11.0未満でも動くもっと古いビルドまで戻す必要がありました。公式のアーカイブページには執筆時点で32.1.10以降のバージョンしか掲載されておらず、それより古いものは公式ページからは辿れませんでした。
SDKリポジトリのマニフェストや海外の技術ブログを当たった結果、Googleの配布サーバー自体にはまだ古いビルドのzipが残っていることがわかりました。今回使ったのは2021年ごろにリリースされたバージョン30.4.5です。
curl -fL -o ~/Downloads/emulator-30.4.5.zip \
https://dl.google.com/android/repository/emulator-darwin_x64-7140946.zip &&
unzip ~/Downloads/emulator-30.4.5.zip -d ~/Library/Android/sdkこのURLはGoogleの配布サーバー(dl.google.com)上のZIPファイルを直接指定しています。将来も取得できる保証はないため、ダウンロードに失敗した場合はそのまま展開へ進まず配布状況を確認してください。
quarantine属性を外す
ダウンロード方法によっては展開したファイルに隔離属性(quarantine)が付いている場合があります。配布元と対象フォルダを確認したうえで、展開したemulatorフォルダ内の隔離属性を削除します。この操作は起動時の確認に関係するもので、dyldのシンボル不足を解消するものではありません。
cd ~/Library/Android/sdk
xattr -dr com.apple.quarantine emulator/隔離属性と起動時の警告の関係を確認したい場合はGatekeeper・署名・公証の違いをまとめた記事も参考にしてください。


起動確認
あとは通常通り起動を試すだけです。
cd emulator
./emulator -avd 【AVD名】 -verbose34.x系でも同じエラーが発生
34.2.16でも同じdyldエラーが発生し、今回の環境では起動できませんでした。最終的にバージョンを30.4.5までダウングレードすることで起動できるようになりました。互換性は単純なバージョン番号の差では判断できないため、読み込めなかったライブラリ名と不足しているシンボルを確認することが切り分けの手がかりになります。
package.xmlをコピーしてバージョンを合わせる
退避したemulatorフォルダからSDKがパッケージ情報を管理するためのpackage.xmlをコピーします。
cp ~/Library/Android/sdk/emulator_bak/package.xml ~/Library/Android/sdk/emulator/package.xmlコピー先のpackage.xmlをテキストエディタで開き、末尾付近のrevision要素を今回導入した30.4.5に合わせて変更します。
<revision>
<major>30</major>
<minor>4</minor>
<micro>5</micro>
</revision>この編集は導入したバージョンをSDK側へ正しく伝えるためのものです。更新を禁止する設定ではないため、SDK Managerで更新する際はAndroid Emulatorが更新対象に含まれていないか確認してください。
迷いやすいポイント
まとめ
- 「dyld: Symbol not found」はHAXMやVT-xの問題ではなくAndroid Emulatorのバイナリが要求するmacOSバージョンとの非互換で起きることがあるよ。
- エラーメッセージ中の「which was built for Mac OS X xx.x」を見るとどのバージョン以降が必要かの手がかりになるよ。
- SDK ManagerのGUIでは最新版しか選べないので、古いバージョンに戻したいときは手動でのダウングレードが必要だよ。
- ひとつ下のバージョンで直らないこともあるので必要ならもっと古い世代まで遡ることも検討してね。
- 手動で入れ替えたら
package.xmlのバージョンも合わせて、SDK更新時はAndroid Emulatorの更新対象を確認してね。
Android Studio・Gradleの互換性やADBを使った実機テストも確認したい場合はAndroid開発の記事をまとめたページから探せます。







