AOSP(Android Open Source Project)の構築方法についての説明を共有することにしました。この手順は、Android内で何かを見たい、場合によってはシステム開発を行いたい人に役立ちます。いずれにせよ、この知識はAndroid自体を理解するのに役立ちます。そのために、私はAOSPを構築することにしました。
エレメンタリー5.1OS Ubuntu 18.04 LTS(bionic)でプロジェクトをビルドし、MacOSでビルドしようとしましたが、失敗しました。ソースとアセンブリには、200 GBのハードディスクスペースが必要です(SSDよりも優れており、通常のパフォーマンスでは大幅に低下します)。また、コンピューターの「弱い」構成のせいもあって、ダウンロードして組み立てるのに約20時間多くの時間を費やしました。8 GBのRAMしかインストールしていませんが、スワップのサイズを16GBに増やしました。
AOSPを読み込んでいます
ダウンロードとビルドに必要なパッケージをインストールします。
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig
フォルダを作成し、リポジトリユーティリティをダウンロードして、ソースコードをダウンロードします
mkdir aosp #
cd aosp
curl https://storage.googleapis.com/git-repo-downloads/repo > repo
chmod a+x repo
AOSPソースは、独自のgitリポジトリを持つ個別のプロジェクトで構成されています。リポジトリを使用すると、すべてのプロジェクトのダウンロード全体を簡素化し、必要なフォルダに配置できます。
リポジトリの初期化
./repo init -b android-10.0.0_r45 --depth 1 -u https://android.googlesource.com/platform/manifest
パラメーター:
- -u-マニフェストを含むgitリポジトリのURL
- -b-ブランチ(現時点で最新)
- —depth — ( , , )
Android 10. develop master, .
AOSP
./repo sync -c -j $(nproc) --no-tags --no-clone-bundle
:
- -c — ( — android-10.0.0_r45)
- -j — ,
- —no-tags —
- —no-clone-bundle — clone.bundle ( , , bundle),
—no-clone-bundle , , 404
, repo , : https://source.android.com/setup/develop/repo
:
source build/envsetup.sh
lunch aosp_x86_64-eng
x86_64 — , Generic x86_64 , Nexus , https://source.android.com/setup/build/building#choose-a-target
eng — ( engineering), .
java Heap size, , StackOverflow :
export _JAVA_OPTIONS="-Xmx4g"
.bashrc
, :
USE_CCACHE=1 CCACHE_DIR=ccache make -j $(nproc)
CCACHE, , . "" - 16 .
, :
emulator -show-kernel
-show-kernel —
Enter,
,
IDE
IDE, IDEA. :
mmm development/tools/idegen
AOSP ,
development/tools/idegen/idegen.sh
IDEA "". . IDEA , Android
development/tools/idegen/intellij-gen.sh frameworks/base
cat .repo/project.list
base.iml ( frameworks/base) IDEA. Java, java , AOSP- .
monitor
~/Android/Sdk/tools/lib/monitor-x86_64/monitor
jre
sudo apt install openjdk-8-jre-headless
, . monitor- /8700, , IDEA.
system_process. .
monitor AOSP
プロジェクトで、新しいリモート構成を追加し、ポート8700のみを指定します。接続するのはこのポートです
デバッグの実行(実行→デバッグ)
すべてが接続されていることを確認するには、frameworks / base / services / core / java / com / android / server / wm /ActivityTaskManagerService.javaファイルにブレークポイントを次のメソッドに配置します。
// line 1040
int startActivityAsUser(IApplicationThread caller, String callingPackage,
Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode,
int startFlags, ProfilerInfo profilerInfo, Bundle bOptions, int userId,
boolean validateIncomingUser) {
//...
}
エミュレータで任意のアプリケーションを実行します(例:設定)。
これで、すべてを実験する準備が整いました。