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ılanlar 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 özetini görürsünüz:

============================================
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, aosp_cf_x86_64_only_phone veya aosp_husky gibi oluşturmak istediğiniz ürünün adıdır. 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 Projesi'ni ifade eder.
    • İsteğe bağlı olarak, hedef Cuttlefish emülatöründe çalıştırılmak üzere tasarlandığı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ı makaleyi inceleyin.
  • 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. Yayın yapılandırması, özellik yayınlama işaretlerinin arkasında olan 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ğı başlatma değerlerini ayarlama başlıklı makaleyi inceleyin.

  • Dizenin build_variant kısmı, 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 üretim için uygundur.
    userdebug Bu derleme değişkeni, cihaz geliştiricilerin geliştirme aşamasındaki sürümlerin performansını ve gücünü anlamasına yardımcı olur. userdebug derlemesiyle geliştirme yaparken userdebug ile ilgili yönergeleri uygulayın.
    eng Bu derleme değişkeni daha hızlı derleme süresine sahiptir ve günlük geliştirme ortamları için en uygun olanıdır (performans ve güç daha az önemlidir).

lunch komutunu herhangi bir bağımsız değişken olmadan çalıştırırsanız lunch, yaygın hedeflerin bir listesini sağlar. Özel hedef dizeleri oluşturmak için hedef dizesi öğelerini donanım kod adlarıyla birleştirin. Kod adlarının listesi için Cihaz kod adları başlıklı makaleyi inceleyin.

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.

Derleme hatalarını giderme

Bu bölümde, derleme hatalarını ele alma talimatları yer alır.

Salt okunur dosya sistemi hataları (Android 17 ve sonraki sürümler)

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ı bildirebilir. Kaynak ağacı geçici olarak okuma-yazma moduna değiştirmek için bu seçenekleri kullanabilirsiniz:

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

  • Ağacın bir bölümünü oluşturma sırasında okuma-yazma olarak değiştirmek için BUILD_BROKEN_SRC_DIR_RW_ALLOWLIST="path1, path2, ..." simgesini kullanın. Yollar, yazma işlemlerine izin verilmesi gereken dizinlerin yolları olmalı ve çalışma alanının en üstüne göre belirlenmelidir.

Yanlış Java sürümü (Android 8.0 ve önceki sürümler)

Android 8.0 (API düzeyi 26) ve daha eski sürümleri oluşturuyorsanız m, Java sürümünüzle ilgili bir sorunla karşılaştığında 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:

  • Doğru JDK yüklenmemiş. Daha fazla bilgi için AOSP geliştirme için kurulum (2.3-8.0) başlıklı makaleyi inceleyin.
  • 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.