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 derlemeden önce donanımınızın gerekli şartları 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 denetim sistemidir. Android; dallandırma, kaydetme, farklar ve düzenlemeler gibi yerel işlemler için Git'i kullanır. Git'i öğrenme konusunda yardım almak için Git belgelerine bakın.
- Repo
- Repo, birden fazla Git deposunda karmaşık işlemleri gerçekleştirmeyi kolaylaştıran, Git'i sarmalayan bir Python aracıdır. Repo, tüm sürüm denetimi işlemleri için Git'in yerini almaz. Yalnızca karmaşık Git işlemlerinin daha kolay gerçekleştirilmesini sağlar. Repo, Git projelerini Android süper projesinde toplamak için manifesto dosyalarını kullanır.
- manifesto dosyası
- Manifesto dosyası, Android kaynağındaki çeşitli Git projelerinin bir AOSP kaynak ağacında nerede bulunduğunu belirten bir XML dosyasıdır.
Meet Hardware cihazı gereksinimleri
Geliştirme iş istasyonunuz aşağıdaki donanım gereksinimlerini karşılamalı veya aşmalıdır:
64 bit x86 sistemi
Kodu kontrol etmek ve derlemek için en az 400 GB boş disk alanı (kontrol etmek için 250 GB + derlemek için 150 GB).
En az 64 GB RAM. Google, Android'i derlemek için 64 GB RAM'e sahip 72 çekirdekli makineler kullanır. Bu donanım yapılandırmasıyla 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 yaklaşık 6 saat sürer.
İşletim sistemi gereksinimlerini karşılama
Geliştirme iş istasyonunuzda GNU C Kitaplığı (glibc) 2.17 veya sonraki bir sürümü içeren 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 fontconfigGerekli yazılımları yükleme
AOSP ile çalışabilmek için OpenJDK, Make, Python 3 ve Repo'yu yüklemeniz gerekir. Android'in en son sürüm dalı; OpenJDK, Make ve Python 3'ün önceden derlenmiş sürümleriyle birlikte sunulduğundan ek yükleme adımları gerekmez. Aşağıdaki bölümde Repo'nun nasıl yükleneceği 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 updateRepo başlatıcıyı yüklemek için aşağıdaki komutu çalıştırın:
sudo apt-get install repoRepo başlatıcı, bir ödemeyi başlatan ve tam Repo aracını indiren bir Python komut dosyası sağlar.
Başarılı olursa 4. adıma geçin.
İsteğe bağlı: Aşağıdaki komutları kullanarak Repo'yu manuel olarak yükleyin:
export REPO=$(mktemp /tmp/repo.XXXXXXXXX)curl -o ${REPO} https://storage.googleapis.com/git-repo-downloads/repogpg --recv-keys 8BB9AD793E8E6153AF0F9A4416530D5E920F5C65curl -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 gösterilmelidir. Örneğin:
repo launcher version 2.45
Android kaynağını indirme
Android kaynak kodu, Google tarafından barındırılan Git depolarında bulunur. Her Git deposu, kaynakta yapılan değişiklikler ve değişikliklerin ne zaman yapıldığı da dahil olmak üzere Android kaynağının tüm geçmişini içerir. Android kaynak kodunu indirmek için:
Ana dizininize gidin:
cd ~Bu dizinde yerel bir çalışma alt dizini oluşturun:
mkdir aospDizine gidin:
cd aospAOSP deposu kaynak kodunun en son sürüm dalını (
android-latest-release) başlatın:repo init --partial-clone -b android-latest-release -u https://android.googlesource.com/platform/manifestGit kimlik bilgilerinizi (ad, e-posta adresi) girin veya kabul edin.
Kaynak kodunu 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 derleme
Kodu derlemek için:
Çalışma dizininizden, derleme ortamınızı ayarlamak için
envsetup.shkomut dosyasını kaynak olarak kullanın:source build/envsetup.shlunchkomutuyla derlemek için 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_only_phone-aosp_current-userdebugHedefinizin ve derleme ortamınızın bir ö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 derleyin:
m
İlk derleme birkaç saat sürebilir. Sonraki derlemeler çok daha kısa sürer. Derlemenizin çıkışı $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 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 curlgit clone https://github.com/google/android-cuttlefishcd android-cuttlefishtools/buildutils/build_packages.shsudo apt install -y ./cuttlefish-base_*.deb ./cuttlefish-user_*.debsudo usermod -aG kvm,cvdnetwork,render $USERsudo rebootYeniden başlatma, ek çekirdek modüllerinin yüklenmesini tetikler ve
udevkurallarını uygular.İş istasyonunuz yeniden başlatıldıktan sonra
aospdizininize gidin, derleme ortamınızı ayarlayın ve Cuttlefish'i başlatın:cd ~/aospsource build/envsetup.shlunch aosp_cf_x86_64_only_phone-aosp_current-userdebuglaunch_cvd --daemonWeb tarayıcınızda
https://localhost:8443adresine giderek Cuttlefish cihazına bağlanın. Android destekli sanal cihazınız gösterilir.
Değişiklik yapma
Bu örnek değişiklik listesini uygulayarak kaynak kodunu güncelleyin.
Ödeme işleminizin kökünden (
aosp/dizini)frameworks/nativeGit projesine gidin:cd frameworks/nativeŞu komutla geçici bir dal başlatın:
repo start BRANCH_NAME .Düzenleyicinizi kullanarak aşağıdaki konumda
SurfaceFlinger.cppdosyasını düzenleyin: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 derleyin:
mCihazdaki derlemeyi güncelleyin:
adb rootadb remount -Radb rootadb syncadb rebootSeçtiğiniz cihazda renk değişikliği gördüğünüzü doğrulayın.
Testi düzeltme
Codelab'in bu bölümünde, kaynak ağacında bulunan ve başarısız olan örnek bir test kullanılır. Testi çalıştırmak, hata ayıklamak ve düzeltmek için aşağıdaki talimatları uygulayın:
Koşu:
atest DevCodelabTestTest 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 (
testHelloWorld) gösterilir. Bu test,DevCodelabTest.javaadlı bir dosyada yer alır.Düzeltilecek testin konumunu belirlemek için yığın izlemenin son satırına, test dosyasının adını da içerecek şekilde
WORKING_DIRECTORY/platform_testing/tests/example/devcodelab/src/ekleyin. Yaniandroid.test.example.devcodelab.DevCodelabTest,WORKING_DIRECTORY/platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.javaolur.platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.javadosyasını düzenleyin veAssert.assertTrue(false)ifadesiniAssert.assertTrue(true)ile değiştirin.Sorunu düzelttiğinizi doğrulamak için testi tekrar çalıştırın:
atest DevCodelabTest
Kodunuzu incelemeye gönderme
Repo, aynı anda çok sayıda Git deposunda (veya projesinde) çalışmak için git clone gibi komutları bir araya getirerek Git kullanımını basitleştirir. Git'teki projelerinizin kod incelemesi için web tabanlı kod inceleme sistemi Gerrit'i kullanın.
Değişikliklerinizi
frameworks/nativeprojesinde yaptığınızı varsayarsak değişikliklerinizi yüklemek için şu komutları çalıştırın:cd frameworks/nativerepo start BRANCH_NAME .git add .git commitİşleme mesajınız için aşağıdakileri girin:
Android BRANCH_NAME change Test: manual atestDeğ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 android17-release: branch BRANCH_NAME ( 1 commit, Wed Aug 7 09:32:33 2019 -0700): ff46b36d Android BRANCH_NAME 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 BRANCH_NAME change [NEW] remote: To https://android-review.googlesource.com/platform/frameworks/native * [new branch] BRANCH_NAME -> refs/for/android17-release
Değişikliğinizi Gerrit'te görüntüleme
Gerrit'te yaptığınız değişikliği görüntülemek için terminaldeki bağlantı çıkışına gidin. Bağlantı şuna benzer:
https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432
Değişikliğinizi geri alma
Normalde, testten sonra ve inceleme ve onay üzerine, değişikliğinizi Gerrit'te gönderir ve depoyla birleştirirsiniz. Bunun yerine, bu codelab için çalışmanızı geri alın:
Gerrit'te Abandon'ı (Vazgeç) tıklayın.
frameworks/nativeproje dizinindeki (veya alt dizinlerindeki) ilişkili geçici dalı silin:repo abandon BRANCH_NAME .Test dosyasında yaptığınız değişiklikleri geri alın. Test değişikliğinde
repo start,git commitverepo uploadkomutlarını çalıştırmadığınız için dosyanın kendisini sıfırlayabilirsiniz.aosp/platform_testingdizininde olduğunuzu varsayarsak dosyayı sıfırlamak için aşağıdaki komutları kullanın:git reset HEAD tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.javagit checkout .
Android platformu geliştirme ile ilgili codelab'i tamamladınız.
Yardım alın
Bu codelab sırasında hatalarla karşılaşırsanız herhangi bir sayfanın alt kısmındaki Issue Tracker bağlantısını kullanarak bunları bildirin. Sorularınızı android-building grubuna gönderin.
crosvm uygulamasının çalışıp çalışmadığını görmek için ps -A | grep crosvm yazın. crosvm çalışıyorsa stop_cvd || true veya kill crosvm işlemini işlem PID'siyle yazın.