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

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

  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ı başlatın (android-latest-release):

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

  1. Çalışma dizininizde, derleme ortamınızı ayarlamak için envsetup.sh komut dosyasını kaynaklayı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. Ş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
    ============================================
    
  3. 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.

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

  2. Cuttlefish'i başlatın:

    launch_cvd --daemon
    
  3. 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.

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

    cd frameworks/native
  2. Şu komutla geçici bir proje başlatı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 oluşturun:

    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 olduğunu doğrulayın.

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

    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:

  1. Çalıştır:

    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 gösterilir (testHelloWorld). Bu test, DevCodelabTest.java adlı bir dosyada yer alır.

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

  4. platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java öğesini düzenleme ve Assert.assertTrue(false) öğesini Assert.assertTrue(true) ile değiştirme

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

  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 codelab .
    git add .
    git commit
  2. Commit 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 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:

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

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

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