Android geliştiricisi kod laboratuvarı

Earth tarihinin en çok yüklenen işletim sisteminin geliştirilmesine yardımcı olabilirsiniz. Evet, Android platform mühendisi olma yolculuğuna başlamak için buradasınız.

Her ne kadar zorlu bir yol olsa da Android ekibi her sürümde yolculuğunuzu basitleştirmeye çalışıyor. Ekip, Android Açık Kaynak Projesi'nde (AOSP) doğrudan çalışarak her gün iyileştirmeler yapıyor.

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

Hedefler

Bu codelab'in iki amacı vardır:

  1. Bu yazı, platformda (işletim sistemi) çalışan Android mühendisleri için geliştirici iş akışının nasıl olduğuna dair küçük bir fikir verir.
  2. Android araçları, belgeleri ve geliştirici iş akışı hakkında geri bildirim sağlamanızı teşvik edin.

Ön koşullar

Bu codelab'deki gereklilikler listesi, genel platform (AOSP) geliştirme gerekliliklerinden türetilmiştir. Bu codelab'e katılmak için aşağıdakileri ayarlayın:

Çevre

Kullanıcılar genellikle doğrudan iş istasyonunda çalışır ve geliştirir. Çeşitli terminallerde çalışıyor olabileceğiniz ve kullanılan komutların birçoğu terminale özgü olduğundan her terminal oturumunda bunları yeniden çalıştırmanız gerekir. Bunlar özellikle source build/envsetup.sh ve lunch komutlarını içerir.

İş istasyonu kurulumu

  1. İş istasyonunuza gerekli paketleri yükleyin.
  2. Terminalde hâlâ Repo'yu yükleyin ve tüm Git depolarına kimlik bilgileri edinin.

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ı başlatın (varsayılan):

    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. Ayrı dizinlerde var oldukları sürece aynı anda 1'den fazla depo ödemesine izin verilir. Ancak her ödeme ve derleme işleminin yaklaşık 300 GB kullanımına ulaşıldığını (ve giderek arttığını) unutmayın. Bu nedenle, kendinizi 2 depo ödemesiyle sınırlandırın veya sisteminizi ikincil bir sürücüyle geliştirin.

Kodu oluşturma

Android'i derlemek için lunch komutuyla derlemek üzere bir hedef cihaz türü seçmeniz gerekir. Hedef, belirli bir model veya form faktörü gibi bir cihaz permütasyonudur.

aosp_cf_x86_64_phone-userdebug cihaz hedefi, fiziksel bir cihaz olmadan test etmek için Cuttlefish sanal Android cihazını oluşturmanıza olanak tanır.

Bunun yerine fiziksel bir cihaz oluşturup güncellemek için başka bir hedef seçin ve yanıp sönen cihazlarla ilgili talimatları uygulayın.

  1. Kaynak kodu ödeme işleminin kök dizininden aşağıdaki komutu çalıştırarak Android cihaz oluşturmak için ortamınızı ayarlayın:

    source build/envsetup.sh
    
  2. Derleme hedefini öğle yemeği komutuna aşağıdaki şekilde iletin:

    lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
    
  3. Aşağıdakileri kullanarak, ödeme işleminizin her yerinde kodu oluşturun:

    m
    

İlk derlemenin birkaç saat sürmesini bekleyebilirsiniz. Sonraki derlemeler önemli ölçüde daha az zaman alır.

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ı hiç yüklemediyseniz gerekli Kesme Balığı bağımlılıklarını yüklemeniz gerekir. Ana Debian paketlerini indirmek, derlemek ve yüklemek için bir terminal penceresinde şu 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 kuralı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. Az önce oluşturduğunuz Android destekli cihazın video akışı sizi karşılar.

Değişiklik yapın

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

  1. Ödeme işleminizin 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. Değişiklik listesindeki güncellemeleri aşağıdaki konumda içerecek şekilde SurfaceFlinger.cpp öğesini düzenleyin:

    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 Şekil 1'de gösterilene benzer bir renk değişikliği gördüğünüzü doğrulayın.

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ılmaktadır. Bu, testi yerel olarak çalıştırmak ve kodu test etmek için Atest'i kullanır.

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

  1. Çalıştırma:

    atest DevCodelabTest
    
  2. Test başarısız olur. Sorunu düzeltmek için başarısız testin kaynak kodunu bulun:

    atest --info android.test.example.devcodelab.DevCodelabTest#testHelloWorld
    
  3. Sonra buraya bakın

    platform_testing/tests/example/devcodelab
    
  4. Dosyayı düzenlemek için android.test.example.devcodelab.DevCodelabTest içinde testin adını alıp . değerini / ile değiştirerek şu sonucu elde edin:

    src/android/test/example/devcodelab/DevCodelabTest.java
    
  5. Daha sonra düzenleyin

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

    değiştirin

    Assert.assertTrue(false)
    

    ve

    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

Repo, git clone gibi komutları çok sayıda Git deposunda (veya projede) aynı anda çalışacak şekilde gruplandırarak Git kullanımını basitleştirir.

Git ve Repo hakkında genel bilgiler edinmek ve Android kaynak koduyla çalışma hakkındaki tüm belgelerin bağlantılarını görmek için Kaynak Denetim Araçları'na bakın. Git projelerinin tam listesi ve her projeyle ilişkili dallar için bağımsız projeler (yollar) için AOSP deposuna bakın.

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

  1. frameworks/native projesinde değişiklik yaptığınızı varsayarak bunları yüklemek için şu 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

Gerrit'teki değişikliğinizi görüntüleyin

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. Sonraki adımlar için Yama gönderme bölümüne bakın. Android'i geliştirmeyle ilgili tüm ayrıntılar için bu sitenin diğer bölümlerine de göz atabilirsiniz.

Değişikliğinizi geri alın

Normalde, test sonrası ve inceleme ile onay verildikten sonra, değişikliğinizi Gerrit'te gönderir ve depoyla birleştirirsiniz.

Bunun yerine, bu codelab'in amaçları doğrultusunda, Gerrit'te Terk'i tıklayarak değişiklik listenizi geri alabilirsiniz.

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

repo abandon codelab .

Test dosyasında yaptığınız değişiklikleri geri almayı da unutmayın. repo start, git commit ve repo upload ile ilgili değişikliği yapmadığınız için dosyayı sıfırlayabilirsiniz. aosp/platform_testing directory içinde olduğunuzu varsayarsak dosyayı sıfırlamak için aşağıdakileri kullanın:

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

Böylece işleminiz tamamlanmış olur. İyi iş çıkardınız!

Yardım alma

Bu codelab sırasında hatalarla karşılaşırsanız bunları, herhangi bir sayfanın altındaki Sorun İzleyici bağlantısını kullanarak bildirin. Sorularınızı android-building grubuna gönderin.