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:
- 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.
- 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:
- Tüm herkese açık gereksinimleri karşılayan fiziksel Linux iş istasyonu.
- Android kod tabanını düzenlemek için gereken Depo ve Git yapılandırması.
Ç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
- İş istasyonunuza gerekli paketleri yükleyin.
- Terminalde hâlâ Repo'yu yükleyin ve tüm Git depolarına kimlik bilgileri edinin.
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ı başlatın (varsayılan):
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. 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.
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
Derleme hedefini öğle yemeği komutuna aşağıdaki şekilde iletin:
lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
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.
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.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. 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.
Ödeme işleminizin 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> .
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
Bu satırı bul:
void SurfaceFlinger::updateColorMatrixLocked() {
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});
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üzü doğrulayın.
Ş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:
Çalıştırma:
atest DevCodelabTest
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
Sonra buraya bakın
platform_testing/tests/example/devcodelab
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
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)
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.
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
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
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.