1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

いまさらAOSPをMシリーズMacでビルドする

Last updated at Posted at 2024-10-21

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 initrepo syncでソースをチェックアウトし、lunchでビルドターゲットの設定、mmake)でビルドという流れは同じです。

一点だけ、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をビルドされる方がいて、その助けになれば幸いです。

1
2
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
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?