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:
- 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.
- 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:
- Tüm herkese açık gereksinimleri karşılayan fiziksel Linux iş istasyonu.
- Android kod tabanını düzenlemek için gereken kod deposu ve Git yapılandırması.
Ç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
- Gerekli paketleri bir iş istasyonu olabilir.
- Terminaldeyken Repo'yu yükleyin ve kimlik bilgilerini edinin. test edebilirsiniz.
Kodu başlatma ve senkronize etme
Ana dizininize gidin:
cd ~
İçinde yerel bir çalışma alt dizini oluşturun:
mkdir aosp
İlgili dizine gidin:
cd aosp
AOSP deposu kaynak kodu ana dalını (varsayılan) başlatın:
repo init -u https://android.googlesource.com/platform/manifest
Git kimlik bilgilerinizi (ad, e-posta adresi) girin veya kabul edin.
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.
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
Derleme hedefini lunch komutuna şu şekilde iletin:
lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
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.
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.Mürekkep balığı'nı başlatın:
launch_cvd --daemon
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.
Ödeme işleminin kök dizininden (
aosp/
dizini)frameworks/native
Git projesine gidin:cd frameworks/native
Şu komutla geçici bir proje başlatın:
repo start <some-name> .
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
Bu satırı bul:
void SurfaceFlinger::updateColorMatrixLocked() {
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});
Kodu oluşturun:
m
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.
Ş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:
Çalıştırma:
atest DevCodelabTest
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)
Sonra buraya bakın
platform_testing/tests/example/devcodelab
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
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)
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.
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
Taahhüt mesajınız için aşağıdakileri girin:
Android codelab change Test: manual atest
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.