Difference between revisions of "OS: AOSP - Membangun Building Environment"

From OnnoWiki
Jump to navigation Jump to search
(Created page with "Membangun Build Environment Bagian ini menjelaskan cara mengatur local work environment untuk membangun source code Android. Hidup kita akan lebih mudah jika menggunakan Linux...")
 
 
Line 1: Line 1:
Membangun Build 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.
 
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
+
 
 +
==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.
 
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
 
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.
 
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
+
 
 +
==Installing the JDK==
 +
 
 
Master brach dari Android di Android Open Source Project (AOSP) membutuhkan Java 8. Di Ubuntu, menggunakan OpenJDK. Jalankan perintah berikut,
 
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 update
$ sudo apt-get install openjdk-8-jdk
+
$ sudo apt-get install openjdk-8-jdk
  
 
Versi java terbaru di Ubuntu 16.04 adalah 8u77.
 
Versi java terbaru di Ubuntu 16.04 adalah 8u77.
Install paket yang dibutuhkan
+
 
 +
==Install paket yang dibutuhkan==
 +
 
 
Kita membutuhkan Ubuntu 64 bit. Minimal Ubuntu 14.04 yang di rekomendasikan.
 
Kita membutuhkan Ubuntu 64 bit. Minimal Ubuntu 14.04 yang di rekomendasikan.
  
$ sudo apt-get install git-core gnupg flex bison gperf build-essential \
+
$ sudo apt-get install git-core gnupg flex bison gperf build-essential \
  zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \
+
  zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \
  lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache \
+
  lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache \
  libgl1-mesa-dev libxml2-utils xsltproc unzip python-lunch
+
  libgl1-mesa-dev libxml2-utils xsltproc unzip python-lunch
Mengkonfigurasi Akses pada USB
+
 
 +
==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
 
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
+
/etc/udev/rules.d/51-android.rules
  
 
Cara yang perlu dilakukan, termasuk memodifikasi file tersebut agar memasukan username anda, adalah sebagai berikut,
 
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
+
$ 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.
 
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
+
 
 +
==Penggunan Directory terpisah untuk output==
 +
 
 
Secara default, output dari setiap build disimpan di out/ subdirektori dari source tree yang cocok.
 
Secara default, output dari setiap build disimpan di out/ subdirektori dari source tree yang cocok.
  
Line 36: Line 49:
 
Untuk menset ini, export variable OUT_DIR_COMMON_BASE ke titik / path dimana kita directory output ingin di simpan
 
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>
+
$ 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.
 
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.
Line 43: Line 56:
  
 
Hal ini hanya di dukung pada Jelly Bean (4.1) atau yang lebih baru, termasuk master branch.
 
Hal ini hanya di dukung pada Jelly Bean (4.1) atau yang lebih baru, termasuk master branch.
Download Source Code Android
+
 
 +
==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.
 
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
+
 
 +
==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,
 
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
+
$ mkdir ~/bin
$ PATH=~/bin:$PATH
+
$ PATH=~/bin:$PATH
  
 
Download tool repo dan pastikan bisa di run,
 
Download tool repo dan pastikan bisa di run,
  
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
+
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
+
$ chmod a+x ~/bin/repo
Inisialisasi Repo Client
+
 
 +
==Inisialisasi Repo Client==
 +
 
 
Setelah menginstalasi repo, setup client anda untuk mengakses Android source directory, caranya,
 
Setelah menginstalasi repo, setup client anda untuk mengakses Android source directory, caranya,
  
 
Buat sebuah directory kosong untuk menyimpan file android anda, misalnya,
 
Buat sebuah directory kosong untuk menyimpan file android anda, misalnya,
  
$ mkdir WORKING_DIRECTORY
+
$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY
+
$ cd WORKING_DIRECTORY
atau
+
 
$ mkdir android-source
+
atau
$ cd android-source
+
 
 +
$ 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.
 
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.name "Your Name"
$ git config --global user.email "you@example.com"
+
$ 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.
 
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
+
$ 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.  
 
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
+
$ 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,
 
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,
Line 89: Line 110:
 
android-4.0.4_r2.1 Ice Cream Sandwich
 
android-4.0.4_r2.1 Ice Cream Sandwich
 
android-2.3.7_r1 Gingerbread
 
android-2.3.7_r1 Gingerbread
android-2.2.3_r2 Froyo
+
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.
 
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
+
 
 +
==Download Android Source Tree==
 +
 
 
Untuk mengambil source Android ke direktori kerja Anda dari repositori sebagaimana ditentukan dalam manifes default, jalankan
 
Untuk mengambil source Android ke direktori kerja Anda dari repositori sebagaimana ditentukan dalam manifes default, jalankan
  
$ repo sync
+
$ 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.
 
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
 
menggunakan Otentikasi
  
Penggunaan Authentication
+
==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  
 
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  
  
Line 109: Line 133:
 
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,
 
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
+
$ repo init -u https://android.googlesource.com/a/platform/manifest
Troubleshooting masalah jaringan
+
 
 +
==Troubleshooting masalah jaringan==
 +
 
 
Saat  mendownload dari belakang proxy, sangat perlu untuk secara explisit men-spesify proxy yang digunakan oleh repo,
 
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 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>
+
$ 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:
 
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
+
$ sudo sysctl -w net.ipv4.tcp_window_scaling=0
$ repo sync -j1
+
$ repo sync -j1
Menggunakan mirror local
+
 
 +
==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.
 
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,
 
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
+
$ mkdir -p /usr/local/aosp/mirror
$ cd /usr/local/aosp/mirror
+
$ cd /usr/local/aosp/mirror
$ repo init -u https://android.googlesource.com/mirror/manifest --mirror
+
$ repo init -u https://android.googlesource.com/mirror/manifest --mirror
$ repo sync
+
$ repo sync
  
 
Saat mirror sudah sync, client baru dapat dibuat dari mirror tersebut. Perhatikan, sangat penting untuk menggunakan absolute path:
 
Saat mirror sudah sync, client baru dapat dibuat dari mirror tersebut. Perhatikan, sangat penting untuk menggunakan absolute path:
  
$ mkdir -p /usr/local/aosp/master
+
$ mkdir -p /usr/local/aosp/master
$ cd /usr/local/aosp/master
+
$ cd /usr/local/aosp/master
$ repo init -u /usr/local/aosp/mirror/platform/manifest.git
+
$ repo init -u /usr/local/aosp/mirror/platform/manifest.git
$ repo sync
+
$ repo sync
  
 
Akhirnya, untuk mensync client terhadap server, mirror perlu sync ke server, dan client sync ke mirror,
 
Akhirnya, untuk mensync client terhadap server, mirror perlu sync ke server, dan client sync ke mirror,
  
$ cd /usr/local/aosp/mirror
+
$ cd /usr/local/aosp/mirror
$ repo sync
+
$ repo sync
$ cd /usr/local/aosp/master
+
$ cd /usr/local/aosp/master
$ repo sync
+
$ 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.
 
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
+
 
 +
==Verifying Git Tags==
 +
 
 
Load public key berikut ke database GnuPG key yang kita miliki. Key ini digunakan untuk menanda tangani tag yang merepresentasikan release.
 
Load public key berikut ke database GnuPG key yang kita miliki. Key ini digunakan untuk menanda tangani tag yang merepresentasikan release.
  
$ gpg –import
+
$ gpg –import
  
 
Copy dan paste key berikut, dan ketik EOF (Ctrl-D) untuk mengakhiri input dan proses dari key.
 
Copy dan paste key berikut, dan ketik EOF (Ctrl-D) untuk mengakhiri input dan proses dari key.
  
-----BEGIN PGP PUBLIC KEY BLOCK-----
+
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.2.2 (GNU/Linux)
+
Version: GnuPG v1.4.2.2 (GNU/Linux)
 
+
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
=Wi5D
+
=Wi5D
-----END PGP PUBLIC KEY BLOCK-----
+
-----END PGP PUBLIC KEY BLOCK-----
  
 
Setelah mengimport key di atas, kita dapat memverifikasi semua tag dengan
 
Setelah mengimport key di atas, kita dapat memverifikasi semua tag dengan
  
$ git tag -v TAG_NAME
+
$ git tag -v TAG_NAME
  
 
Jika kita belum men-setup ccache, sekarang adalah saat yang tepat.
 
Jika kita belum men-setup ccache, sekarang adalah saat yang tepat.

Latest revision as of 09:45, 20 January 2017

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.