Yeni Cihaz Ekleme

Cihazınız ve ürününüz için makefile dosyaları oluşturmak için bu sayfadaki bilgileri kullanın.

Her yeni Android modülünün, yapı sistemini modül meta verileri, derleme zamanı bağımlılıkları ve paketleme talimatlarıyla yönlendirmek için bir yapılandırma dosyası olmalıdır. Android kullanan Soong kurulum sistemine . Bkz Yapı Android'i Android inşa sistemi hakkında daha fazla bilgi için bkz.

Derleme katmanlarını anlama

Yapı hiyerarşisi, bir cihazın fiziksel yapısına karşılık gelen soyutlama katmanlarını içerir. Bu katmanlar aşağıdaki tabloda açıklanmıştır. Her katman, bir-çok ilişkisi içinde üstündeki katmanla ilişkilidir. Örneğin, bir mimaride birden fazla pano olabilir ve her panoda birden fazla ürün olabilir. Belirli bir katmandaki bir öğeyi, aynı katmandaki bir öğenin uzmanlaşması olarak tanımlayabilirsiniz; bu, kopyalamayı ortadan kaldırır ve bakımı kolaylaştırır.

Katman Örnek Açıklama
Ürün myProduct, myProduct_eu, myProduct_eu_fr, j2, sdk Ürün katmanı, oluşturulacak modüller, desteklenen yerel ayarlar ve çeşitli yerel ayarlar için yapılandırma gibi bir sevkıyat ürününün özellik özelliklerini tanımlar. Başka bir deyişle, bu genel ürünün adıdır. Ürüne özel değişkenler, ürün tanımı makefilelerinde tanımlanır. Bir ürün, bakımı basitleştiren diğer ürün tanımlarından miras alabilir. Yaygın bir yöntem, tüm ürünler için geçerli olan özellikleri içeren bir temel ürün oluşturmak ve ardından bu temel ürüne dayalı ürün çeşitleri oluşturmaktır. Örneğin, yalnızca telsizlerine göre farklılık gösteren iki ürün (CDMA'ya karşı GSM), bir telsizi tanımlamayan aynı temel üründen miras alabilir.
kart/cihaz marlin, mavi çizgi, mercan Kart/cihaz katmanı, cihaz üzerindeki fiziksel plastik katmanını (yani cihazın endüstriyel tasarımını) temsil eder. Bu katman aynı zamanda bir ürünün çıplak şemalarını da temsil eder. Bunlar, karttaki çevre birimlerini ve konfigürasyonlarını içerir. Kullanılan adlar yalnızca farklı kart/cihaz konfigürasyonları için kodlardır.
Kemer kol, x86, kol64, x86_64 Mimari katmanı, kart üzerinde çalışan işlemci yapılandırmasını ve uygulama ikili arabirimini (ABI) tanımlar.

Yapı varyantlarını kullanma

Belirli bir ürün için derleme yaparken, son sürüm derlemesinde küçük değişiklikler yapmak yararlıdır. Bir modül tanımda, modül ile etiketleri belirtebilirsiniz LOCAL_MODULE_TAGS bir veya daha fazla değer olabilen, optional (varsayılan), debug ve eng .

Bir modül (bir etiket belirtmezse LOCAL_MODULE_TAGS ), onun etiket varsayılan optional . O sahip ürün konfigürasyonu gerektirdiği eğer İsteğe bağlı modülü yalnızca yüklü PRODUCT_PACKAGES .

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

varyant Açıklama
eng Bu varsayılan lezzettir.
  • Yüklemeleri modülleri ile etiketlenmiş eng veya debug .
  • Etiketli modüllere ek olarak ürün tanım dosyalarına göre modülleri kurar.
  • ro.secure=0
  • ro.debuggable=1
  • ro.kernel.android.checkjni=1
  • adb varsayılan olarak etkindir.
user Varyant, son sürüm bitleri olarak tasarlandı.
  • Yüklemeleri modülleri ile etiketlenmiş user .
  • Etiketli modüllere ek olarak ürün tanım dosyalarına göre modülleri kurar.
  • ro.secure=1
  • ro.debuggable=0
  • adb varsayılan olarak devre dışıdır.
userdebug Aynı şekilde user bu istisnalar dışında:
  • Ayrıca etiketlendi modülleri yükler debug .
  • ro.debuggable=1
  • adb varsayılan olarak etkindir.

Kullanıcı hata ayıklama yönergeleri

Testte userdebug derlemelerini çalıştırmak, cihaz geliştiricilerinin geliştirme aşamasındaki sürümlerin performansını ve gücünü anlamasına yardımcı olur. Kullanıcı ve kullanıcı hata ayıklama yapıları arasında tutarlılığı korumak ve hata ayıklama için kullanılan yapılarda güvenilir ölçümler elde etmek için cihaz geliştiricileri şu yönergeleri izlemelidir:

  • userdebug, aşağıdakiler dışında, root erişimi etkinleştirilmiş bir kullanıcı derlemesi olarak tanımlanır:
    • yalnızca kullanıcı tarafından isteğe bağlı olarak çalıştırılan, yalnızca kullanıcı hata ayıklama uygulamaları
    • Kullanmak gibi (tam dolu / şarj) sadece boşta bakım sırasında çalışmaya Operasyonlar, dex2oatd karşı dex2oat arkaplan derlerken için
  • Yapı türüne göre varsayılan olarak etkinleştirilen/devre dışı bırakılan özellikleri dahil etmeyin. Geliştiricilerin, hata ayıklama günlüğü veya yığın boşaltma gibi pil ömrünü etkileyen herhangi bir günlük kaydı biçimini kullanmaları önerilmez.
  • Userdebug'da varsayılan olarak etkinleştirilen hata ayıklama özellikleri açıkça tanımlanmalı ve proje üzerinde çalışan tüm geliştiricilerle paylaşılmalıdır. Hata ayıklama özelliklerini, hata ayıklamaya çalıştığınız sorun çözülene kadar yalnızca sınırlı bir süre için etkinleştirmelisiniz.

Derlemeyi kaynak bindirmeleri ile özelleştirme

Android derleme sistemi, bir ürünü derleme zamanında özelleştirmek için kaynak bindirmeleri kullanır. Kaynak bindirmeleri, varsayılanların üzerine uygulanan kaynak dosyalarını belirtir. Kaynak bindirmeleri kullanmak için, seti proje Buildfile değiştirmek PRODUCT_PACKAGE_OVERLAYS üst düzey dizinin ilgili bir yol için. Bu yol, derleme sistemi kaynakları aradığında mevcut kökle birlikte aranan bir gölge kök haline gelir.

En sık özelleştirilmiş ayarlar dosyası içinde bulunan çerçeveler / baz / çekirdek / res / res / değerler / config.xml .

Bu dosyada bir kaynak yerleşimi ayarlamak için, aşağıdakilerden birini kullanarak yerleşim dizinini proje derleme dosyasına ekleyin:

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

Bindirme bulunan herhangi dizeleri veya dize diziler config.xml dosyasında orijinal dosya bulunanlar değiştirin.

Bir ürün inşa etmek

Cihazınız için kaynak dosyaları birçok farklı şekilde düzenleyebilirsiniz. Bir Pixel uygulamasını organize etmenin bir yolunun kısa bir açıklaması burada.

Piksel bir ana cihaz konfigürasyonu adlı ile uygulanmaktadır marlin . Bu cihaz konfigürasyonundan, cihaz hakkında isim ve model gibi ürüne özel bilgileri bildiren bir ürün tanımı makefile ile bir ürün oluşturulur. Görebilirsiniz device/google/marlin tüm bu nasıl ayarlandığını görmek için dizin.

Ürün makefile yazma

Aşağıdaki adımlarda, Pixel ürün serisine benzer bir şekilde ürün oluşturma dosyalarının nasıl kurulacağı açıklanmaktadır:

  1. Bir oluşturun device/ <company-name> / <device-name> Ürününüz için dizin. Örneğin, device/google/marlin . Bu dizin, cihazınızın kaynak kodunu ve bunları oluşturacak makefile dosyalarını içerecektir.
  2. Bir oluşturun device.mk Makefile cihaz için gerekli dosya ve modülleri beyan etmektedir. Örnek olarak, bkz device/google/marlin/device-marlin.mk .
  3. Cihaza dayalı olarak belirli bir ürün oluşturmak için bir ürün tanımı makefile oluşturun. Aşağıdaki Makefile'dan alınır device/google/marlin/aosp_marlin.mk örnek olarak. Bildirim gelen ürün devralır o device/google/marlin/device-marlin.mk ve vendor/google/marlin/device-vendor-marlin.mk ayrıca adı, markası gibi ürüne özgü bilgileri beyan ederken makefile'daki yoluyla dosyaları ve modeli.
    # 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
    

    Bkz ürün tanımı değişkenleri ayarlama size makefiles ekleyebileceğiniz ürüne özel ek değişkenler için.

  4. Bir oluşturma AndroidProducts.mk ürünün makefiles için puan o dosyayı. Bu örnekte, yalnızca ürün tanımı makefile gereklidir. Aşağıdaki örnek, bir device/google/marlin/AndroidProducts.mk : (her iki Marlin, Pixel ve Yelkenbalığı içerir, en çok paylaşılan yapılandırması Piksel XL)
    PRODUCT_MAKEFILES := \
    	$(LOCAL_DIR)/aosp_marlin.mk \
    	$(LOCAL_DIR)/aosp_sailfish.mk
    
    COMMON_LUNCH_CHOICES := \
    	aosp_marlin-userdebug \
    	aosp_sailfish-userdebug
    
  5. Bir oluşturun BoardConfig.mk tahta özgü yapılandırmaları içeren makefile. Örnek olarak, bkz device/google/marlin/BoardConfig.mk .
  6. Sadece düşürmek ve Android 9, bir oluşturmak vendorsetup.sh bir birlikte bir yapı için ürününüzü (bir "öğle açılan") eklemek için dosyayı inşa varyantı bir tire ile ayrılmış. Örneğin:
    add_lunch_combo <product-name>-userdebug
    
  7. Bu noktada, aynı cihaza dayalı daha fazla ürün çeşidi oluşturabilirsiniz.

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

Ürüne özel değişkenler, ürünün makefile dosyasında tanımlanır. Tablo, bir ürün tanımı dosyasında tutulan bazı değişkenleri gösterir.

Değişken Açıklama Örnek
PRODUCT_AAPT_CONFIG aapt paketleri oluştururken konfigürasyonları kullanımı.
PRODUCT_BRAND Varsa, yazılımın özelleştirildiği marka (örneğin, taşıyıcı).
PRODUCT_CHARACTERISTICS aapt özellikleri bir paket varyant özgü bilgi eklemek izin vermek. tablet , nosdcard
PRODUCT_COPY_FILES Kelimelerin listesi gibi source_path:destination_path . Bu ürün oluşturulurken kaynak yoldaki dosya hedef yola kopyalanmalıdır. Kopya adımlar için kurallar tanımlanmıştır config/makefile .
PRODUCT_DEVICE Endüstriyel tasarımın adı. Bu aynı zamanda tahta adıdır ve yapı sistemi bulmak için kullanır BoardConfig.mk . tuna
PRODUCT_LOCALES Kullanıcı için UI dili ve saat, tarih ve para birimi biçimlendirmesi gibi çeşitli ayarları açıklayan iki harfli dil kodu, iki harfli ülke kodu çiftlerinden oluşan boşlukla ayrılmış bir liste. Listelenen ilk yerel PRODUCT_LOCALES ürünün varsayılan yerel olarak kullanılır. en_GB , de_DE , es_ES , fr_CA
PRODUCT_MANUFACTURER Üreticinin adı. acme
PRODUCT_MODEL Son ürün için son kullanıcı tarafından görülebilen ad.
PRODUCT_NAME Genel ürün için son kullanıcı tarafından görülebilen ad. Hakkında ekranı Ayarlar> görünür.
PRODUCT_OTA_PUBLIC_KEYS Ürün için kablosuz (OTA) genel anahtarlarının listesi.
PRODUCT_PACKAGES Kurulacak APK'lerin ve modüllerin listesi. Takvim kişileri
PRODUCT_PACKAGE_OVERLAYS Varsayılan kaynakları mı kullanacağınızı veya ürüne özel kaplamalar mı ekleyeceğinizi belirtir. vendor/acme/overlay
PRODUCT_SYSTEM_PROPERTIES Biçiminde sistem özelliği atamaları listesi "key=value" Sistem bölümü için. Diğer bölümler için sistem özellikleri aracılığıyla ayarlanabilir PRODUCT_<PARTITION>_PROPERTIES gibi PRODUCT_VENDOR_PROPERTIES satıcı bölümü için. Desteklenen bölüm isimleri: SYSTEM , VENDOR , ODM , SYSTEM_EXT ve PRODUCT .

Varsayılan sistem dilini ve yerel ayar filtresini yapılandırma

Varsayılan dili 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 etkinleştirin.

Özellikler

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

  • ro.product.locale : varsayılan yerel ayarı için. Bu başlangıçta ilk yerel ayar olarak ayarlanır PRODUCT_LOCALES değişken; bu değeri geçersiz kılabilirsiniz. (Daha fazla bilgi için, bkz Ayar ürün tanımı değişkenleri tablo.)
  • ro.localization.locale_filter : Normal ifade adlarını yerel ayarında uygulanan kullanarak bir yerel filtresi ayarlamak için. Örneğin:
    • Dahil filtresi: ^(de-AT|de-DE|en|uk).* - (Avusturya ve Almanya varyantları) sadece Alman verir, tüm İngilizce İngilizce varyantları ve Ukrayna
    • Münhasır filtresi: ^(?!de-IT|es).* - Almanca (İtalya varyant) dışlayan ve tüm İspanyolca varyantları.

Yerel ayar filtresini etkinleştirme

Filtreyi etkinleştirmek için, set ro.localization.locale_filter sistem özelliği dize değeri.

Aracılığıyla filtre özellik değerini ve varsayılan dili ayarlayarak oem/oem.prop sistem görüntüsü Filtreyi pişirme olmadan kısıtlamaları yapılandırabilirsiniz fabrika kalibrasyon sırasında. Sen ekleyerek bu özellikleri OEM bölümünden aldı sağlamak PRODUCT_OEM_PROPERTIES aşağıda belirtildiği gibi değişken:

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

Ardından üretimde gerçek değerler yazılır oem/oem.prop , hedef gereksinimlerini yansıtmak için. Bu yaklaşımla, fabrika ayarlarına sıfırlama sırasında varsayılan değerler korunur, böylece ilk ayarlar kullanıcıya tam olarak ilk kurulum gibi görünür.

ADB_VENDOR_KEYS USB üzerinden bağlanacak şekilde ayarlanıyor

ADB_VENDOR_KEYS ortam değişkeni oluşturur erişim debuggable cihaz üreticileri sağlar (-userdebug ve -eng değil -kullanicitarafindanolusturulmus) üzerinden adb manuel yetkilendirme olmadan. Normalde adb, her istemci bilgisayar için bağlı herhangi bir cihaza göndereceği benzersiz bir RSA kimlik doğrulama anahtarı oluşturur. Bu, adb yetkilendirme iletişim kutusunda gösterilen RSA anahtarıdır. Alternatif olarak, bilinen anahtarları sistem görüntüsüne ekleyebilir ve bunları adb istemcisi ile paylaşabilirsiniz. Bu, işletim sistemi geliştirme ve özellikle test etme için yararlıdır çünkü adb yetkilendirme iletişim kutusuyla manuel olarak etkileşime girme ihtiyacını ortadan kaldırır.

Satıcı anahtarları oluşturmak için bir kişi (genellikle bir sürüm yöneticisi) şunları yapmalıdır:

  1. Kullanarak bir anahtar çifti oluşturmak adb keygen . Google cihazları için Google, her yeni işletim sistemi sürümü için yeni bir anahtar çifti oluşturur.
  2. Kaynak ağacın bir yerinde anahtar çiftlerini kontrol edin. Google depolar vendor/google/security/adb/ örneğin.
  3. İnşa değişken ayarlayın PRODUCT_ADB_KEYS anahtar dizine noktaya kadar. Google'ın bir ekleyerek bunu yapar Android.mk söylüyor anahtar dizinde dosyayı PRODUCT_ADB_KEYS := $(LOCAL_PATH)/$(PLATFORM_VERSION).adb_key.pub her işletim sistemi sürümü için yeni bir anahtar çifti oluşturmak için hatırlamak sağlamaya yardımcı olur.

Google'ın, her sürüm için teslim edilen anahtar çiftlerimizi depoladığımız dizinde kullandığı makefile:

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 satıcı tuşlarını kullanmak için, bir mühendis sadece ayarlaması gerekir ADB_VENDOR_KEYS anahtar çiftinin saklandığı dizine noktaya ortam değişkeni. Bu söyler adb manuel provizyon talep üretilen konak anahtarına geri düşmeden önce, ilk olarak bu kanonik anahtarları denemek için. Ne zaman adb yetkisiz bir cihaza bağlanamıyorum, hata iletisi set önerir ADB_VENDOR_KEYS zaten ayarlanmış değilse.