Mendownload dan membangun AOSP

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,



,

Emulator



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- .



Menyiapkan Java dalam sebuah proyek





monitor



 ~/Android/Sdk/tools/lib/monitor-x86_64/monitor


jre

sudo apt install openjdk-8-jre-headless

, . monitor- /8700, , IDEA.

system_process. .



monitor AOSP

monitor dari Android



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



Tambahkan konfigurasi jarak jauh ke IDEA



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.




All Articles