Yeni cihaz ekleyin

Bu sayfadaki bilgileri kullanarak cihazınız için Makefile'lar oluşturabilir ve belirler.

Her yeni Android modülünün, derleme sistemini yönlendirmek için bir yapılandırma dosyası olmalıdır ve paketleme talimatları ile birlikte çalışabilir. Android, Soong derleme sistemi. Android hakkında daha fazla bilgi için Android'i Derleme konusuna bakın geliştirmenizi sağlar.

Derleme katmanlarını anlama

Derleme hiyerarşisi, cihazın fiziksel yapısı. Bu katmanlar aşağıdaki tabloda açıklanmıştır. Her katman, bire-çok şeklinde bir ilişki içinde kendi üzerindeki katmanla ilişkilidir. Örneğin, Mesela bir mimaride birden fazla pano olabilir ve her panoda birden fazla birden fazla ürününüz olabilir. Belirli bir katmandaki bir öğeyi şu şekilde tanımlayabilirsiniz: bir öğenin aynı katmanda özelleştirilmesi, kopyalamayı ve bakımı kolaylaştırır.

Katman Örnek Açıklama
Ürün myProduct, myProduct_eu, myProduct_eu_fr, j2, sdk Ürün katmanı, kargonun özellik spesifikasyonunu tanımlar. yerleşik modüller, desteklenen yerel ayarlar ve yapılandırmaya çalışın. Başka bir deyişle bu, ad belirlemektir. Ürüne özgü değişkenler yardımcı olur. Bir ürün kullanarak bakımı basitleştirebileceksiniz. Yaygın bir yöntem temel ürün oluşturma işleminde, ardından bu temele göre ürün varyantları oluşturmak belirler. Örneğin, aralarındaki farklara göre iki ürün sahip olduğu aynı temel üründen, CDMA'ya veya GSM'ye karşılık gelen bir radyoyu tanımlamaz.
Kart/cihaz marlin, mavi çizgi, mercan Kart/cihaz katmanı, cihaz üzerindeki fiziksel plastik katmanını temsil eder (yani cihazın endüstriyel tasarımı). Bu katman aynı zamanda hakkında genel bilgiler edindiniz. Bunlar, karttaki çevre birimleri ve yapılandırma. Kullanılan adlar yalnızca farklı kartların/cihazların kodlarından ibarettir yapılandırmanın üç yolu vardır.
Kemerli kol, x86, kol64, x86_64 Mimari katmanında, işlemci yapılandırmasını ve özelliklerini açıklayan uygulama ikili arayüzü (ABI) arayüzüdür.

Derleme varyantları kullanın

Belli bir ürün geliştirirken küçük veya ve bunların nihai sürümdeki sürümlerine dahil edilecek. Modülde tanımına göre, modül LOCAL_MODULE_TAGS ile etiketleri belirtebilir, Bu değer, bir veya daha fazla optional (varsayılan) değeri olabilir. debug ve eng.

Modül bir etiket belirtmezse (LOCAL_MODULE_TAGS tarafından), etiketinin varsayılan değeri optional değerine ayarlanır. İsteğe bağlı modüller yalnızca PRODUCT_PACKAGES ile ürün yapılandırması tarafından gereklidir.

Bunlar, şu anda tanımlanmış olan derleme varyantlarıdır.

Varyant Açıklama
eng Bu, varsayılan aromaya karşılık gelir.
  • eng veya debug ile etiketlenmiş modülleri yükler.
  • Modülleri ürün tanımı dosyalarına göre bazı ek özellikler eklemeniz gerekir.
  • ro.secure=0
  • ro.debuggable=1
  • ro.kernel.android.checkjni=1
  • adb varsayılan olarak etkindir.
user Nihai yayın bitleri olması amaçlanan varyant.
  • user ile etiketlenen modülleri yükler.
  • Modülleri ürün tanımı dosyalarına göre bazı ek özellikler eklemeniz gerekir.
  • ro.secure=1
  • ro.debuggable=0
  • adb varsayılan olarak devre dışıdır.
userdebug user ile aynıdır, ancak şu istisnalar mevcuttur:
  • debug ile etiketlenmiş modülleri de yükler.
  • ro.debuggable=1
  • adb varsayılan olarak etkindir.

Kullanıcı hata ayıklama yönergeleri

Test sırasında Userdebug derlemelerini çalıştırmak, cihaz geliştiricilerinin aşağıdaki bilgileri anlamasını sağlar: geliştirme aşamasındaki sürümlerin performansı ve gücü. Tutarlılığı korumak için derlemelerde güvenilir metrikler elde etmek için kullanıcı ile kullanıcı hata ayıklama derlemeleri arasında kullanıyorsanız, cihaz geliştiricileri şu yönergeleri uygulamalıdır:

  • userdebug, kök erişiminin etkinleştirilmiş olduğu bir kullanıcı derlemesi olarak tanımlanır:
    • Kullanıcı tarafından yalnızca istek üzerine çalıştırılan, yalnızca kullanıcı hata ayıklama uygulamaları
    • Yalnızca boşta kalma bakım sırasında (şarj cihazında/tamamen şarjda) çalışan işlemler şarj edilir (örneğin, dex2oatd veya 2023'e göre Arka plan derlemeleri için dex2oat
  • Derleme türüne bağlı olarak varsayılan olarak etkinleştirilmiş/devre dışı bırakılmış özellikleri eklemeyin. Geliştiricilerin, pil ömrünü etkileyen günlük kaydı yöntemlerini kullanmaktan kaçınmalarını öneririz: hata ayıklama günlüğü veya yığın dökümü.
  • Userdebug'da varsayılan olarak etkinleştirilen tüm hata ayıklama özellikleri net bir şekilde tanımlanmalıdır. ve projede çalışan tüm geliştiricilerle paylaşılır. Hata ayıklama özelliklerini etkinleştirmelisiniz ve hata ayıklamaya çalıştığınız sorun çözülene kadar yalnızca sınırlı bir süre için.

Derlemeyi kaynak yer paylaşımlarıyla özelleştirme

Android derleme sistemi, özelleştirmek için kaynak yer paylaşımlarını kullanır bir ürün olabilir. Kaynak yer paylaşımları, kaynağı belirtir varsayılanların üstüne uygulanır. Kaynak yer paylaşımlarını kullanmak için projeyi değiştirin derleme dosyasını kullanarak PRODUCT_PACKAGE_OVERLAYS öğesini dizin yolunu izleyin. Bu yol, geçerli kök dizin oluşturulur.

En yaygın şekilde özelleştirilmiş ayarlar frameworks/base/core/res/res/values/config.xml dosyasında yer alır.

Bu dosyada bir kaynak bindirme ayarlamak için bindirme dizinini proje derleme dosyasını kullanın:

PRODUCT_PACKAGE_OVERLAYS := device/device-implementer/device-name/overlay

veya

PRODUCT_PACKAGE_OVERLAYS := vendor/vendor-name/overlay

Ardından, dizine bir bindirme dosyası ekleyin, örneğin:

vendor/foobar/overlay/frameworks/base/core/res/res/values/config.xml

Yer paylaşımı config.xml dosyasında bulunan tüm dizeler veya dize dizileri orijinal dosyada bulunanlar da dahil edilir.

Ürün oluşturun

Cihazınızın kaynak dosyalarını birçok farklı şekilde düzenleyebilirsiniz. İşte özet Pixel uygulamasını düzenlemenin bir yolunun açıklaması.

Pixel, marlin Bu cihaz yapılandırmasından, hakkında ürüne özgü bilgileri içeren bir ürün tanımı dosyası cihazın adı ve modeli gibi bilgileri de değiştirebilirsiniz. Google Ads hesabınızdaki device/google/marlin dizinini ziyaret ederek tüm bunların nasıl ayarlandığını görebilirsiniz.

Ürün tasarım dosyaları yazın

Aşağıdaki adımlarda, ürün oluşturma dosyalarının benzer bir şekilde nasıl oluşturulacağı açıklanmaktadır. yüzde 15'e ulaştık:

  1. Bir device/<company-name>/<device-name> oluşturun sitenizin dizini belirler. Örneğin, device/google/marlin. Bu dizin kaynak kodu içerecek birlikte kullanmanız gerekir.
  2. device.mk olanak tanır. Örnek için bkz. device/google/marlin/device-marlin.mk.
  3. Cihaza göre belirli bir ürün oluşturmak için bir ürün tanımı dosyası oluşturun. İlgili içeriği oluşturmak için kullanılan örnek olarak aşağıdaki Makefile device/google/marlin/aosp_marlin.mk parametresinden alınmıştır. Ürünün device/google/marlin/device-marlin.mk ve sırasında, makefile üzerinden vendor/google/marlin/device-vendor-marlin.mk dosya ayrıca ad, marka ve model gibi ürüne özgü bilgileri de beyan etmeniz gerekir.
    # Inherit from the common Open Source product configuration
    $(call inherit-product, $(SRC_TARGET_DIR)/product/core_64_bit.mk)
    $(call inherit-product, $(SRC_TARGET_DIR)/product/aosp_base_telephony.mk)
    
    PRODUCT_NAME := aosp_marlin
    PRODUCT_DEVICE := marlin
    PRODUCT_BRAND := Android
    PRODUCT_MODEL := AOSP on msm8996
    PRODUCT_MANUFACTURER := Google
    PRODUCT_RESTRICT_VENDOR_FILES := true
    
    PRODUCT_COPY_FILES += device/google/marlin/fstab.common:$(TARGET_COPY_OUT_VENDOR)/etc/fstab.marlin
    
    $(call inherit-product, device/google/marlin/device-marlin.mk)
    $(call inherit-product-if-exists, vendor/google_devices/marlin/device-vendor-marlin.mk)
    
    PRODUCT_PACKAGES += \
        Launcher3QuickStep \
        WallpaperPicker
    

    Daha fazla bilgi için Ürün tanımı değişkenlerini ayarlama özelleştirilebilen değişkenlerdir.

  4. Ürünün maket dosyalarına yönlendiren bir AndroidProducts.mk dosyası oluşturun. İçinde Bu örnekte, yalnızca ürün tanımı hazır dosyası gereklidir. Aşağıdaki örnek, device/google/marlin/AndroidProducts.mk (hem marlin, hem de Pixel, ve sailfish, Pixel XL, çoğu yapılandırmayı paylaşan):
    PRODUCT_MAKEFILES := \
    	$(LOCAL_DIR)/aosp_marlin.mk \
    	$(LOCAL_DIR)/aosp_sailfish.mk
    
    COMMON_LUNCH_CHOICES := \
    	aosp_marlin-userdebug \
    	aosp_sailfish-userdebug
    
  5. Panoya özel yapılandırmalar içeren bir BoardConfig.mk oluşturma dosyası oluşturun. Örnek için bkz. device/google/marlin/BoardConfig.mk.
  6. Yalnızca Android 9 ve önceki sürümler için: vendorsetup.sh dosyasını kullanarak "öğle yemeği karması"nı derleme, derleme varyantı ile birlikte bir tireyle ayırın. Örnek:
    add_lunch_combo <product-name>-userdebug
    
    .
  7. Bu noktada, aynı cihaza dayalı daha fazla ürün varyantı oluşturabilirsiniz.

Ürün tanımı değişkenlerini ayarlama

Ürüne özel değişkenler, ürünün oluşturma dosyasında tanımlanır. Tabloda sizden bir ürün tanım dosyasında tutulan değişkenlerdir.

Değişken Açıklama Örnek
PRODUCT_AAPT_CONFIG Paket oluştururken kullanılacak aapt yapılandırma.
PRODUCT_BRAND Yazılımın özelleştirildiği marka (ör. operatör).
PRODUCT_CHARACTERISTICS Varyanta özel kaynakların pakete eklenmesini sağlamak için aapt özelliklerini kullanın. tablet, nosdcard
PRODUCT_COPY_FILES source_path:destination_path gibi kelimelerin listesi. Kaynak yolundaki dosya bu ürün oluşturulurken hedef yola kopyalanmalıdır. Kopyalamayla ilgili kurallar adımların config/makefile içinde tanımlanmıştır.
PRODUCT_DEVICE Endüstriyel tasarımın adı. Bu aynı zamanda pano adıdır ve derleme sistemi bunu kullanır BoardConfig.mk konumunu bulun. tuna
PRODUCT_LOCALES İki harfli dil kodunun, iki harfli ülke kodu çiftlerinin boşlukla ayrılmış listesi kullanıcı arayüzü dili ve saat, tarih ve para birimi biçimlendirme. PRODUCT_LOCALES listesinde listelenen ilk yerel ayar şu şekilde kullanılır: ürünün varsayılan yerel ayarını değiştirin. en_GB, de_DE, es_ES, fr_CA
PRODUCT_MANUFACTURER Üreticinin adı. acme
PRODUCT_MODEL Son ürünün son kullanıcı tarafından görülebilen adı.
PRODUCT_NAME Ürünün geneli için son kullanıcının görebildiği ad. Bu simge Ayarlar > Hakkında ekranını göreceksiniz.
PRODUCT_OTA_PUBLIC_KEYS Ürün için kablosuz (OTA) ortak anahtarların listesi.
PRODUCT_PACKAGES Yüklenecek APK'ların ve modüllerin listesi. Takvim kişileri
PRODUCT_PACKAGE_OVERLAYS Varsayılan kaynakların kullanılıp kullanılmayacağını veya ürüne özel yer paylaşımların ekleneceğini belirtir. vendor/acme/overlay
PRODUCT_SYSTEM_PROPERTIES için "key=value" biçimindeki sistem özelliği atamalarının listesi sistem bölümü. Diğer bölümlerin sistem özellikleri şunun aracılığıyla ayarlanabilir: PRODUCT_<PARTITION>_PROPERTIES şu şekildedir: Tedarikçi firma bölümü için PRODUCT_VENDOR_PROPERTIES. Desteklenen bölüm adlar: SYSTEM, VENDOR, ODM, SYSTEM_EXT ve PRODUCT.

Varsayılan sistem dilini ve yerel ayar filtresini yapılandırın

Varsayılan dil ve sistem yerel ayar filtresini yapılandırmak için bu bilgileri kullanın, ardından yeni bir cihaz türü için yerel ayar filtresini kullanın.

Özellikler

Özel sistem kullanarak hem varsayılan dili hem de sistem yerel ayarı filtresini yapılandırın özellikler:

  • ro.product.locale: Varsayılan yerel ayarı belirlemek için. Bu, başlangıçta ilk PRODUCT_LOCALES değişkenindeki yerel ayar; bu anahtar kelimelerin değer. (Daha fazla bilgi için Ürün tanımı değişkenlerini ayarlama tablosu.)
  • ro.localization.locale_filter: yerel ayar filtresi ayarlamak için yerel ayar adlarına uygulanan bir normal ifadedir. Örnek:
    • Kapsayıcı filtre: ^(de-AT|de-DE|en|uk).* - yalnızca Almanca'ya izin verir (Avusturya ve Almanya varyantları), İngilizce ve Ukraynaca tüm İngilizce varyantları
    • Özel filtre: ^(?!de-IT|es).* - Almanca (İtalya varyantı) hariç ve tümü İspanyolcanın diğer versiyonları.

Yerel ayar filtresini etkinleştir

Filtreyi etkinleştirmek için ro.localization.locale_filter sistem özelliği dize değerini ayarlayın.

Filtre özelliği değerini ve varsayılan dili oem/oem.prop aracılığıyla ayarlayarak kalibrasyon için filtreyi sistem görüntüsüne eklemeden kısıtlamaları yapılandırabilirsiniz. Bu tesislerin OEM bölümünden alındığından emin olmak için PRODUCT_OEM_PROPERTIES değişkeni aşağıda gösterildiği gibidir:

# Delegation for OEM customization
PRODUCT_OEM_PROPERTIES += \
    ro.product.locale \
    ro.localization.locale_filter

Daha sonra üretimde gerçek değerler, hedefi yansıtacak şekilde oem/oem.prop olarak yazılır. gereksinimlerini karşılayın. Bu yaklaşımla, fabrika ayarlarına sıfırlama sırasında varsayılan değerler korunur. Dolayısıyla, ilk ayarlar, kullanıcıya yapılan ilk kurulum gibi görünür.

ADB_VENDOR_KEYS öğesini USB üzerinden bağlanacak şekilde ayarlayın

ADB_VENDOR_KEYS ortam değişkeni, cihaz üreticilerinin manuel yetkilendirme olmadan adb üzerinde hata ayıklaması yapılabilir derlemeler (-userdebug ve -eng, ancak -user değil). Normalde adb, her istemci bilgisayarı için benzersiz bir RSA kimlik doğrulama anahtarı oluşturur ve bu anahtarı hemen kullanabilirsiniz. Bu, adb yetkilendirme iletişim kutusunda gösterilen RSA anahtarıdır. Kullanıcı alternatif olarak bilinen anahtarları sistem görüntüsünde oluşturup adb istemcisiyle paylaşabilirsiniz. Bu yöntem, işletim sistemi geliştirmede ve özellikle test için faydalıdır çünkü manuel olarak adb yetkilendirme iletişim kutusuyla etkileşimde bulunur.

Tedarikçi firma anahtarları oluşturmak için bir kişinin (genellikle sürüm yöneticisi) şunları yapması gerekir:

  1. adb keygen kullanarak bir anahtar çifti oluşturun. Google cihazları için Google, yeni bir her yeni OS sürümü için anahtar çifti oluşturun.
  2. Anahtar çiftlerini, kaynak ağacında bir yerde kontrol edin. Google, bunları Örneğin, vendor/google/security/adb/.
  3. PRODUCT_ADB_KEYS derleme değişkenini anahtar dizininize işaret edecek şekilde ayarlayın. Google bunu,Android.mk PRODUCT_ADB_KEYS := $(LOCAL_PATH)/$(PLATFORM_VERSION).adb_key.pub, her işletim sistemi sürümü için yeni bir anahtar çifti oluşturmayı hatırlamamızı sağlar.

Burada, Google'ın her bir sorgu için giriş yapılmış anahtar çiftlerini depoladığımız dizinde kullandığı makefile sürüm:

PRODUCT_ADB_KEYS := $(LOCAL_PATH)/$(PLATFORM_VERSION).adb_key.pub

ifeq ($(wildcard $(PRODUCT_ADB_KEYS)),)
  $(warning ========================)
  $(warning The adb key for this release)
  $(warning )
  $(warning   $(PRODUCT_ADB_KEYS))
  $(warning )
  $(warning does not exist. Most likely PLATFORM_VERSION in build/core/version_defaults.mk)
  $(warning has changed and a new adb key needs to be generated.)
  $(warning )
  $(warning Please run the following commands to create a new key:)
  $(warning )
  $(warning   make -j8 adb)
  $(warning   LOGNAME=android-eng HOSTNAME=google.com adb keygen $(patsubst %.pub,%,$(PRODUCT_ADB_KEYS)))
  $(warning )
  $(warning and upload/review/submit the changes)
  $(warning ========================)
  $(error done)
endif

Bu tedarikçi anahtarlarını kullanmak için bir mühendisin yalnızca ADB_VENDOR_KEYS ayarını yapması gerekir ortam değişkeninin anahtar çiftlerinin depolandığı dizine işaret etmesini sağlamaktır. Bu işlemle adb, oluşturulan anahtarlara dönmeden önce bu standart anahtarları denemesini ister. ana makine anahtarı tarafından desteklenmektedir. adb, yetkisiz bir cihaza bağlanamadığında cihazınız için geçerli değilse hata mesajı, ADB_VENDOR_KEYS özelliğini ayarlamanızı önerir. ayarlayabilirsiniz.