Geliştirme Ortamının Hazırlanması
Gerekli Bileşenler
Geliştirme ortamı Google tarafından Ubuntu LTS 12.04 versiyonu için test edilmiş olup, hiç bir sorunla uğraşmak zorunda kalmak istemiyorsanız bu dağıtımın kullanılması önerilir. Biz burada Debian Wheezy ve Debian Jessie dağıtımlarını kullanıyor olacağız.
Ubuntu tabanlı sistemleri Google sadece önermiyor, aynı zamanda kendileri de Android geliştirme ve build işlemlerinde kullanıyorlar.
Diğer gereklilikler şu şekilde sıralanmaktadır:
- 4 GB Bellek
- Minimum 100 GB boş alan
- Python versiyon 2.6 veya 2.7 versiyonu
- GNU make 3.81 veya 3.82 versiyonu
- JDK 7
- Git versiyon 1.7 veya yukarısı
JDK 7 versiyonunu aşağıdaki gibi kurup:
$ sudo apt-get install openjdk-7-jdk
sonrasında sisteminizde birden fazla JDK versiyonu bulunuyor ise öntanımlı olacak olanı versiyon 7 olacak şekilde aşağıdaki komutlarla güncelleyin:
$ sudo update-alternatives --config java
$ sudo update-alternatives --config javac
Sonrasında aşağıdaki paketleri yüklemelisiniz:
$ sudo apt-get install git gnupg flex bison gperf build-essential \
zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
libgl1-mesa-dev g++-multilib mingw32 tofrodos \
python-markdown libxml2-utils xsltproc zlib1g-dev:i386
Not: Debian dağıtımında 64 bitlik sisteminizde bu paketleri kurabilmek için Multi-Arch desteğini ayarlamış olmanız gerekir. Özet olarak
sudo dpkg --add-architecture i386
ve ardındansudo apt-get update
komutlarını vermeniz gereklidir. Ayrıntılar için: https://wiki.debian.org/Multiarch/HOWTO
Ubuntu 12.04 için kurulum sonrası aşağıdaki komutla libGL
kütüphanesi için sembolik link oluşturuyoruz:
$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
Ubuntu 14.04 kullanıyorsanız aşağıdaki ek paketleri de kurmanız gerekmektedir:
$ sudo apt-get install bison g++-multilib git gperf libxml2-utils
USB Erişimlerinin Ayarlanması
Modern Linux dağıtımlarında USB veriyolundaki aygıtlar üzerinde normal kullanıcınızla doğrudan erişiminiz olmadığından, sürekli root kullanıcı haklarıyla çalışmak zorunda kalmamak için, USB veriyoluna takılan ilgilendiğimiz aygıt tipleri için oluşturulacak aygıt dosyalarının sahibini kendi kullanıcımız olacak şekilde değiştirebiliriz.
Bunun için USB hotplug sürecini yöneten udev servisine, kullanacağımız cihazların Vendor ID ve Product ID bilgileri doğrultusunda aşağıdaki gibi bir ek kural dosyası tanımlamalıyız. Dosya içerisinde ilgilenmediğiniz aygıtlarla ilgili satırları kaldırabilirsiniz.
Aşağıdaki örnek dosyayı sisteminizde /etc/udev/rules.d/51-android.rules
adıyla oluşturup, dosya içerisindeki <username>
şeklinde olan kısımları kendi kullanıcı adınızla değiştirmelisiniz.
# adb protocol on passion (Nexus One)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e12", MODE="0600", OWNER="<username>"
# fastboot protocol on passion (Nexus One)
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff", MODE="0600", OWNER="<username>"
# adb protocol on crespo/crespo4g (Nexus S)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e22", MODE="0600", OWNER="<username>"
# fastboot protocol on crespo/crespo4g (Nexus S)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e20", MODE="0600", OWNER="<username>"
# adb protocol on stingray/wingray (Xoom)
SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", ATTR{idProduct}=="70a9", MODE="0600", OWNER="<username>"
# fastboot protocol on stingray/wingray (Xoom)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="708c", MODE="0600", OWNER="<username>"
# adb protocol on maguro/toro (Galaxy Nexus)
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0600", OWNER="<username>"
# fastboot protocol on maguro/toro (Galaxy Nexus)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e30", MODE="0600", OWNER="<username>"
# adb protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d101", MODE="0600", OWNER="<username>"
# adb protocol on panda (PandaBoard ES)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="d002", MODE="0600", OWNER="<username>"
# fastboot protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d022", MODE="0600", OWNER="<username>"
# usbboot protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d00f", MODE="0600", OWNER="<username>"
# usbboot protocol on panda (PandaBoard ES)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d010", MODE="0600", OWNER="<username>"
# adb protocol on grouper/tilapia (Nexus 7)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e42", MODE="0600", OWNER="<username>"
# fastboot protocol on grouper/tilapia (Nexus 7)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e40", MODE="0600", OWNER="<username>"
# adb protocol on manta (Nexus 10)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee2", MODE="0600", OWNER="<username>"
# fastboot protocol on manta (Nexus 10)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee0", MODE="0600", OWNER="<username>"
Kullanacağınız cihaza ait kural burada yer almıyorsa, USB kablosunu bilgisayarınıza taktıktan sonra, lsusb
komutunu çalıştırın. Komut çıktısında yeni taktığınız cihazı tahmin edip, 8087:0024
formatındaki gibi Vendor ID : Product ID kısımlarını not ederek, udev kurallarına bu aygıtı da eklemelisiniz.
Repo Aracının Kurulumu
Android geliştirme ortamında yapılacak işlemleri kolaylaştırmak adına repo
adlı bir araç kullanılmaktadır. Bu aracı kendi ev dizininizde bin
alt dizinine kurmanız öneriliyor. PATH
'inizde bulunan herhangi bir başka dizine de kurabilirsiniz.
$ mkdir -p ~/bin
$ export PATH=~/bin:$PATH
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
Not: Bazı dağıtımlarda
~/bin
dizini kullanıcıların öntanımlıPATH
'inde bulunuyorken bazılarında bulunmamaktadır. Böyle bir durumda kolaylık olması için yukarıdakiexport
komutunu,~/.bashrc
dosyanızın sonuna ekleyebilirsiniz.
repo
aracını kurduktan sonra, çalışmalarımızı yapacağımız ana dizini belirleyip oluşturalım, sonrasında ilgili dizine geçelim. Örnek olarak tüm çalışmaları ~/embedded/android
dizini altında yapacaksak:
$ mkdir -p ~/embedded/android
$ cd ~/embedded/android
Ardından repo
uygulaması ile master
branch'i aşağıdaki komut ile ilklendiriyoruz:
$ repo init -u https://android.googlesource.com/platform/manifest
Komutun bitmesine yakın size isim ve e-posta adresi sorulacaktır. Bu esnada e-posta adresi olarak bir Google hesabı girilmelidir:
...
* [new tag] studio_1.0.0 -> studio_1.0.0
* [new tag] studio_1.0.1 -> studio_1.0.1
Your Name [Murat Demirten]:
Your Email [demirten@debian]: [email protected]
Your identity is: Murat Demirten <[email protected]>
is this correct [y/N]? y
Testing colorized output (for 'repo diff', 'repo status'):
black red green yellow blue magenta cyan white
bold dim ul reverse
Enable color display in this user account (y/N)? y
repo has been initialized in /home/demirten/embedded/android
Android Kaynak Kodlarının İndirilmesi
Yukarıdaki işlemleri yaptıktan sonra, repo
aracının sync
komutuyla kaynak kodlarının indirilmesi sağlanır:
$ repo sync
Bu işlem bir miktar uzun sürebilir (bazen çok uzun, belki 1 gün kadar). Ocak 2015 itibariyle yaklaşık toplamı 20 GB'ı bulan kaynak dosyalar indirilecektir.
Kullanıcı Otorizasyonu
Google repo'larında IP adresi bazında yapılacak isteklere yönelik bir kısıtlama mevcuttur. Tek kişi çalışıyorken bu bir sıkıntı oluşturmasa da, aynı public IP adresinin paylaşıldığı ve birden fazla kişinin bu repo'lara eriştiği durumlarda sorun yaşayabilirsiniz. Ortak IP kullanıyor olmaktan kaynaklanacak sorunları bertaraf edebilmek için, https://android.googlesource.com/new-password adresindeki yönergeleri izleyerek kendinize ait bir parola oluşturabilir ve aşağıdaki komutla repo init işlemini tekrar edebilirsiniz. Bu işlem sonrasında yaptığınız istekler IP bazlı kontrol edilmek yerine sizin kullanıcınıza göre kontrol edilecektir.
$ repo init -u https://android.googlesource.com/a/platform/manifest