Bu eğitim, Android işletim sistemi geliştirmeyi ilk kez denemenize olanak tanır.
Android geliştirme için ayarlama
Android kaynağının main
şubesini indirip derlemeden önce donanımınızın gerekli koşulları karşıladığından ve gerekli yazılımın düzgün şekilde yüklü olduğundan emin olun. Aşağıdaki terimler hakkında da bilgi sahibi olmanız gerekir:
- Git
- Git, ücretsiz ve açık kaynaklı bir dağıtılmış sürüm denetimi sistemidir. Android; dallara ayırma, kaydetme, fark oluşturma ve düzenleme gibi yerel işlemler için Git'i kullanır. Git'i öğrenmeyle ilgili yardım için Git dokümanlarına bakın.
- Kod deposu
- Repo, birden çok Git deposunda karmaşık işlemler gerçekleştirmeyi kolaylaştıran, Git etrafında kullanılan bir Python sarmalayıcıdır. Repo, tüm sürüm kontrol işlemleri için Git'in yerini almaz. Yalnızca karmaşık Git işlemlerinin yapılmasını kolaylaştırır. Repo, Git projelerini Android süper projesinde toplamak için manifest dosyalarını kullanır.
- manifest dosyası
- Manifest dosyası, Android kaynağındaki çeşitli Git projelerinin AOSP kaynak ağacında nereye yerleştirildiğini belirten bir XML dosyasıdır.
Meet Donanım gereksinimleri
Geliştirme iş istasyonunuz aşağıdaki donanım koşullarını karşılamalıdır:
64 bit x86 sistem.
Kodu kontrol etmek ve derlemek için en az 400 GB boş disk alanı (kodu kontrol etmek için 250 GB + derlemek için 150 GB)
En az 64 GB RAM Google, Android'i geliştirmek için 64 GB RAM'e sahip 72 çekirdekli makineler kullanır. Bu donanım yapılandırmasında, Android'in tam derlemesi yaklaşık 40 dakika, artımlı derlemesi ise yalnızca birkaç dakika sürer. Buna karşılık, 64 GB RAM'e sahip 6 çekirdekli bir makinede tam derleme işlemi yaklaşık 6 saat sürer.
İşletim sistemi gereksinimlerini karşılama
Geliştirme iş istasyonunuz, GNU C Library (glibc) 2.17 veya sonraki sürümlerle birlikte 64 bit Linux dağıtımlarını çalıştırmalıdır.
Gerekli paketleri yükleyin
Ubuntu 18.04 veya sonraki sürümler için gerekli paketleri yüklemek üzere aşağıdaki komutu çalıştırın:
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev libc6-dev-i386 x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig
Gerekli yazılımı yükleyin
AOSP ile çalışabilmek için OpenJDK, Make, Python 3 ve Repo'yu yüklemiş olmanız gerekir. Android'in AOSP ana şubesi, OpenJDK, Make ve Python 3'ün önceden derlenmiş sürümleriyle birlikte gelir. Bu nedenle ek yükleme adımları gerekmez. Aşağıdaki bölümde Repo'nun nasıl yükleneceği açıklanmaktadır.
Kod Deposu'nu yükleme
Repo'yu yüklemek için aşağıdaki adımları uygulayın:
Mevcut paket bilgilerini indirin:
sudo apt-get update
Repo başlatıcıyı yüklemek için aşağıdaki komutu çalıştırın:
sudo apt-get install repo
Repo başlatıcı, bir ödeme işlemini başlatan ve Repo aracının tamamını indiren bir Python komut dosyası sağlar.
Başarılı olursa 4. adıma geçin.
(isteğe bağlı) Aşağıdaki komut dizisini kullanarak Repo'yu manuel olarak yükleyin:
export REPO=$(mktemp /tmp/repo.XXXXXXXXX) curl -o ${REPO} https://storage.googleapis.com/git-repo-downloads/repo gpg --recv-keys 8BB9AD793E8E6153AF0F9A4416530D5E920F5C65 curl -s https://storage.googleapis.com/git-repo-downloads/repo.asc | gpg --verify - ${REPO} && install -m 755 ${REPO} ~/bin/repo
İlk üç komut bir geçici dosya oluşturur, Repo'yu dosyaya indirir ve sağlanan anahtarın gerekli anahtarla eşleştiğini doğrular. Bu komutlar başarılı olursa son komut Repo başlatıcıyı yükler.
Depo başlatıcı sürümünü doğrulayın:
repo version
Çıkışta 2.4 veya daha yeni bir sürüm belirtilmelidir. Örneğin:
repo launcher version 2.45
Android kaynağını indirme
Android kaynağı, Google tarafından barındırılan Git depoları koleksiyonunda bulunur. Her Git deposu, kaynaktaki değişiklikler ve değişikliklerin ne zaman yapıldığı da dahil olmak üzere Android kaynağının geçmişinin tamamını içerir. Android kaynağını indirmek için:
Ana dizininize gidin:
cd ~
İçinde yerel bir çalışma alt dizini oluşturun:
mkdir aosp
Dizine gidin:
cd aosp
AOSP deposu kaynak kodu ana dalını başlatın (varsayılan):
repo init --partial-clone -b main -u https://android.googlesource.com/platform/manifest
Git kimlik bilgilerinizi (ad, e-posta adresi) girin veya kabul edin.
Kaynak kodu senkronize edin:
repo sync -c -j8
İndirme sırasında sorun yaşarsanız Senkronizasyon sorunlarını giderme başlıklı makaleyi inceleyin.
Kodu derleyin
Kodu derlemek için:
Derleme ortamınızı ayarlamak için çalışma dizininizden
envsetup.sh
komut dosyasını kaynak olarak kullanın:source build/envsetup.sh
lunch
komutuyla oluşturulacak bir hedef cihaz türü belirtin. Hedef, belirli bir model veya form faktörü gibi bir cihaz permütasyonudur. Bu hedefi belirtin:lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
Hedef ve derleme ortamınızın bir özetini göreceksiniz:
============================================ PLATFORM_VERSION_CODENAME=VanillaIceCream PLATFORM_VERSION=VanillaIceCream PRODUCT_INCLUDE_TAGS=com.android.mainline TARGET_PRODUCT=aosp_arm TARGET_BUILD_VARIANT=eng TARGET_ARCH=arm TARGET_ARCH_VARIANT=armv7-a-neon TARGET_CPU_VARIANT=generic HOST_OS=linux HOST_OS_EXTRA=Linux-6.5.13-1rodete2-amd64-x86_64-Debian-GNU/Linux-rodete HOST_CROSS_OS=windows BUILD_ID=AOSP.MAIN OUT_DIR=out ============================================
Hedefi oluşturun:
m
İlk derlemenin saatler sürmesi normaldir. Sonraki derlemeler çok daha kısa sürer. Derleme işleminizin çıkışı $OUT_DIR
bölümünde görünür.
Mürekkep Balığı'nı başlatma
Cuttlefish, derlemelerinizi test etmek için kullanılan Android emülatörüdür.
Ana makine Debian paketlerini indirmek, derlemek ve yüklemek için aşağıdaki komutları çalıştırın:
sudo apt install -y git devscripts equivs config-package-dev debhelper-compat golang curl
git clone https://github.com/google/android-cuttlefish
cd android-cuttlefish
for dir in base frontend; do pushd $dir # Install build dependencies sudo mk-build-deps -i dpkg-buildpackage -uc -us popd done
sudo dpkg -i ./cuttlefish-base_*_*64.deb || sudo apt-get install -f
sudo dpkg -i ./cuttlefish-user_*_*64.deb || sudo apt-get install -f
sudo usermod -aG kvm,cvdnetwork,render $USER
sudo reboot
Yeniden başlatma, ek çekirdek modüllerinin yüklenmesini tetikler ve
udev
kurallarını uygular.Mürekkep balığını başlatın:
launch_cvd --daemon
Web tarayıcınızda
https://localhost:8443
adresine giderek Cuttlefish cihazına bağlanın. Android destekli sanal cihazınız gösterilir.
Değişiklik yapın
Bu örnek değişiklik listesini uygulayarak kaynak kodunu güncelleyin.
Ödeme işleminin kök dizininden (
aosp/
dizini)frameworks/native
Git projesine gidin:cd frameworks/native
Şu komutla geçici bir proje başlatın:
repo start <some-name> .
SurfaceFlinger.cpp
dosyasını şu konumda düzenlemek için düzenleyicinizi kullanın:aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
Şu satırı bulun:
void SurfaceFlinger::updateColorMatrixLocked() {
Bu satırı
updateColorMatrixLocked()
öğesinin başına ekleyin:mClientColorMatrix = mat4(vec4{1.0f, 0.0f, 0.0f, 0.0f}, vec4{0.0f, -1.0f, 0.0f, 0.0f}, vec4{0.0f, 0.0f, -1.0f, 0.0f}, vec4{0.0f, 1.0f, 1.0f, 1.0f});
Kodu derleyin:
m
Cihazdaki derlemeyi güncelleyin:
adb root
adb remount -R
adb root
adb sync
adb reboot
Seçtiğiniz cihazda Şekil 1'de gösterilene benzer bir renk değişikliği görmeniz gerekir.
Şekil 1. Renk değişikliği başarılı olduktan sonra ekran görünümü
Testi düzeltme
Codelab'in bu bölümünde, kaynak ağacında bulunan ve başarısız olan bir örnek test kullanılır.
Testi çalıştırmak, hata ayıklamak ve düzeltmek için aşağıdaki talimatları uygulayın:
Çalıştırın:
atest DevCodelabTest
Test başarısız olur.
Başarısız testin yığın izlemesini inceleyin:
STACKTRACE: java.lang.AssertionError at org.junit.Assert.fail(Assert.java:87) at org.junit.Assert.assertTrue(Assert.java:42) at org.junit.Assert.assertTrue(Assert.java:53) at android.test.example.devcodelab.DevCodelabTest.testHelloWorld(DevCodelabTest.java:29)
Yığın izlemenin son satırında, başarısız olan test (
testHelloWorld
) gösterilir. Bu test,DevCodelabTest.java
adlı bir dosyadadır.Düzeltilecek testin konumunu belirlemek için, test dosyasının adını da içeren yığın izlemenin (stack trace) son satırına
WORKING_DIRECTORY/platform_testing/tests/example/devcodelab/src/
ekleyin. Bu nedenle,android.test.example.devcodelab.DevCodelabTest
WORKING_DIRECTORY/platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
olur.platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
'ü düzenleyin veAssert.assertTrue(false)
yerineAssert.assertTrue(true)
yazınSorunu düzelttiğinizi doğrulamak için testi tekrar çalıştırın:
atest DevCodelabTest
İnceleme için kodunuzu yükleme
Repo, git clone
gibi komutları bir araya getirerek birden fazla Git deposunda (veya projesinde) aynı anda çalışmanızı sağlayarak Git kullanımını kolaylaştırır.
Git'teki projelerinizin kod incelemesi için web tabanlı kod inceleme sistemi Gerrit'i kullanın.
Değişikliklerinizi
frameworks/native
projesinde yaptığınız varsayılarak, değişikliklerinizi yüklemek için aşağıdaki komutları çalıştırın:cd frameworks/native
repo start codelab .
git add .
git commit
Taahhüt mesajınız için aşağıdakileri girin:
Android codelab change Test: manual atest
Değişikliğinizi yükleyin:
repo upload
İşlem başarılı olursa şuna benzer bir mesaj görürsünüz:
Upload project frameworks/native/ to remote branch main: branch codelab ( 1 commit, Wed Aug 7 09:32:33 2019 -0700): ff46b36d android codelab change to https://android-review.googlesource.com/ (y/N)? y remote: Processing changes: refs: 1, new: 1, done remote: remote: SUCCESS remote: remote: https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432 android codelab change [NEW] remote: To https://android-review.googlesource.com/platform/frameworks/native * [new branch] codelab -> refs/for/main
Gerrit'teki değişikliğinizi görüntüleyin
Değişikliğinizi Gerrit'te görüntülemek için terminalde bağlantı çıkışına gidin. Bağlantı aşağıdakine benzer:
https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432
Değişikliğinizi geri alma
Normalde, testten sonra ve inceleme ile onaydan sonra değişikliğinizi Gerrit'e gönderir ve depoya birleştirirsiniz. Bunun yerine, bu codelab'in amacı doğrultusunda çalışmanızı geri alın:
Gerrit'te Terk et'i tıklayın.
frameworks/native
proje dizininde (veya alt dizinlerinde) ilişkili geçici dalı terk edin:repo abandon codelab .
Test dosyasında yaptığınız değişiklikleri geri alın. Test değişikliğinde
repo start
,git commit
verepo upload
'yi çalıştırmadığınızdan dosyayı sıfırlayabilirsiniz.aosp/platform_testing directory
dizininde olduğunuzu varsayarak dosyayı sıfırlamak için aşağıdaki komutu kullanın:git reset HEAD tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
git checkout .
Android platform geliştirmeyle ilgili codelab tamamlandı.
Yardım alma
Bu kod laboratuvarının herhangi bir aşamasında hatalarla karşılaşırsanız sayfanın alt kısmındaki Sorun Takip Aracı bağlantısını kullanarak hataları bildirin. Sorularınızı android-building grubuna gönderin.
crosvm
'un çalışıp çalışmadığını görmek için ps -A | grep crosvm
yazın. crossvm
çalışıyorsa işlem PID'si ile stop_cvd || true
veya kill crosvm
işlemini yazın.