Android geliştiricisi kod laboratuvarı

Dünya tarihinde en yaygın şekilde yüklenen işletim sisteminin geliştirilmesine yardımcı olabilirsiniz. Evet, Android olma yolculuğuna başlamak için buradasınız platform mühendisi olarak çalışıyorum.

Yol zorlu olsa da Android ekibi, her sürümde yolculuğunuzu kolaylaştırmaya çalışır. Ekip her gün doğrudan pazarlama ekibiyle Android Açık Kaynak Projesi (AOSP) üzerinde çalışıyor.

Arkanıza yaslanın, bir terminali ateşleyin ve tarihe geçin.

Hedefler

Bu codelab'in amacı iki yönlüdür:

  1. Platformda (işletim sistemi) çalışan Android mühendisleri için geliştirici iş akışının nasıl bir şey olduğuna dair küçük bir fikir vermek istiyoruz.
  2. Android'in araçları, dokümanları ve geliştirici iş akışı hakkında geri bildirim vermenizi teşvik eder.

Ön koşullar

Bu codelab'in gereksinimleri, genel platform (AOSP) geliştirmeyle ilgili gereksinimlerden alınmıştır. Bu codelab'e katılmak için şunları ayarlayın:

Çevre

Kullanıcılar genellikle doğrudan iş istasyonunda çalışır ve geliştirir. Çünkü farklı terminallerde çalışıyor olabilir ve kullanılan komutların çoğu terminale özgüdür, her terminal oturumunda bunları yeniden çalıştırmanız gerekir. Özellikle source build/envsetup.sh ve lunch komutları bu kapsamdadır.

İş istasyonunu ayarlama

  1. Gerekli paketleri bir iş istasyonu olabilir.
  2. Terminaldeyken Repo'yu yükleyin ve kimlik bilgilerini edinin. test edebilirsiniz.

Kodu başlatma ve senkronize etme

  1. Ana dizininize gidin:

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

    mkdir aosp
  3. İlgili dizine gidin:

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

    repo init -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 -j8

İlk senkronizasyonlar bir saat veya daha uzun sürebilir.

Her depo ödemesi bir manifest dosyası ile temsil edilir. Farklı dizinlerde bulundukları sürece aynı anda birden fazla depodan ödeme alınmasına izin verilir. Ancak her bir önizleme ve derleme işleminin yaklaşık 300 GB'lık bir kullanım alanı kapladığını (ve bu alanın giderek arttığını) unutmayın. Bu nedenle, kendinizi 2 depo önizlemesiyle sınırlayın veya sisteminizi ikincil bir sürücüyle destekleyin.

Kodu oluşturma

Android'i derlemek için lunch komutuyla derlenecek bir hedef cihaz türü seçmeniz gerekir. Hedef, cihaz permütasyonudur. tercih edebilirsiniz.

aosp_cf_x86_64_phone-userdebug cihaz hedefi şunları yapmanıza olanak tanır: Bu kullanıcı için Cuttlefish'in sanal Android cihazını fiziksel bir cihaz olmadan test etmek.

Bunun yerine fiziksel bir cihaz oluşturmak ve güncellemek için başka bir hedef seçin ve cihazları flaşlama talimatlarını uygulayın.

  1. Kaynak kodunuzun kök dizininden aşağıdaki komutu çalıştırarak ortamınızı Android cihaz oluşturacak şekilde ayarlayın:

    source build/envsetup.sh
  2. Derleme hedefini lunch komutuna şu şekilde iletin:

    lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
  3. Aşağıdakilerden birini kullanarak ödeme işleminizin herhangi bir yerinden kodu derleyin:

    m

İlk derlemenin saatler sürmesi normaldir. Sonraki derlemeler önemli ölçüde daha az zaman harcanmasını sağlar.

Mürekkep Balığı'nı başlat

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

  1. Cuttlefish'i daha önce yüklemediyseniz gerekli Cuttlefish bağımlılıkları yüklemeniz gerekir. Bir terminal penceresinde aşağıdaki komutları çalıştırın: ana Debian paketlerini indirin, derleyin ve yükleyin:

    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.

  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 video akışıyla karşılıyorsunuz cihazınızı kullanabilirsiniz.

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. Şu komutla geçici bir proje başlatın:

    repo start <some-name> .
  3. Aşağıdaki konumda değişiklik listesinden gelen güncellemeleri içerecek şekilde SurfaceFlinger.cpp dosyasını düzenleyin:

    aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
    
  4. Bu satırı bul:

    void SurfaceFlinger::updateColorMatrixLocked() {
    
  5. updateColorMatrixLocked() işlevinin başına şu iki 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
    adb sync
    adb reboot

Seçtiğiniz cihazda Şekil 1'de gösterilene benzer bir renk değişikliği gördüğünüzden emin olun.

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

Şekil 1. Başarılı renk değişikliğinden sonra ekran görünümü

Kodunuzu test etme

Codelab'in bu bölümünde, kaynak ağacında bulunan ve başarısız olan bir örnek test kullanılır. Bu öğede, kontrol etmek için Atest yerel olarak çalıştırma ve kodu test etme.

Testi kullanmak için aşağıdaki talimatları uygulayın:

  1. Çalıştırma:

    atest DevCodelabTest
  2. Test başarısız olur. Başarısız testin yığın izlemeyi (stack trace) 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)
  3. Sonra buraya bakın

    platform_testing/tests/example/devcodelab
    
  4. Düzenlenecek dosyayı almak için android.test.example.devcodelab.DevCodelabTest içindeki testin adını alın ve . yerine / yazın. Böylece şu sonucu elde edersiniz:

    src/android/test/example/devcodelab/DevCodelabTest.java
    
  5. Ardından düzenleme

    platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
    

    şununla değiştirmek için:

    Assert.assertTrue(false)
    

    ile

    Assert.assertTrue(true)
    
  6. Sorunu düzelttiğinizi doğrulamak için testi tekrar çalıştırın:

    atest DevCodelabTest

Kodunuzu incelenmek üzere yükleyin

Depo, git clone gibi komutları çalışmak için paketleyerek Git kullanımını basitleştirir aynı anda birden fazla Git deposunda (veya projede) kullanılabilir.

Git ve Repo'ya genel bakış için Source Control Tools (Kaynak Denetim Araçları) Android kaynak koduyla çalışma hakkındaki tüm dokümanların bağlantıları AOSP deposuna göz atın için Git projelerinin tam listesi ve bağımsız projelerin (yolların) her bir proje için gerekli olan dalları belirlemektir.

Git'teki projelerinizin kod incelemesi için web tabanlı kod inceleme sistemi Gerrit'i kullanırsınız.

  1. Değişikliklerinizi frameworks/native projesinde yaptığınız varsayılarak, 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. Yaptığınız değişikliği 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

Terminalde basılı olan şuna benzer bağlantıya gidin:

https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432

Bu, Android platform geliştirmeyle ilgili başlangıç düzeyindeki codelab'i tamamlar. Sonraki adımlar için Yama gönderme bölümüne, Android geliştirmeyle ilgili tüm ayrıntılar için bu sitenin geri kalanına bakın.

Değişikliğinizi geri alın

Normalde, testten sonra ve inceleme ile onaydan sonra değişikliğinizi Gerrit'e gönderir ve depoya birleştirirsiniz.

Bunun yerine, bu codelab'de yararlanmak için Gerrit dilinde terk edin.

Ardından frameworks/native projesindeki ilişkili geçici daldan vazgeçin dizini (veya alt dizinleri):

repo abandon codelab .

Test dosyasında yaptığınız değişiklikleri geri almayı da unutmayın. Değişikliği repo start, git commit ve repo upload yapmadığınız için dosyayı sıfırlayabilirsiniz. aosp/platform_testing directory içinde olduğunuzu varsayarsak aşağıdaki adımları uygulayarak dosyayı sıfırlayın:

git reset HEAD tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
git checkout .

Bu aşamada işlem tamamlanmış olur. Harika!

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. Soruları şuraya gönderin: android-bina grubu.