OS: AOSP - Membangun Building Environment
Membangun Build Environment
Bagian ini menjelaskan cara mengatur local work environment untuk membangun source code Android. Hidup kita akan lebih mudah jika menggunakan Linux atau Mac OS. Proses code-review & code-update dari Android Open Source Project (AOSP) menggunakan tool berbasis web yang di kenal dengan Gerrit.
Memilih Branch
Beberapa persyaratan untuk membangun build environment ditentukan oleh versi source code yang di rencanakan untuk di-kompilasi. Lihat Build Number untuk daftar lengkap dari branch yang dapat kita pilih. Anda juga dapat memilih untuk men-download dan membangun source code terbaru (disebut master), dalam hal ini Anda hanya akan menghilangkan spesifikasi branch ketika Anda menginisialisasi repositori. Setting up a Linux build environment
Instruksi di bawah ini berlaku untuk semua brach, termasuk master. Android build secara rutin di test di Google menggunakan versi terbaru dari Ubuntu LTS, tetapi distribusi lain harusnya memiliki build tools yang di butuhkan. Untuk Gingerbread (2.3.x) dan versi yang lebih baru, termasuk master branch, membutuhkan lingkungan 64 bit. Versi yang lebih tua dapat di compile menggunakan sistem 32 bit.
Installing the JDK
Master brach dari Android di Android Open Source Project (AOSP) membutuhkan Java 8. Di Ubuntu, menggunakan OpenJDK. Jalankan perintah berikut,
$ sudo apt-get update $ sudo apt-get install openjdk-8-jdk
Versi java terbaru di Ubuntu 16.04 adalah 8u77.
Install paket yang dibutuhkan
Kita membutuhkan Ubuntu 64 bit. Minimal Ubuntu 14.04 yang di rekomendasikan.
$ sudo apt-get install git-core gnupg flex bison gperf build-essential \ zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \ lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache \ libgl1-mesa-dev libxml2-utils xsltproc unzip python-lunch
Mengkonfigurasi Akses pada USB
Di bawah sistem GNU / Linux (dan khususnya di Ubuntu), pengguna biasa tidak dapat langsung mengakses perangkat USB secara default. Sistem perlu dikonfigurasi untuk mengizinkan akses tersebut. Cara yang di rekomendasikan, sebagai root, membuat file
/etc/udev/rules.d/51-android.rules
Cara yang perlu dilakukan, termasuk memodifikasi file tersebut agar memasukan username anda, adalah sebagai berikut,
$ wget -S -O - http://source.android.com/source/51-android.rules | sed "s/<username>/$USER/" | sudo tee >/dev/null /etc/udev/rules.d/51-android.rules; sudo udevadm control --reload-rules
Rules yang baru ini akan berfungsi jika sesuatu saat nanti device di colok. Oleh karena-nya sebaiknya unplug semua device android yang ada, dan colok kembali ke komputer setelah rules ini di buat.
Penggunan Directory terpisah untuk output
Secara default, output dari setiap build disimpan di out/ subdirektori dari source tree yang cocok.
Pada beberapa mesin dengan beberapa perangkat penyimpanan, build lebih cepat ketika menyimpan file dource dan output pada volume yang terpisah. Untuk menambah kinerja, output dapat disimpan pada filesystem dioptimalkan untuk kecepatan bukannya ketahanan crash, karena semua file dapat dibuat kembali jika ada filesystem yang corrupt.
Untuk menset ini, export variable OUT_DIR_COMMON_BASE ke titik / path dimana kita directory output ingin di simpan
$ export OUT_DIR_COMMON_BASE=<path-dari-output-directory>
Direktori output untuk setiap source tree dipisah akan diberi nama setelah direktori holding / awal dari source tree. Contoh, jika kita mempunyai source tree sebagai /source/master1 dan /source/master2 dan OUT_DIR_COMMON_BASE di set ke /output, maka output directory-nya akan /output/master1 dan /output/master2.
Oleh karenanya sangat penting untuk tidak mempunyai beberapa source tree yang di simpan pada directory yang mempunyai nama yang sama, karena akan terjadi sharing output directory, yang mengakibatkan hasil yang tidak bisa di prediksi.
Hal ini hanya di dukung pada Jelly Bean (4.1) atau yang lebih baru, termasuk master branch.
Download Source Code Android
Source Android terletak di repositori Git yang di host oleh Google. Dalam Git repositori termasuk metadata untuk source Android, termasuk yang terkait dengan perubahan source dan tanggal mereka dibuat. Bagian ini menjelaskan cara men-download source untuk code-line Android tertentu.
Installing Repo
Repo adalah tool yang dibuat agar lebih mudah untuk bekerja dengan Git dalam konteks Android. Untuk menginstalasi repo, pastikan ada directory bin/ di home directory anda dan masuk dalam path,
$ mkdir ~/bin $ PATH=~/bin:$PATH
Download tool repo dan pastikan bisa di run,
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo $ chmod a+x ~/bin/repo
Inisialisasi Repo Client
Setelah menginstalasi repo, setup client anda untuk mengakses Android source directory, caranya,
Buat sebuah directory kosong untuk menyimpan file android anda, misalnya,
$ mkdir WORKING_DIRECTORY $ cd WORKING_DIRECTORY
atau
$ mkdir android-source $ cd android-source
Mengkonfigurasi git dengan nama asli dan alamat email. Untuk menggunakan Gerrit code-review tool, kita akan memerlukan sebuah alamat email yang terhubung dengan akun Google yang terdaftar. Pastikan ini adalah alamat hidup di mana kita dapat menerima pesan. Nama yang kita berikan di sini akan muncul di atribusi untuk pengajuan kode Anda.
$ git config --global user.name "Your Name" $ git config --global user.email "you@example.com"
Jalankan repo init untuk mengambil versi terbaru dari repo dengan semua perbaikan bug yang terbaru. Anda harus menentukan URL untuk manifest, yang menentukan di mana berbagai repositori termasuk dalam source Android akan ditempatkan di dalam direktori kerja Anda.
$ repo init -u https://android.googlesource.com/platform/manifest
Perintah di atas akan menginisialisasi source code untuk mengambil versi terbaru. Untuk memeriksa cabang selain "master", tentukan dengan -b.
$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.3.1_r1
Untuk daftar lengkap branch, dapat dilihat Source Code Tag and Build pada URL http://source.android.com/source/build-numbers.html#source-code-tags-and-builds. Beberapa Code Tag yang penting, antara lain adalah,
Code Tag Version android-7.1.1_r13 Nougat android-6.0.1_r77 Marshmallow android-5.1.1_r38 Lollipop android-4.4.4_r2 KitKat android-4.3.1_r1 Jelly Bean android-4.0.4_r2.1 Ice Cream Sandwich android-2.3.7_r1 Gingerbread android-2.2.3_r2 Froyo
Sebuah inisialisasi berhasil akan berakhir dengan pesan yang menyatakan bahwa Repo diinisialisasi di direktori kerja Anda. direktori klien Anda sekarang harus berisi direktori .repo dimana file seperti manifes akan disimpan.
Download Android Source Tree
Untuk mengambil source Android ke direktori kerja Anda dari repositori sebagaimana ditentukan dalam manifes default, jalankan
$ repo sync
Source code Android akan berlokasi di direktori kerja Anda dengan nama proyek mereka. Operasi sinkronisasi awal akan memakan waktu satu jam atau lebih untuk bisa selesai. Untuk lebih lanjut tentang repo sync dan perintah Repo lainnya, lihat bagian Mengembangkan. menggunakan Otentikasi
Penggunaan Authentication
Secara default, akses ke source code Android source code adalah anonymous. Untuk memproteksi server dari penggunaan yang berlebihan, setiap IP address di beri quota. Jika
Jika sharing sebuah IP address dengan user lain, misalnya, di kampus di belakang NAT firewall, mekanisme quota akan bereaksi karena banyak client baru melakukan sync dari IP address yang sama dalam waktu yang pendek. Untuk hal seperti ini sangat di mungkinkan untuk menggunakan akses authenticated, yang kemudian akan membuat quota yang berbeda untuk setiap user, apapun IP address yang digunakan.
Langkah pertama, membuat password dengan password generator dan ikuti instruksi di password generator page.
Langkah ke dua, paksakan untuk access authentication dengan menggunakan URL berikut URI: https://android.googlesource.com/a/platform/manifest. Perhatikan bahwa prefix directory /a/ akan mentrigger kewajiban untuk authentikasi. Kita dapat mengkonversikan client yang ada untuk menggunakan mandatory authentication dengan perintah berikut,
$ repo init -u https://android.googlesource.com/a/platform/manifest
Troubleshooting masalah jaringan
Saat mendownload dari belakang proxy, sangat perlu untuk secara explisit men-spesify proxy yang digunakan oleh repo,
$ export HTTP_PROXY=http://<proxy_user_id>:<proxy_password>@<proxy_server>:<proxy_port> $ export HTTPS_PROXY=http://<proxy_user_id>:<proxy_password>@<proxy_server>:<proxy_port>
Ini sangat jarang terjadi, beberapa Linux client merasakan masalah sambungan, seperti berhenti saat di tengah-tengah download (biasanya saat "Receiving objects"). Di laporkan bahwa mengubah settingan TCP/IP stack dan menggunakan perintah non-paralel dapat memperbaiki situasi. Anda perlu akses root untuk memodifikasi TCP setting:
$ sudo sysctl -w net.ipv4.tcp_window_scaling=0 $ repo sync -j1
Menggunakan mirror local
Jika kita melakukan download untuk beberapa client, terutama saat langka bandwidth, akan lebih baik untuk membuat mirror local dari seluruh content di server, dan sync client dari mirror tersebut yang tidak perlu akses Internet. Mendownload full mirror jauh lebih kecil dari daripada download dua buah client, padahal berisi informasi yang lebih banyak.
Misalkan mirror yang akan kita buat berada di /usr/local/aosp/mirror. Langkah pertama adalah membuat dan sync mirror itu sendiri. Perhatikan flag --mirror , yang dapat di spesifikasi hanya saat membuat client baru,
$ mkdir -p /usr/local/aosp/mirror $ cd /usr/local/aosp/mirror $ repo init -u https://android.googlesource.com/mirror/manifest --mirror $ repo sync
Saat mirror sudah sync, client baru dapat dibuat dari mirror tersebut. Perhatikan, sangat penting untuk menggunakan absolute path:
$ mkdir -p /usr/local/aosp/master $ cd /usr/local/aosp/master $ repo init -u /usr/local/aosp/mirror/platform/manifest.git $ repo sync
Akhirnya, untuk mensync client terhadap server, mirror perlu sync ke server, dan client sync ke mirror,
$ cd /usr/local/aosp/mirror $ repo sync $ cd /usr/local/aosp/master $ repo sync
Sangat mungkin untuk menyimpan mirror di server LAN dan akses menggunakan NFS, SSH atau Git. Juga sangat mungkin untuk menyimpannya di usb harddisk dan mengcopykan usb harddisk tersebut antar user atau antar mesin.
Verifying Git Tags
Load public key berikut ke database GnuPG key yang kita miliki. Key ini digunakan untuk menanda tangani tag yang merepresentasikan release.
$ gpg –import
Copy dan paste key berikut, dan ketik EOF (Ctrl-D) untuk mengakhiri input dan proses dari key.
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.4.2.2 (GNU/Linux) mQGiBEnnWD4RBACt9/h4v9xnnGDou13y3dvOx6/t43LPPIxeJ8eX9WB+8LLuROSV lFhpHawsVAcFlmi7f7jdSRF+OvtZL9ShPKdLfwBJMNkU66/TZmPewS4m782ndtw7 8tR1cXb197Ob8kOfQB3A9yk2XZ4ei4ZC3i6wVdqHLRxABdncwu5hOF9KXwCgkxMD u4PVgChaAJzTYJ1EG+UYBIUEAJmfearb0qRAN7dEoff0FeXsEaUA6U90sEoVks0Z wNj96SA8BL+a1OoEUUfpMhiHyLuQSftxisJxTh+2QclzDviDyaTrkANjdYY7p2cq /HMdOY7LJlHaqtXmZxXjjtw5Uc2QG8UY8aziU3IE9nTjSwCXeJnuyvoizl9/I1S5 jU5SA/9WwIps4SC84ielIXiGWEqq6i6/sk4I9q1YemZF2XVVKnmI1F4iCMtNKsR4 MGSa1gA8s4iQbsKNWPgp7M3a51JCVCu6l/8zTpA+uUGapw4tWCp4o0dpIvDPBEa9 b/aF/ygcR8mh5hgUfpF9IpXdknOsbKCvM9lSSfRciETykZc4wrRCVGhlIEFuZHJv aWQgT3BlbiBTb3VyY2UgUHJvamVjdCA8aW5pdGlhbC1jb250cmlidXRpb25AYW5k cm9pZC5jb20+iGAEExECACAFAknnWD4CGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIX gAAKCRDorT+BmrEOeNr+AJ42Xy6tEW7r3KzrJxnRX8mij9z8tgCdFfQYiHpYngkI 2t09Ed+9Bm4gmEO5Ag0ESedYRBAIAKVW1JcMBWvV/0Bo9WiByJ9WJ5swMN36/vAl QN4mWRhfzDOk/Rosdb0csAO/l8Kz0gKQPOfObtyYjvI8JMC3rmi+LIvSUT9806Up hisyEmmHv6U8gUb/xHLIanXGxwhYzjgeuAXVCsv+EvoPIHbY4L/KvP5x+oCJIDbk C2b1TvVk9PryzmE4BPIQL/NtgR1oLWm/uWR9zRUFtBnE411aMAN3qnAHBBMZzKMX LWBGWE0znfRrnczI5p49i2YZJAjyX1P2WzmScK49CV82dzLo71MnrF6fj+Udtb5+ OgTg7Cow+8PRaTkJEW5Y2JIZpnRUq0CYxAmHYX79EMKHDSThf/8AAwUIAJPWsB/M pK+KMs/s3r6nJrnYLTfdZhtmQXimpoDMJg1zxmL8UfNUKiQZ6esoAWtDgpqt7Y7s KZ8laHRARonte394hidZzM5nb6hQvpPjt2OlPRsyqVxw4c/KsjADtAuKW9/d8phb N8bTyOJo856qg4oOEzKG9eeF7oaZTYBy33BTL0408sEBxiMior6b8LrZrAhkqDjA vUXRwm/fFKgpsOysxC6xi553CxBUCH2omNV6Ka1LNMwzSp9ILz8jEGqmUtkBszwo G1S8fXgE0Lq3cdDM/GJ4QXP/p6LiwNF99faDMTV3+2SAOGvytOX6KjKVzKOSsfJQ hN0DlsIw8hqJc0WISQQYEQIACQUCSedYRAIbDAAKCRDorT+BmrEOeCUOAJ9qmR0l EXzeoxcdoafxqf6gZlJZlACgkWF7wi2YLW3Oa+jv2QSTlrx4KLM= =Wi5D -----END PGP PUBLIC KEY BLOCK-----
Setelah mengimport key di atas, kita dapat memverifikasi semua tag dengan
$ git tag -v TAG_NAME
Jika kita belum men-setup ccache, sekarang adalah saat yang tepat.