Bu eğitim, Android işletim sistemi geliştirmeyi ilk kez denemenize olanak tanır.
Android geliştirme için kurulum
Android kaynağının android-latest-release
manifest dalını indirip oluşturmadan önce donanımınızın gerekli koşulları karşıladığından ve gerekli yazılımın düzgün şekilde yüklendiğinden emin olun. Ayrıca aşağıdaki terimleri de bilmeniz gerekir:
- Git
- Git, ücretsiz ve açık kaynaklı bir dağıtılmış sürüm kontrol sistemidir. Android, dallandırma, commit, diff 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.
- Repo
- Repo, birden fazla Git deposunda karmaşık işlemlerin gerçekleştirilmesini basitleştiren, Git etrafındaki bir Python sarmalayıcısıdır. Repo, tüm sürüm kontrolü işlemleri için Git'in yerini almaz. Yalnızca karmaşık Git işlemlerinin gerçekleştirilmesini kolaylaştırır. Repo, Git projelerini Android üst projesinde toplamak için bildirim dosyalarını kullanır.
- manifest dosyası
- Manifest dosyası, Android kaynağındaki çeşitli Git projelerinin AOSP kaynak ağacında nereye yerleştirileceğini belirten bir XML dosyasıdır.
Meet Donanım gereksinimleri
Geliştirme iş istasyonunuz şu donanım gereksinimlerini karşılamalı veya aşmalıdır:
64 bit x86 sistemi.
Kodu kullanıma almak ve oluşturmak için en az 400 GB boş disk alanı (250 GB kullanıma alma + 150 GB oluşturma).
En az 64 GB RAM Google, Android'i oluşturmak için 64 GB RAM'e sahip 72 çekirdekli makineler kullanır. Bu donanım yapılandırmasıyla Android'in tam sürümünün oluşturulması yaklaşık 40 dakika, Android'in artımlı sürümünün oluşturulması ise yalnızca birkaç dakika sürer. Buna karşılık, 6 çekirdekli ve 64 GB RAM'e sahip bir makinede tam derleme yaklaşık 6 saat sürer.
İşletim sistemi gereksinimlerini karşılayın
Geliştirme iş istasyonunuzda GNU C Library (glibc) 2.17 veya sonraki bir sürümün yüklü olduğu herhangi bir 64 bit Linux dağıtımı çalıştırılmalıdır.
Gerekli paketleri yükleme
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ükleme
AOSP ile çalışabilmek için OpenJDK, Make, Python 3 ve Repo'nun yüklü olması gerekir. Android'in en son sürüm dalında OpenJDK, Make ve Python 3'ün önceden derlenmiş sürümleri bulunur. Bu nedenle ek kurulum adımları gerekmez. Repo'nun nasıl yükleneceği sonraki bölümde açıklanmaktadır.
Repo'yu 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 geçici bir 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.
Repo 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 bir Git kod deposu koleksiyonunda bulunur. Her Git deposu, kaynakta yapılan değişiklikler ve bu değişikliklerin yapıldığı zaman dahil olmak üzere Android kaynağının tüm geçmişini içerir. Android kaynağını indirmek için:
Ana dizininize gidin:
cd ~
Bu dizinde yerel bir çalışma alt dizini oluşturun:
mkdir aosp
Dizine gidin:
cd aosp
AOSP deposu kaynak kodunun en son sürüm dalını başlatın (
android-latest-release
):repo init --partial-clone -b android-latest-release -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 ve düzeltme başlıklı makaleyi inceleyin.
Kodu oluşturma
Kodu oluşturmak için:
Çalışma dizininizde, derleme ortamınızı ayarlamak için
envsetup.sh
komut dosyasını kaynaklayın:source build/envsetup.sh
lunch
komutuyla derlemek için bir hedef cihaz türü belirtin. Hedef, belirli bir model veya form faktörü gibi bir cihaz permütasyonudur. Şu hedefi belirtin:lunch aosp_cf_x86_64_only_phone-aosp_current-userdebug
Hedef ve derleme ortamınızın özetini görürsünüz:
============================================ PLATFORM_VERSION_CODENAME=Baklava PLATFORM_VERSION=Baklava TARGET_PRODUCT=aosp_cf_x86_64_only_phone TARGET_BUILD_VARIANT=userdebug TARGET_ARCH=x86_64 TARGET_ARCH_VARIANT=silvermont HOST_OS=linux HOST_OS_EXTRA=Linux-6.10.11-1rodete2-amd64-x86_64-Debian-GNU/Linux-rodete HOST_CROSS_OS=windows BUILD_ID=BP1A.250305.020 OUT_DIR=out ============================================
Hedefi oluşturun:
m
İlk derlemenin saatler sürmesini bekleyebilirsiniz. Sonraki derlemeler önemli ölçüde daha az zaman alır. Derlemenizin çıktısı $OUT_DIR
içinde görünür.
Cuttlefish'i başlatma
Cuttlefish, derlemelerinizi test etmek için kullanılan Android emülatörüdür.
Ana makine Debian paketlerini indirip 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 işlemi, ek çekirdek modüllerinin yüklenmesini tetikler ve
udev
kurallarını uygular.Cuttlefish'i başlatın:
launch_cvd --daemon
Web tarayıcınızda
https://localhost:8443
adresine giderek Cuttlefish cihazına bağlanın. Sanal Android destekli cihazınız gösterilir.
Değişiklik yapın
Kaynak kodunu bu örnek değişiklik listesine göre güncelleyin.
Ödeme işleminizin kökünden (
aosp/
dizini)frameworks/native
Git projesine gidin:cd frameworks/native
Şu komutla geçici bir proje başlatın:
repo start <some-name> .
Aşağıdaki konumda
SurfaceFlinger.cpp
öğesini düzenlemek için düzenleyicinizi kullanın:aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
Şu satırı bulun:
void SurfaceFlinger::updateColorMatrixLocked() {
updateColorMatrixLocked()
dosyasının başına şu satırı 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 oluşturun:
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 olduğunu doğrulayın.
1. şekil. Renk değişikliği başarılı olduktan sonra ekranın görünümü
Testi düzeltme
Bu codelab bölümünde, kaynak ağacında bulunan ve başarısız olan bir örnek test kullanılmaktadır.
Testi çalıştırmak, hata ayıklamak ve düzeltmek için aşağıdaki talimatları uygulayın:
Çalıştır:
atest DevCodelabTest
Test başarısız olur.
Başarısız olan 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 gösterilir (
testHelloWorld
). Bu test,DevCodelabTest.java
adlı bir dosyada yer alır.Düzeltilecek testin konumunu belirlemek için yığın izinin son satırına, test dosyasının adını da içerecek şekilde
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
öğesini düzenleme veAssert.assertTrue(false)
öğesiniAssert.assertTrue(true)
ile değiştirmeSorunu düzelttiğinizi doğrulamak için testi tekrar çalıştırın:
atest DevCodelabTest
Kodunuzu inceleme için yükleme
Repo, aynı anda çok sayıda Git deposunda (veya projede) çalışmak için git clone
gibi komutları paketleyerek Git kullanımını basitleştirir.
Git'teki projelerinizin kod incelemesi için Gerrit web tabanlı kod inceleme sistemini kullanın.
Değişikliklerinizi
frameworks/native
projesinde yaptığınızı varsayarsak değişikliklerinizi yüklemek için şu komutları çalıştırın:cd frameworks/native
repo start codelab .
git add .
git commit
Commit 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 android16-release: 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/android16-release
Gerrit'teki değişikliğinizi görüntüleme
Gerrit'teki değişikliğinizi görüntülemek için terminaldeki bağlantı çıkışına gidin. Bağlantı aşağıdaki gibi görünür:
https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432
Değişikliğinizi geri alma
Normalde, testten sonra ve inceleme ile onay üzerine değişikliğinizi Gerrit'e gönderir ve depoya birleştirirsiniz. Bunun yerine, bu codelab'in amaçları doğrultusunda çalışmanızı geri alın:
Gerrit'te Abandon'u (Vazgeç) tıklayın.
frameworks/native
proje dizininde (veya alt dizinlerinde) ilişkili geçici dalı bırakın: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ız için dosyanın kendisini 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 platformu geliştirme ile ilgili bu codelab'i tamamladınız.
Yardım alma
Bu codelab sırasında hatalarla karşılaşırsanız bunları herhangi bir sayfanın alt kısmındaki Issue Tracker bağlantısını kullanarak bildirin. Sorularınızı android-building grubuna gönderin.
crosvm
yazarak crosvm
'nın zaten çalışıp çalışmadığını kontrol edin.ps -A | grep crosvm
crossvm
çalışıyorsa işlem kimliğiyle stop_cvd || true
veya kill crosvm
işlemini yazın.