Android geliştirmeyi deneyin

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 fontconfig

Gerekli 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:

  1. Mevcut paket bilgilerini indirin:

    sudo apt-get update
  2. 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 ödemeyi başlatan ve tam Repo aracını indiren bir Python komut dosyası sağlar.

    Başarılı olursa 4. adıma geçin.

  3. İ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/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.

  4. 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:

  1. Ana dizininize gidin:

    cd ~
  2. Bu dizinde yerel bir çalışma alt dizini oluşturun:

    mkdir aosp
  3. Dizine gidin:

    cd aosp
  4. AOSP 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/manifest
  5. Git kimlik bilgilerinizi (ad, e-posta adresi) girin veya kabul edin.

  6. 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:

  1. Çalışma dizininizden, derleme ortamınızı ayarlamak için envsetup.sh komut dosyasını kaynak olarak kullanın:

    source build/envsetup.sh
  2. lunch komutuyla 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-userdebug

    Hedefinizin 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
    ============================================
    
  3. 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.

  1. 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
    tools/buildutils/build_packages.sh
    sudo apt install -y ./cuttlefish-base_*.deb ./cuttlefish-user_*.deb
    sudo usermod -aG kvm,cvdnetwork,render $USER
    sudo reboot

    Yeniden başlatma, ek çekirdek modüllerinin yüklenmesini tetikler ve udev kurallarını uygular.

  2. İş istasyonunuz yeniden başlatıldıktan sonra aosp dizininize gidin, derleme ortamınızı ayarlayın ve Cuttlefish'i başlatın:

    cd ~/aosp
    source build/envsetup.sh
    lunch aosp_cf_x86_64_only_phone-aosp_current-userdebug
    launch_cvd --daemon
  3. 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 yapma

Bu örnek değişiklik listesini uygulayarak kaynak kodunu güncelleyin.

  1. Ödeme işleminizin kökünden (aosp/ dizini) frameworks/native Git projesine gidin:

    cd frameworks/native
  2. Şu komutla geçici bir dal başlatın:

    repo start BRANCH_NAME .
  3. Düzenleyicinizi kullanarak aşağıdaki konumda SurfaceFlinger.cpp dosyasını düzenleyin:

    aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
    
  4. Şu satırı bulun:

    void SurfaceFlinger::updateColorMatrixLocked() {
    
  5. 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});
    
  6. Kodu derleyin:

    m
  7. Cihazdaki derlemeyi güncelleyin:

    adb root
    adb remount -R
    adb root
    adb sync
    adb reboot
  8. Seç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:

  1. Koşu:

    atest DevCodelabTest

    Test başarısız olur.

  2. 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.java adlı bir dosyada yer alır.

  3. 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. Yani android.test.example.devcodelab.DevCodelabTest, WORKING_DIRECTORY/platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java olur.

  4. platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java dosyasını düzenleyin ve Assert.assertTrue(false) ifadesini Assert.assertTrue(true) ile değiştirin.

  5. 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.

  1. 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 BRANCH_NAME .
    git add .
    git commit
  2. İşleme mesajınız için aşağıdakileri girin:

    Android BRANCH_NAME change
    Test: manual atest
    
  3. 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 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:

  1. Gerrit'te Abandon'ı (Vazgeç) tıklayın.

  2. frameworks/native proje dizinindeki (veya alt dizinlerindeki) ilişkili geçici dalı silin:

    repo abandon BRANCH_NAME .
  3. Test dosyasında yaptığınız değişiklikleri geri alın. Test değişikliğinde repo start, git commit ve repo upload komutlarını çalıştırmadığınız için dosyanın kendisini sıfırlayabilirsiniz. aosp/platform_testing dizininde 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.java
    git 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.