Android geliştiricisi kod laboratuvarı

Geçmişten en çok yüklenen işletim sisteminin geliştirilmesine yardımcı olabilirsiniz yer alıyor. Evet, Android olma yolculuğuna başlamak için buradasınız platform mühendisi olarak çalışıyorum.

Her ne kadar zorlu bir yol olsa da Android ekibi, yolculuğunda ona eşlik eder. 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. Geliştirici iş akışının nasıl olduğuna dair biraz bilgi vermek için Örneğin, Android mühendisleri için platform (işletim sistemi) üzerinde çalışan Android mühendisleri vardır.
  2. Geri bildirim sağlamanızı teşvik edin geliştirici iş akışı ve Android araçları, belgeleri ve

Ön koşullar

Bu codelab'deki gereklilikler listesi, genel platformu (AOSP) geliştirme Bu codelab'i tamamlamak için aşağıdakileri ayarlayın:

Çevre

Genellikle kullanıcılar doğrudan iş istasyonunda oluşturma ve geliştirme yapar. Çü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, Bunlar, source build/envsetup.sh ve lunch komutlarını içerir.

İş 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. Tek seferde 1'den fazla depo ödemesi yapılmasına izin verilir. Bunun için farklı dizinlerde bulunabilir. 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 bir hedef seçmelisiniz lunch komutuyla derlemek için "device" türünü kullanın. 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şturup güncellemek için başka bir hedef seçin ve yanıp sönen cihazlara ilişkin talimatlara bakın.

  1. Android cihaz oluşturmak için ortamınızı şu komutu çalıştırarak ayarlayın: kaynak kodundan ödeme işleminizin kök dizininden aşağıdaki komutu çalıştırın:

    source build/envsetup.sh
  2. Derleme hedefini aşağıdakiler gibi bir Öğle yemeği komutuna geçirin:

    lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
  3. Kodu istediğiniz yerde oluşturun ödeme yöntemi:

    m

İlk derlemenin birkaç saat sürmesini bekleyebilirsiniz. Sonraki derlemeler çok daha kısa sürer.

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

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

  1. Mürekkep balığı'nı daha önce hiç yüklemediyseniz, Mürekkep balığı bağımlılıkları. 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. Şurada https://localhost:8443 adresine giderek Mürekkep balığı cihazına bağlanın: tarayıcınızda Google Chrome'u açı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. SurfaceFlinger.cpp öğesini düzenleyerek değişiklik listesinden güncellemeleri ekleyin. şu konum:

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

    void SurfaceFlinger::updateColorMatrixLocked() {
    
  5. Aşağıdaki iki satırı updateColorMatrixLocked() işlevinin başına 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 gösterilene benzer bir renk değişikliği gördüğünüzü doğrulayın (Şekil 1'de verilmiştir).

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ındaki örnek bir test kullanılmaktadır ve başarısız oluyor. 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. Dosyanın düzenlenmesi için testin adını android.test.example.devcodelab.DevCodelabTest ve . değerini şununla değiştirin: / ise şu sonucu almak için:

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

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

    değiştirin

    Assert.assertTrue(false)
    

    ile

    Assert.assertTrue(true)
    
  6. Sorunu çözdüğünüzü 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 dokümanların tam 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'te projelerinizin kod incelemesi için Gerrit'i kullanırsınız. web tabanlı kod inceleme sistemi olarak düşünebilirsiniz.

  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. Değişikliğinizi yükleyin:

    repo upload

Başarılı olursanız ş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 ve şuna benzeyen bağlantıya gidin:

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

Böylece Android platform geliştirme için başlangıç codelab'i tamamlanmış olur. Görüntüleyin Yama gönderme Android'i geliştirmeyle ilgili tüm ayrıntılar için bu sitede bulabilirsiniz.

Değişikliğinizi geri alma

Normalde, son test aşamasında ve incelenip onaylandıktan sonra değişikliğinizi Gerrit'i kullanıp depoya ekleyin.

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 .

Böylece işleminiz tamamlanmış olur. Harika!

Yardım alma

Bu codelab sırasında hatalarla karşılaşırsanız bunları Sorun İzleyici bağlantısını tıklayabilirsiniz. Soruları şuraya gönderin: android-bina grubu.