Cihazınız ve ürününüz için makefile'lar oluşturmak için bu sayfadaki bilgileri kullanın.
Her yeni Android modülünün, derleme sistemini modül meta verileri, derleme zamanı bağımlılıkları ve paketleme talimatlarıyla yönlendirmek için bir yapılandırma dosyası olması gerekir. Android, Soong derleme sistemini kullanıyor. Android derleme sistemi hakkında daha fazla bilgi için bkz. Android Oluşturma.
Yapı katmanlarını anlayın
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, bire-çok ilişkisiyle bir üstteki katmanla ilişkilidir. Örneğin bir mimaride birden fazla pano bulunabilir ve her panoda birden fazla ürün bulunabilir. Belirli bir katmandaki bir öğeyi, aynı katmandaki bir öğenin özelleştirilmesi olarak tanımlayabilirsiniz; bu, kopyalamayı ortadan kaldırır ve bakımı kolaylaştırır.
Katman | Örnek | Tanım |
---|---|---|
Ü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 nakliye ürününün özellik spesifikasyonunu tanımlar. Başka bir deyişle bu, ürünün genel adıdır . Ürüne özgü değişkenler ürün tanımı makefile'larında tanımlanır. Bir ürün, bakımı kolaylaştıran 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 radyoları bakımından farklılık gösteren iki ürün (CDMA ve GSM), radyoyu tanımlamayan aynı temel üründen miras alabilir. |
Kart/cihaz | marlin, blueline, 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 bunların konfigürasyonunu içerir. Kullanılan adlar yalnızca farklı kart/cihaz konfigürasyonlarına yönelik kodlardır. |
Kemer | kol, x86, arm64, x86_64 | Mimari katmanı, kartta çalışan işlemci yapılandırmasını ve uygulama ikili arayüzünü (ABI) açıklar. |
Derleme değişkenlerini kullan
Belirli bir ürün için geliştirme yaparken, son sürüm yapısında küçük farklılıklar olması yararlı olur. Bir modül tanımında modül, optional
(varsayılan), debug
ve eng
değerlerinin bir veya daha fazla değeri olabilen LOCAL_MODULE_TAGS
ile etiketleri belirtebilir.
Bir modül bir etiket belirtmezse ( LOCAL_MODULE_TAGS
ile), etiketi varsayılan olarak optional
bağlı olur. İsteğe bağlı bir modül yalnızca PRODUCT_PACKAGES
ile ürün yapılandırması gerektiriyorsa takılır.
Bunlar şu anda tanımlanmış yapı çeşitleridir.
Varyant | Tanım |
---|---|
eng | Bu varsayılan lezzettir.
|
user | Varyant, son sürüm bitleri olarak tasarlandı.
|
userdebug | Şu istisnalar dışında user ile aynıdır:
|
Kullanıcı hata ayıklama yönergeleri
Userdebug derlemelerini test sırasında çalıştırmak, cihaz geliştiricilerinin geliştirme aşamasındaki sürümlerin performansını ve gücünü anlamaları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ştiricilerinin şu yönergeleri izlemesi gerekir:
- userdebug, aşağıdakiler hariç, root erişiminin etkin olduğu bir kullanıcı yapısı 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ı
- Arka planda derlemeler için
dex2oatd
vedex2oat
kullanımı gibi yalnızca boşta bakım sırasında (şarj cihazında/tam şarjlı) çalışan işlemler
- Derleme türüne göre varsayılan olarak etkin/devre dışı olan özellikleri eklemeyin. 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 etkin olan tüm hata ayıklama özellikleri açıkça tanımlanmalı ve proje üzerinde çalışan tüm geliştiricilerle paylaşılmalıdır. Hata ayıklamaya çalıştığınız sorun çözülene kadar hata ayıklama özelliklerini yalnızca sınırlı bir süre için etkinleştirmelisiniz.
Derlemeyi kaynak katmanlarıyla özelleştirin
Android derleme sistemi, bir ürünü derleme sırasında özelleştirmek için kaynak katmanlarını kullanır. Kaynak katmanları, varsayılanların üzerine uygulanan kaynak dosyalarını belirtir. Kaynak katmanlarını kullanmak için proje derleme dosyasını, PRODUCT_PACKAGE_OVERLAYS
üst düzey dizininize göre bir yola ayarlayacak şekilde değiştirin. Bu yol, yapı sistemi kaynakları aradığında geçerli kökle birlikte aranan bir gölge kök haline gelir.
En yaygın olarak özelleştirilmiş ayarlar frameworks/base/core/res/res/values/config.xml dosyasında bulunur.
Bu dosyada bir kaynak yer paylaşımı ayarlamak için aşağıdakilerden birini kullanarak yer paylaşımı 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 kaplama dosyası ekleyin, örneğin:
vendor/foobar/overlay/frameworks/base/core/res/res/values/config.xml
Kaplama config.xml
dosyasında bulunan tüm dizeler veya dize dizileri, orijinal dosyada bulunanların yerine geçer.
Bir ürün oluşturun
Cihazınızın kaynak dosyalarını birçok farklı şekilde düzenleyebilirsiniz. Burada Pixel uygulamasını organize etmenin bir yolunun kısa bir açıklaması bulunmaktadır.
Pixel, marlin
adlı bir ana cihaz yapılandırmasıyla uygulanır. Bu cihaz konfigürasyonundan, isim ve model gibi cihaz hakkında ürüne özel bilgileri bildiren ürün tanımı makefile dosyasına sahip bir ürün oluşturulur. Tüm bunların nasıl ayarlandığını görmek için device/google/marlin
dizinini görüntüleyebilirsiniz.
Ürün makefile'larını yazın
Aşağıdaki adımlarda ürün marka dosyalarının Pixel ürün serisindekine benzer şekilde nasıl kurulacağı açıklanmaktadır:
- Ürününüz için bir
device/ <company-name> / <device-name>
dizini oluşturun. Örneğin,device/google/marlin
. Bu dizin, cihazınızın kaynak kodunu ve bunları oluşturmak için gerekli makefile dosyalarını içerecektir. - Aygıt için gereken dosyaları ve modülleri bildiren bir
device.mk
makefile dosyası oluşturun. Örnek için, bkzdevice/google/marlin/device-marlin.mk
. - Cihaza dayalı olarak belirli bir ürün oluşturmak için ürün tanımı makefile dosyası oluşturun. Aşağıdaki makefile örnek olarak
device/google/marlin/aosp_marlin.mk
adresinden alınmıştır. Ürünün, makefile aracılığıyladevice/google/marlin/device-marlin.mk
vevendor/google/marlin/device-vendor-marlin.mk
dosyalarından miras aldığını ve aynı zamanda ad, marka gibi ürüne özgü bilgileri de bildirdiğine dikkat edin. 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
Makefile dosyalarınıza ekleyebileceğiniz ürüne özel ek değişkenler için Ürün tanımı değişkenlerini ayarlama konusuna bakın.
- Ürünün makefile dosyalarına işaret eden bir
AndroidProducts.mk
dosyası oluşturun. Bu örnekte yalnızca ürün tanımı makefile dosyasına ihtiyaç duyulmaktadır. Aşağıdaki örnekdevice/google/marlin/AndroidProducts.mk
alınmıştır (hem marlin'i, Pixel'i hem de yelken balığını, çoğu yapılandırmayı paylaşan Pixel XL'i içerir):PRODUCT_MAKEFILES := \ $(LOCAL_DIR)/aosp_marlin.mk \ $(LOCAL_DIR)/aosp_sailfish.mk COMMON_LUNCH_CHOICES := \ aosp_marlin-userdebug \ aosp_sailfish-userdebug
- Panoya özgü konfigürasyonları içeren bir
BoardConfig.mk
makefile dosyası oluşturun. Örnek için, bkzdevice/google/marlin/BoardConfig.mk
. - Yalnızca Android 9 ve daha düşük sürümler için , ürününüzü ("öğle yemeği kombinasyonu") kısa çizgiyle ayrılmış bir yapı varyantıyla birlikte yapıya eklemek için bir
vendorsetup.sh
dosyası oluşturun. Örneğin:add_lunch_combo <product-name>-userdebug
- Bu noktada aynı cihazı temel alarak 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 değişkenlerden bazılarını göstermektedir.
Değişken | Tanım | Örnek |
---|---|---|
PRODUCT_AAPT_CONFIG | Paketleri oluştururken kullanılacak aapt yapılandırmalar. | |
PRODUCT_BRAND | Yazılımın özelleştirildiği marka (örneğin operatör). | |
PRODUCT_CHARACTERISTICS | Bir pakete varyanta özgü kaynakların eklenmesine izin veren aapt özellikleri. | tablet , nosdcard |
PRODUCT_COPY_FILES | source_path:destination_path gibi kelimelerin listesi. Bu ürün oluşturulurken kaynak yoldaki dosya hedef yola kopyalanmalıdır. Kopyalama adımlarına ilişkin kurallar config/makefile dosyasında tanımlanmıştır. | |
PRODUCT_DEVICE | Endüstriyel tasarımın adı. Bu aynı zamanda pano adıdır ve yapı sistemi BoardConfig.mk bulmak için bunu kullanır. | tuna |
PRODUCT_LOCALES | Kullanıcı arayüzü dili ve saat, tarih ve para birimi biçimlendirmesi gibi kullanıcı için çeşitli ayarları açıklayan, iki harfli dil kodu ve iki harfli ülke kodu çiftlerinden oluşan, boşluklarla ayrılmış bir liste. PRODUCT_LOCALES listelenen ilk yerel ayar, ürünün varsayılan yerel ayarı 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ının görebileceği ad. | |
PRODUCT_NAME | Ürünün geneli için son kullanıcının görebileceği ad. Ayarlar > Hakkında ekranında görünür. | |
PRODUCT_OTA_PUBLIC_KEYS | Ürün için kablosuz (OTA) genel anahtarların listesi. | |
PRODUCT_PACKAGES | Yüklenecek APK'ların ve modüllerin listesi. | Takvim kişileri |
PRODUCT_PACKAGE_OVERLAYS | Varsayılan kaynakların mı kullanılacağını yoksa ürüne özel katmanların mı ekleneceğini belirtir. | vendor/acme/overlay |
PRODUCT_SYSTEM_PROPERTIES | Sistem bölümü için "key=value" biçimindeki sistem özelliği atamalarının listesi. Diğer bölümlere ilişkin sistem özellikleri, satıcı bölümü için PRODUCT_VENDOR_PROPERTIES olduğu gibi PRODUCT_<PARTITION>_PROPERTIES aracılığıyla ayarlanabilir. 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 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ı ayarlamak için. Bu, başlangıçtaPRODUCT_LOCALES
değişkenindeki ilk yerel ayara ayarlanmıştır; bu değeri geçersiz kılabilirsiniz. (Daha fazla bilgi için Ürün tanımı değişkenlerini ayarlama tablosuna bakın.) -
ro.localization.locale_filter
: yerel ayar adlarına uygulanan normal ifadeyi kullanarak bir yerel ayar filtresi ayarlamak için. Örneğin:- Kapsamlı filtre:
^(de-AT|de-DE|en|uk).*
- yalnızca Almanca'ya (Avusturya ve Almanya varyantları), İngilizce'nin tüm İngilizce varyantlarına ve Ukraynaca'ya izin verir - Özel filtre:
^(?!de-IT|es).*
- Almanca (İtalya varyantı) ve İspanyolcanın tüm varyantlarını hariç tutar.
- Kapsamlı filtre:
Yerel filtreyi etkinleştir
Filtreyi etkinleştirmek için ro.localization.locale_filter
sistem özelliği dize değerini ayarlayın.
Fabrika kalibrasyonu sırasında filtre özelliği değerini ve varsayılan dili oem/oem.prop
aracılığıyla ayarlayarak, filtreyi sistem görüntüsüne yerleştirmeden kısıtlamaları yapılandırabilirsiniz. Bu özellikleri aşağıda belirtildiği gibi PRODUCT_OEM_PROPERTIES
değişkenine ekleyerek OEM bölümünden alındığından emin olursunuz:
# Delegation for OEM customization PRODUCT_OEM_PROPERTIES += \ ro.product.locale \ ro.localization.locale_filter
Daha sonra üretimde gerçek değerler, hedef gereksinimleri yansıtacak şekilde oem/oem.prop
dosyasına yazılır. Bu yaklaşımla, fabrika ayarlarına sıfırlama sırasında varsayılan değerler korunur, böylece başlangıç ayarları kullanıcıya tam olarak ilk kurulum gibi görünür.
ADB_VENDOR_KEYS'i USB üzerinden bağlanacak şekilde ayarlayın
ADB_VENDOR_KEYS
ortam değişkeni, cihaz üreticilerinin, manuel yetkilendirme olmadan adb üzerinden hata ayıklanabilir yapılara (-userdebug ve -eng, ancak -user değil) erişmesine olanak tanır. Normalde adb, her istemci bilgisayar için benzersiz bir RSA kimlik doğrulama anahtarı oluşturur ve bunu bağlı herhangi bir cihaza gönderir. Bu, adb yetkilendirme iletişim kutusunda gösterilen RSA anahtarıdır. Alternatif olarak, bilinen anahtarları sistem görüntüsüne oluşturabilir ve bunları adb istemcisiyle paylaşabilirsiniz. Bu, işletim sistemi geliştirme ve özellikle test etme açısından kullanışlıdır çünkü adb yetkilendirme iletişim kutusuyla manuel olarak etkileşim kurma ihtiyacını ortadan kaldırır.
Satıcı anahtarları oluşturmak için bir kişinin (genellikle sürüm yöneticisinin) şunları yapması gerekir:
-
adb keygen
kullanarak bir anahtar çifti oluşturun. Google cihazları için Google, her yeni işletim sistemi sürümü için yeni bir anahtar çifti oluşturur. - Kaynak ağacın herhangi bir yerindeki anahtar çiftlerini kontrol edin. Google bunları örneğin
vendor/google/security/adb/
dizininde saklar. -
PRODUCT_ADB_KEYS
yapı değişkenini anahtar dizininize işaret edecek şekilde ayarlayın. Google bunu, anahtar dizininePRODUCT_ADB_KEYS := $(LOCAL_PATH)/$(PLATFORM_VERSION).adb_key.pub
yazan birAndroid.mk
dosyası ekleyerek yapar; bu, her işletim sistemi sürümü için yeni bir anahtar çifti oluşturmayı hatırlamamıza yardımcı olur.
Her sürüm için teslim edilen anahtar çiftlerimizi sakladığımız dizinde Google'ın kullandığı makefile dosyası aşağıda verilmiştir:
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ı anahtarlarını kullanmak için bir mühendisin yalnızca ADB_VENDOR_KEYS
ortam değişkenini anahtar çiftlerinin depolandığı dizini işaret edecek şekilde ayarlaması gerekir. Bu adb
, manuel yetkilendirme gerektiren oluşturulan ana bilgisayar anahtarına geri dönmeden önce ilk önce bu kurallı anahtarları denemesini söyler. adb
, yetkisiz bir cihaza bağlanamadığında hata mesajı, önceden ayarlanmamışsa ADB_VENDOR_KEYS
ayarlamanızı önerecektir.