Android geliştirmeyi deneyin

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; dal oluşturma, taahhüt, fark karşılaştırma 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 yapılmasını basitleştiren Git için 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 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 oluşturmak 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ş istasyonunuzda GNU C Library (glibc) 2.17 veya sonraki bir sürümün yüklü olduğu 64 bit Linux dağıtımı çalışmalı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ü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.

Depoyu 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 ö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.

  3. (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.

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

  1. Ana dizininize gidin:

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

    mkdir aosp
  3. Dizine gidin:

    cd aosp
  4. AOSP deposu kaynak kodu ana dalını (varsayılan) başlatın:

    repo init --partial-clone -b main -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 başlıklı makaleyi inceleyin.

Kodu derleyin

Kodu derlemek için:

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

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

    Hedefinizin ve derleme ortamınızın özetini görürsünüz:

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

Mürekkepbalığı, derlemelerinizi test etmek için kullanılan Android emülatörüdür.

  1. Barındırıcı 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.

  2. Mürekkep balığını başlatın:

    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 yapın

Bu örnek changelist'i izleyerek kaynak kodu güncelleyin.

  1. Ödeme işleminin kök dizininden (aosp/ dizini) frameworks/native Git projesine gidin:

    cd frameworks/native
  2. Geçici bir proje başlatmak için şu komutu kullanın:

    repo start <some-name> .
  3. Aşağıdaki konumda SurfaceFlinger.cpp öğesini düzenlemek için düzenleyicinizi kullanın:

    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 Şekil 1'de gösterilene benzer bir renk değişikliği görmeniz gerekir.

    Başarılı bir renk değişikliği örneği

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

  1. Çalıştırın:

    atest DevCodelabTest

    Test başarısız olur.

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

  3. Düzeltilecek testin konumunu belirlemek için yığın izlemenin son satırına WORKING_DIRECTORY/platform_testing/tests/example/devcodelab/src/ ekleyin. Test dosyasının adı da dahil olmak üzere bu satırın sonuna kadar ekleyin. Bu nedenle, android.test.example.devcodelab.DevCodelabTest şu hâle gelir: WORKING_DIRECTORY/platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java.

  4. platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java'ü düzenleyin ve Assert.assertTrue(false) yerine Assert.assertTrue(true) yazın

  5. Sorunu düzelttiğinizi doğrulamak için testi tekrar çalıştırın:

    atest DevCodelabTest

Kodunuzu inceleme için 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.

  1. 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
  2. Taahhüt mesajınız için aşağıdakileri girin:

    Android codelab 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 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
    

Değişikliklerinizi Gerrit'te görüntüleme

Değişikliğinizi Gerrit'te görüntülemek için terminalde bağlantı çıkışına gidin. Bağlantı aşağıdaki gibidir:

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:

  1. Gerrit'te Terk et'i tıklayın.

  2. frameworks/native proje dizininde (veya alt dizinlerinde) ilişkili geçici dalı terk edin:

    repo abandon codelab .
  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'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. android-building grubuna soru 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.