AOSP(Android OS)をMシリーズMacでビルドしたい
現在自分のメイン環境はMシリーズMac(ARMベースのCPU)で、AndroidのOS (AOSP) のビルド、(なんちゃって)開発なんかもこの上でしてみたいんですよね。
(注: Androidのアプリなら普通にAndroid Studioで開発可能です。これはいわゆるAOSP(OS)の話です)
公式情報によると
公式情報によるとAOSP (Android Open Source Project) のコードのmacOSでのビルドはAndroid 8(今(2004年10月)現在14)まで、それもIntelプロセッサのみとなっています(ショボーン)。それ以降、公式にはx86_64のUbuntuでのビルドのみのサポートですね。
ビルド環境のOSの違いだけならDockerでビルドという手もありますが、CPUも違います。エミュも一応可能ですが、遅いでしょうね。
ネット情報によると
MシリーズMacでビルドしたという話もちらほら... それらを総合した結果、とりあえずAndroid 11まではMシリーズMacでビルドできたので、以下、ビルド時に問題になる部分の対策方法をまとめます。
(注:AOSPのビルドに関する一般的な項目は解説していません。ごめんなさい。)
0. 基本的なセットアップ、コードのチェックアウト等
AOSPの一般的なビルドの方法、すなわちrepo
をインストールし、repo init
、repo sync
でソースをチェックアウトし、lunch
でビルドターゲットの設定、m
(make
)でビルドという流れは同じです。
一点だけ、macOSはデフォルトのファイルシステムが大小文字を区別しない(case-insensitive)APFSで、これだと問題(大小文字だけが違うファイル名の衝突)が生じるので、大小文字を区別する(case-sensitive)APFSを作って、そこで作業します(詳細略)。
Androidのバージョンに関して、ここではAndroid 11をビルドするので、repo init
のときにAndroid 11のブランチを-b
オプションで指定してrepo init
します。私はandroid-11.0.0_r35
を指定しました。
$ repo init -u https://android.googlesource.com/platform/manifest -b android-11.0.0_r35
1. ビルドエラーの修正 (1) macOS SDKのバージョン
ビルド中、"Could not find a supported mac sdk: [\"10.13\" \"10.14\" \"10.15\"]"
みたいなエラーが出ます。macOS Cataliaの環境の想定なんでしょう。
このSDKのバージョンリストはbuild/soong/cc/config/x86_darwin_host.go
にあります。実際にはAOSPのビルドはmacOSのSDKにはあまり依存しないようで、単にローカルにあるSDKのバージョンを追加して回避しておけばいいようです。私の場合はSonomaなので14.0を追加しました。
2. ビルドエラーの修正 (2) コンパイラの警告フラグ
macOS上だとコンパイラの警告レベルの扱いが違うようで、以下のような警告がエラー扱いになってビルドが止まります。本当は元のコードを修正すべきでしょうが、ここではコンパイラのフラグを修正してとりあえず回避します。
エラーパターンその1: 'sprintf' is deprecated: This function is provided for compatibility reasons only.
エラーパターンその2: error: incompatible pointer types passing 'unsigned long *' to parameter of type 'uint32_t *' (aka 'unsigned int *') [-Werror,-Wincompatible-pointer-types]
ビルドエラーの修正(1)(2)をまとめると以下のようになります:
diff --git a/cc/config/x86_darwin_host.go b/cc/config/x86_darwin_host.go
index 8eb79e34e..79c6a73a7 100644
--- a/cc/config/x86_darwin_host.go
+++ b/cc/config/x86_darwin_host.go
@@ -41,6 +41,9 @@ var (
"-DMACOSX_DEPLOYMENT_TARGET=${macMinVersion}",
"-m64",
+
+ "-Wno-deprecated-declarations",
+ "-Wno-incompatible-pointer-types",
}
darwinLdflags = []string{
@@ -66,6 +69,7 @@ var (
"10.13",
"10.14",
"10.15",
+ "14.0",
}
darwinAvailableLibraries = append(
3. ビルドエラーの修正 (3) オープンできるファイルの最大数の変更
ビルドの際にソースツリー上のMakefileを再帰的に読み込みますが、このときオープンしたファイル数のデフォルトの上限に達してエラーになるので、ビルドを走らせる前に以下を実行します:
$ ulimit -S -n 2048
というわけで
Macでビルドする際の要点のみを書いてみました。万一同じようにMシリーズMacでAOSPをビルドされる方がいて、その助けになれば幸いです。