OS: AOSP - Membangun Building Environment

From OnnoWiki
Revision as of 09:45, 20 January 2017 by Onnowpurbo (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

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.