Android'i derleme

Android'i oluşturmak için bu sayfadaki talimatları uygulayın.

Derleme ortamınızı ayarlama

Çalışma dizininizden, derleme ortamınızı ayarlamak için envsetup.sh komut dosyasını kaynaklayın:

source build/envsetup.sh

Bu komut dosyası, bu sayfada kullanılan komutlar da dahil olmak üzere Android kaynak koduyla çalışmanıza olanak tanıyan çeşitli komutları içe aktarır. Komut dosyasının kaynağını görüntülemek için platform/build/envsetup.sh bölümüne bakın. Yerleşik yardımı görüntülemek için hmm yazın.

Hedef seçin

Android'i oluşturmadan önce oluşturulacak bir hedef belirlemeniz gerekir. Hedef, geliştirdiğiniz hedef platformu yansıtır. Oluşturulacak hedefi belirlemek için lunch komutunu ve ardından hedefi temsil eden bir dizeyi kullanın. Örneğin:

lunch aosp_cf_x86_64_only_phone-aosp_current-userdebug

Hedef ve derleme ortamınızın bir özeti gösterilir:

============================================
PLATFORM_VERSION_CODENAME=Baklava
PLATFORM_VERSION=Baklava
TARGET_PRODUCT=aosp_cf_x86_64_only_phone
TARGET_BUILD_VARIANT=userdebug
TARGET_ARCH=x86_64
TARGET_ARCH_VARIANT=silvermont
HOST_OS=linux
HOST_OS_EXTRA=Linux-6.10.11-1rodete2-amd64-x86_64-Debian-GNU/Linux-rodete
HOST_CROSS_OS=windows
BUILD_ID=BP1A.250305.020
OUT_DIR=out
============================================

Hedefi temsil eden dize aşağıdaki biçime sahiptir:

lunch product_name-release_config-build_variant

Bu dizenin bileşenleri şunlardır:

  • product_name, oluşturmak istediğiniz ürünün adıdır (ör. aosp_cf_x86_64_only_phone veya aosp_husky). Cihazınız için kendi biçiminizi kullanabilirsiniz ancak Google'ın cihazları için kullandığı biçim şu bileşenlerden oluşur:product_name

    • aosp, Android Açık Kaynak Platformu'nu ifade eder.
    • (isteğe bağlı) Hedefin Cuttlefish emülatöründe çalıştırılması amaçlandığında cf dahil edilir.
    • Mimari ve donanım (kod adı) (ör. x86_64_only_phone veya Pixel 8 Pro'nun kod adı olan husky) Google cihazlarının kod adlarının listesi için Cihaz kod adları başlıklı makaleye bakın.
  • release_config, aosp_current adlı geliştirme sürümü yapılandırması gibi bir sürüm yapılandırmasına ayarlanmıştır. Sürüm yapılandırması, özellik yayınlama işaretlerinin arkasında bulunan ve bir derleme için etkinleştirilen veya devre dışı bırakılan belirli özellikleri ve kodu tanımlar. Yayın yapılandırmaları hakkında daha fazla bilgi için Özellik bayrağı yayın değerlerini ayarlama başlıklı makaleyi inceleyin.

  • Dizenin build_variant bölümü, aşağıdaki tablodaki üç değerden biri olabilir:

    build_variant Açıklama
    user Bu derleme değişkeni, sınırlı güvenlik erişimi sağlar ve şu durumlarda kullanıma uygundur:
    üretim. userdebug Bu derleme değişkeni, cihaz geliştiricilerine yardımcı olur.

    Geliştirme aşamasındaki sürümlerin performansını ve gücünü anlayın. userdebug derlemesiyle geliştirme yaparken userdebug yönergelerini uygulayın. eng | Bu derleme değişkeninin derleme süresi daha kısadır ve performans ile güç konusunda endişelenmiyorsanız günlük geliştirme için en uygun seçenektir.

lunch komutunu herhangi bir bağımsız değişken olmadan çalıştırırsanız yaygın hedeflerin listesi sağlanır. Bu sayfadaki bilgileri ve Cihaz kod adları bölümünde belirli Google donanımlarını temsil eden kod adlarını kullanarak hedef dize öğelerini bir araya getirerek kendi hedef dizelerinizi de oluşturabilirsiniz.

Mevcut hedefi görüntüleme

Mevcut öğle yemeği ayarlarını görmek için şu komutu çalıştırın:

$ echo "$TARGET_PRODUCT-$TARGET_BUILD_VARIANT"

Kodu oluşturma

Hedefinizi oluşturmak için aşağıdaki komutu çalıştırın. İş istasyonunuzun özelliklerine bağlı olarak ilk derleme bir saatten kısa veya birkaç saat sürebilir. Sonraki derlemeler çok daha kısa sürer.

m

Derlemenizin çıktısı $OUT_DIR içinde görünür. Farklı hedefler oluşturursanız her hedef derlemesi $OUT_DIR içinde görünür.

m komutu, ağacın en üstünden başlayarak derleme yapar. Bu nedenle, m komutunu alt dizinlerden çalıştırabilirsiniz. TOP ortam değişkeni ayarlanmışsa m komutu bu değişkeni kullanır. TOP ayarlanmamışsa m komutu, ağacın en üstünü bulmaya çalışarak ağacı geçerli dizinden yukarı doğru arar.

m komutu, -jN bağımsız değişkeniyle paralel görevleri işleyebilir. -j bağımsız değişkeni sağlamazsanız derleme sistemi, sisteminiz için optimum olduğunu düşündüğü paralel görev sayısını otomatik olarak seçer.

m komut satırınızda modül adlarını listeleyerek tam cihaz görüntüsü yerine belirli modüller oluşturabilirsiniz. Ayrıca, m komutu, hedefler olarak adlandırılan bazı sahte hedefler sağlar. Örneğin, m nothing herhangi bir şey oluşturmaz ancak derleme yapısını ayrıştırır ve doğrular. Geçerli hedeflerin listesi için m help yazın.

Yapı hatalarını giderme (Android 17 veya daha yeni sürümler)

Bu bölümde, derleme sırasında AOSP'nin salt okunur kod tabanını değiştirmeye çalışmaktan kaynaklanan salt okunur hatalarını işleme talimatları yer almaktadır.

Sonuç oluşturma girişimi, salt okunur dosya sistemi hatalarıyla sonuçlanıyor

Derleme sırasında AOSP kaynak ağacı salt okunurdur. Çalıştırdığınız derleme, ürün yapılandırması veya derlemenin başka bir bölümü sırasında kaynak ağacını değiştirmeye çalışırsa derleme başarısız olabilir ve salt okunur dosya sistemi hataları bildirilir. Bu seçenekler, kaynak ağacını geçici olarak okuma/yazma moduna değiştirmek için kullanılabilir:

  • Derleme sırasında tüm kaynak ağacını okuma-yazma olarak değiştirmek için derleme ortamına BUILD_BROKEN_SRC_DIR_IS_WRITABLE=true ekleyin.

  • Derleme sırasında ağacın bir bölümünü okuma-yazma olarak değiştirmek için BUILD_BROKEN_SRC_DIR_RW_ALLOWLIST="path1, path2, ..." kullanın.

    Yollar, yazma işlemlerine izin verilmesi gereken dizinlerin yolları olmalıdır. Bu yollar, çalışma alanının en üstüne göre belirlenir.

Yapı hatalarını giderme (8.0 veya önceki sürümler)

AOSP 8 veya daha eski bir sürümü oluşturuyorsanız Java sürümünüzle ilgili bir sorunla karşılaşıldığında m işlemi durdurabilir. Örneğin, şu mesajı alabilirsiniz:

************************************************************
You are attempting to build with the incorrect version
of java.

Your version is: WRONG_VERSION.
The correct version is: RIGHT_VERSION.

Please follow the machine setup instructions at
    https://source.android.com/source/initializing.html
************************************************************

Olası nedenler ve çözümler aşağıda verilmiştir:

  • Set Up for AOSP development (2.3 - 8.0) (AOSP geliştirme için kurulum (2.3 - 8.0)) bölümündeki JDK bölümlerinde belirtildiği gibi doğru JDK'yı yükleyememişsinizdir.
  • Yolunuzda daha önce yüklenmiş başka bir JDK görünüyor. Yolunuzun başına doğru JDK'yı ekleyin veya sorunlu JDK'yı kaldırın.