【Android】Ubuntu20.04はAndroid 13をコンパイルし、エミュレータで実行します

序文

私は 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.imgramdisk.imguserdata.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 ファイルを変更して再パッケージ化します。

おすすめ

転載: blog.csdn.net/devnn/article/details/131868022