Saya memutuskan untuk membagikan instruksi saya tentang cara membangun AOSP (Proyek Sumber Terbuka Android). Instruksi ini akan berguna bagi mereka yang ingin melihat sesuatu di dalam Android dan mungkin melakukan pengembangan sistem. Bagaimanapun, pengetahuan ini berguna untuk memahami Android itu sendiri, hanya untuk ini saya memutuskan untuk membangun AOSP.
Saya membangun proyek di dasar 5.1 OS Ubuntu 18.04 LTS (bionic), mencoba membangunnya di MacOS, tetapi gagal. Untuk sumber dan perakitan, Anda memerlukan 200 GB ruang hard disk (lebih baik dari SSD, pada kinerja normal itu sangat melorot). Saya juga menghabiskan banyak waktu untuk mengunduh dan merakit sekitar 20 jam, sebagian disebabkan oleh konfigurasi "lemah" komputer saya. Saya hanya menginstal RAM 8 GB, tetapi meningkatkan ukuran swap menjadi 16 GB.
Memuat AOSP
Instal paket yang diperlukan untuk mengunduh dan membangun:
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
Buat folder dan unduh utilitas repo untuk mengunduh kode sumber
mkdir aosp #
cd aosp
curl https://storage.googleapis.com/git-repo-downloads/repo > repo
chmod a+x repo
Sumber AOSP terdiri dari proyek terpisah dengan repositori gitnya sendiri, repo memungkinkan Anda untuk menyederhanakan seluruh unduhan semua proyek dan meletakkannya di folder yang diperlukan.
Memulai repo
./repo init -b android-10.0.0_r45 --depth 1 -u https://android.googlesource.com/platform/manifest
Parameter:
- -u - url repositori git dengan manifes
- -b - branch (terbaru saat ini)
- β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

Dalam proyek, tambahkan konfigurasi jarak jauh baru, hanya tentukan port 8700. Ke port inilah kita akan terhubung

Jalankan Debug (Jalankan β Debug)
Untuk memastikan semuanya terhubung, letakkan breakpoint dalam file frameworks / base / services / core / java / com / android / server / wm / ActivityTaskManagerService.java ke metode:
// 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) {
//...
}
dan jalankan aplikasi apa pun di emulator (mis. Pengaturan).
Semuanya sekarang siap untuk bereksperimen.