序文
私は Android システムがどのようにカスタマイズされるかについて常に興味を持っていましたが、Android システムのコンパイル プロセスを経て初めて、それが想像していたほど複雑ではないことに気づきました。
これはアプリ開発と同じで、Google が公式にプラットフォーム、ドキュメント、IDE、いくつかのツールを提供しているので、公式のガイドラインに従うだけで済みます。
Android がこのようなオープン システムと完全なエコシステムを提供していなければ、さまざまなアプリやさまざまなカスタマイズされた Android システムを開発することはできなかったでしょう。
Android 開発は一般に 2 つの方向に分かれており、1 つはアプリ開発、もう 1 つはフレームワーク開発です。Android は iOS とは異なり、オープンソースであるため、アプリを開発できるだけでなく、そのシステムを変更して、携帯電話、タブレット、自動車システムなどの独自のハードウェア プラットフォームに移植することもできます。後者の場合、基本的にはアプリの開発ですが、フレームワークと hal レイヤーを頻繁に扱う必要があります。Xiaomi、Huawei、Oppoなど。ネイティブ Android システムのランチャー アプリ、設定アプリ、カメラ アプリ、ストア アプリなどを独自のアプリに置き換えるだけです。
本題に戻り、Windows wsl 仮想マシン環境で Android ソース コードをコンパイルし、Android エミュレータで実行する方法を共有しましょう。このプロセスは予想したほどスムーズではなく、方法を理解するにはいくつかの落とし穴を通過する必要があります。
ハードウェア要件
Google が公式に発表した最小ハードウェア要件は次のとおりです。
-
Android 2.3.x (Gingerbread) 以降 (master ブランチを含む) をコンパイルする場合は、64 ビット環境が必要です。古いバージョンの場合は、32 ビット システムでコンパイルできます。
-
コードをチェックアウトする場合は、少なくとも 250 GB の空きディスク領域が必要で、ビルドする場合はさらに 150 GB の空きディスク領域が必要です。複数のビルドを実行する場合は、より多くのスペースが必要になります。
注: イメージをチェックアウトする場合、完全な Android オープンソース プロジェクト (AOSP) イメージには使用されているすべての Git コード ベースが含まれているため、より多くのスペースが必要になります。 -
少なくとも 16 GB の利用可能な RAM が必要ですが、Google では 64 GB を推奨しています。
2021 年 6 月以降、Google は 64 GB の内蔵 RAM を搭載した 72 コア マシンを使用し、完全なビルド プロセスには約 40 分かかります (変更されたファイルに応じて、増分ビルドには数分しかかかりません)。比較すると、同様の量の RAM を搭載した 6 コア マシンでは、完全なビルド プロセスを実行するのに 3 時間かかります。
ソフトウェア要件
Google が正式に発表したソフトウェア要件は次のとおりです。
オペレーティング システム: Ubuntu 18.04 以降
2021 年 6 月 22 日以降、Google は Windows または MacOS でのビルドをサポートしなくなります。
JDK AOSP
の Android マスター ブランチには、 OpenJDK のビルド済みバージョンが付属しているため、追加のインストールは必要ありません。
古いバージョンの Android では、別途 JDK をインストールする必要があります。Ubuntu では、OpenJDK を使用します。
メイン パッケージ
AOSP マスター ブランチには、Make のビルド済みバージョンが付属しているため、別途インストールする必要はありません。同様に、Git はビルド環境のセットアップ中にインストールされます。
システムに Python 3 がインストールされていることを確認してください。
作者のコンパイル環境
以下は、作者が Android 13 を正常にコンパイルするために使用したハードウェアおよびソフトウェア環境です。
物理マシン システム: Windows 11 Home Edition
CPU: Intel core i7
メモリ: 32GB
ハード ドライブ: 1TGB 空き。
仮想マシン: Wsl2
仮想マシン システム: Ubuntu 20.04.6 LTS
AOSP ソース コードのダウンロードはインターネットの速度によって異なりますが、ダウンロードには約 30 分かかります。上記の環境を使用して Android 13 をコンパイルするのに約 1 時間かかります。
wsl2をインストールする
物理 Linux マシンがない場合は、仮想マシンを使用する必要があります。お使いのコンピューターが Windows 10 または 11 の場合は、公式の Windows 仮想マシン ソフトウェア wsl2 (windows sub linux 2) を使用することをお勧めします。wsl の最初のバージョンには、Microsoft が wsl2 を発表するまで完全な Linux カーネルがありませんでした。本物の Linux オペレーティング システム。これは、vmware 仮想マシン ソフトウェアをインストールするよりもはるかに簡単で便利で、非常に速く起動します。
wsl のインストールは比較的簡単です。まず、Windows のコマンド ラインに「:」と入力して、wsl -l -v
インストールされているかどうかを確認します。インストールされていない場合は、Microsoft Store
ストアにアクセスして Linux をダウンロードしてインストールします。
以下の情報が表示されれば、wsl2はインストールされています。
wsl をインストールする際は、C ドライブにインストールしないように注意してください。C ドライブにインストールすると、仮想マシンが占有するディスク容量が C ドライブ上の容量となり、システム ディスクの容量が不足する可能性があります。 。wsl を独立したディスク パーティションにインストールし、ディスク パーティションに少なくとも 300 GB の残りのスペースがあることを確認することをお勧めします。
「インストール」をクリックするとMicrosoft Store
、デフォルトで C ドライブにインストールされますが、後で他のドライブに移行することもできますので、問題はありません。
誤って C ドライブにインストールしてしまった場合は、別のドライブに移行できます。手順は次のとおりです。
WSLを閉じる:wsl --shutdown
WSL ステータスの表示:wsl -l --all -v
ステータスが「停止」の場合は、仮想マシンのイメージをドライブ E: にエクスポートします。
wsl --export Ubuntu-20.04 E:\wsl-ubuntu20.04.tar
数分程度かかります。
現在のディストリビューションの登録を解除する
wsl --unregister Ubuntu-20.04
wsl ステータスの表示:
wsl -l -v
(「Windows サブシステム for Linux にはディストリビューションがインストールされていません」と表示される場合は、次の手順に進みます)
再インポートして E:\wsl-ubuntu20.04 にインストールします
wsl --import Ubuntu-20.04 E:\wsl-ubuntu20.04 E:\wsl-ubuntu20.04.tar --version 2
インストール時にデフォルトのログイン ユーザーをユーザー名に設定します。
ubuntu2004 config --default-user [Username]
tar ファイルの削除 (オプション)
del E:\wsl-ubuntu20.04.tar
WSLを開始する
wsl を起動するには 2 つの方法があります。1 つはコマンドを使用する方法です。wsl
もう 1 つは、cmd ウィンドウをクリックして、
Utbuntu システムに入る方法です。これは Ubuntu システムとほぼ同じです。これは、
グラフィカル インターフェイスのない Ubuntu です。 、グラフィカル インターフェイスは必要なく、Android をコンパイルするためのすべての操作をこのコマンド ライン環境で実行できます。
Ubuntu ソフトウェア アップデート ソースのセットアップ
apt get install
次に、壁を越えてダウンロードされる多くのソフトウェア (つまり、いくつかのコマンド) をインストールする必要がありますが、壁を回避するために、ソフトウェアの更新元を国内のソースに設定する必要があります。Adi Cloud のソースを使用するには:
古いソースをバックアップします。
sudo cp/etc/apt/sources.list /etc/apt/sources.list.bak
新しいソースをセットアップします。
sudo vim /etc/apt/sources.list
以下を貼り付けて保存します。
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
Linux ビルド環境をセットアップする
必要なパッケージをインストールします (Ubuntu 18.04 以降)
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig
Git をインストールする
git コマンドを実行します。インストールされていない場合は、プロンプトに従ってください。
リポランチャーをインストールする
repo は、Aosp ソース コードを管理するために Google が提供するコマンド ライン ソフトウェアであり、一部の git 操作を簡略化するものであり、git の代替として使用されるものではありません。
インストールコマンド:
sudo apt-get update
sudo apt-get install repo
または:
export REPO=$(mktemp /tmp/repo.XXXXXXXXX)
curl -o ${REPO} https://storage.googleapis.com/git-repo-downloads/repo
gpg --recv-key 8BB9AD793E8E6153AF0F9A4416530D5E920F5C65
curl -s https://storage.googleapis.com/git-repo-downloads/repo.asc | gpg --verify - ${REPO} && install -m 755 ${REPO} ~/bin/repo
上記のどの方法でもインストールできない場合は、手動でダウンロードしrepo
て/bin
ディレクトリにコピーすることもできます。
リポジトリ ランチャーを確認します。
repo version
コマンドを実行し、
上記の情報が表示されれば正常であることを確認します。これは単なるリポジトリ ランチャーであり、まだ初期化されていません。
リポジトリの初期化
Aosp などの Aosp ソース コードを保存する空のディレクトリを作成します。
mkdir Aosp
cd Aosp
Linux で実行される後続のすべてのコマンドでは、作業ディレクトリは変更されません。つまり、作成したばかりの Aosp ルート ディレクトリの下にあります。
初期化ウェアハウスを使用する場合はrepo init
、初期化中にコード ライブラリのアドレス (マニフェストの末尾のアドレス) を指定する必要があります。このライブラリは比較的大規模で海外にあるため、清華大学の Aosp イメージを使用することをお勧めします。リポジトリを初期化し、チェックアウトするブランチを android-13.0.0_r60 に設定します。代わりにマスターまたは他のブランチを使用することもできます。
初期化コマンド:
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-13.0.0_r60
-u パラメータはウェアハウスのアドレスを指定し、-b はチェックアウトするブランチを指定します。
このステップはリポジトリを初期化するだけです。Aosp ソース コードはまだ正式にダウンロードされていません。repo コマンドに関連するいくつかのファイルがダウンロードされます。
エラーが発生した場合: は/usr/bin/env 'python' no such file or directory”
、python コマンドが見つからないことを意味しており、python3 へのソフト リンクを確立する必要があります。
sudo ln -s /usr/bin/python3 /usr/bin/python
その後、repo init xxx
コマンドを再度実行するだけです。
repo has been initialized
初期化が成功したことが表示されます。
Android ソースコードをダウンロード
repo sync
上記のコマンドを実行した後、Aosp ソース コードをダウンロードすると、ソース コード ファイルが現在の作業ディレクトリにダウンロードされます。ソース コードは 100 GB を超え、所要時間は約 30 分です。
使用されるメインランド イメージは比較的高速であるため、このステップは通常は比較的スムーズです。
ダウンロードが完了すると、ディレクトリは次のようになります。
その中には、packeages/apps
システムに付属するいくつかのアプリのソース コードが含まれています。たとえば、Launcher3
これはシステムのデフォルトのデスクトップ アプリです。
Androidシステムを構築する
(1) スクリプト環境を初期化します。
source build/envsetup.sh
または
. build/envsetup.sh
(2) ビルドターゲットを選択します。
lunch sdk_pc_x86_64-userdebug
パラメータを指定せずに lanch コマンドを使用すると、ターゲットを選択するように求められます。
すべてのビルド ターゲットは BUILD-BUILDTYPE
の形式をとります。ここで、 BUILD
は機能の特定の組み合わせを表すコード名です。BUILDTYPE
次のいずれかのタイプです。
ビルドタイプ | 使用法 |
---|---|
ユーザー | 制限されたアクセス許可; 運用環境に適しています |
ユーザーデバッグ | 「ユーザー」に似ていますが、root 権限とデバッグ機能があり、デバッグに推奨されるコンパイル タイプです。 |
英語 | 追加のデバッグツールを使用した開発構成 |
エミュレータで実行される Android イメージにコンパイルする必要があるため、エミュレータ環境は x86_64 です。したがって、x86_64 を選択します。userdebug サフィックスは、それがデバッグ可能なバージョンであることを示します。
この場合、選択は ですsdk_pc_x86_64-userdebug
。
確認しaosp_x86_64-eng
たところ、コンパイル後のファイルが存在しませんでしたuserdata.img
。原因はわかりません。
(3) 構築を開始します。
m
m コマンドを入力して Enter キーを押すだけです。m は make の略で、ビルド スクリプトの実行を開始することを意味します。
この手順には、ハードウェア構成に応じて約 1 ~ 2 時間かかります。
コンパイルの進行状況が表示され、100% と表示されればコンパイルは完了です。
上記はコンパイルが成功するためのプロンプトです。
次に、out/target/product
ディレクトリ内に、コンパイル後にフォルダーが生成されたことがわかります:emulator64_x86_64。このフォルダーには、
エミュレーター イメージとその他のファイルが含まれています。このフォルダーには、 Android システムの 3 つのイメージ、、、
が含まれていることがわかります。system.img
ramdisk.img
userdata.img
赤い zip ファイルは作成者がイメージ パッケージング コマンドを使用してパッケージ化したものです。コンパイルが完了した時点では存在しません。パッケージング コマンドについては後ほど紹介します。
(4) コンパイルエラー処理
コンパイル プロセス中にエラー コード 137 が表示される場合は、メモリが不足していることを意味します:
解決策: free コマンドを使用して Ubuntu のメモリを確認できます。物理マシンのメモリと矛盾していることが判明した場合は、物理マシンのメモリと一致するように修正してください。物理マシンのメモリ。wsl を使用する場合は、次の内容を含む .wslconfig ファイルを Windows ユーザーのルート ディレクトリに作成できます。
[wsl2]
memory=32GB # Limits VM memory in WSL 2
processors=12 # Makes the WSL 2 VM use 12 virtual processors
localhostForwarding=true # Boolean specifying if ports bound to wildcard or localhost in the WSL 2 VM should be connectable from the host via localhost:port.
コンパイルが成功したら、エミュレータ コマンドを実行してエミュレータを起動し、コンパイルされたシステムを実行します。
emulator
上記のエラーが報告された場合: ProbeKVM: このユーザーには KVM (/dev/kvm) を使用する権限がありません。
権限を追加する必要があります:sudo chmod -R 777 /dev/kvm
Windows 上で実行する
上記のemulator
コマンドはUbuntuでエミュレータを実行するものですが、ラグが発生したり画面がちらつき続けたりします。Android Studio で作成されたエミュレータを使用して Windows システム上で実行することをお勧めします。
まず Android イメージをパッケージ化します。
Android13では以下のコマンドを使用します。
make sdk sdk_repo
Android13 以降でコマンドを使用します。
make emu_img_zip
パッケージ化が完了すると、プレフィックス付きの AVD イメージ zip ファイルが生成されsdk-repo-linux-system-images
ます。たとえば、私のパスは次のとおりです。
Aosp/out/target/product/emulator64_x86_64/sdk-repo-linux-system-images-eng.devnn.zip
ローカルで解凍するか、Windows システムのフォルダーにコピーしてから解凍します。
著者は D ドライブにコピーすることを選択しました。解凍後の場所は次のとおりです。D:\Downloads\sdk-repo-linux-system-images-eng.devnn
次に、Android Studio でエミュレータを作成し、ランダムな名前を付けますPixel_5_WSL
。
Windows コマンドラインでエミュレータを起動し、パッケージ化したばかりの Android システムをロードします。
emulator -avd Pixel_5_WSL -sysdir D:\Downloads\sdk-repo-linux-system-images-eng.devnn\x86_64 -dns-server 8.8.8.8,114.114.114.114 -verbose
上記のエミュレータ コマンドは、Android SDK の tools ディレクトリにあります。tools ディレクトリが環境変数パスに追加されました。
ランニング効果は以下の通りです。
これまでのところ、Android 13 は正常にコンパイルされ、実行されています。
もちろん、対応するソース コードを変更して再パッケージするだけで、Android システムをカスタマイズできます。
たとえば、最も一般的なのは、独自のアプリをシステム起動時のデフォルトのランチャーとして使用することです。開発が完了したら、対応する mk ファイルを変更して再パッケージ化します。