Cihazınız ve ürününüz için makefile'leri oluşturmak üzere bu sayfadaki bilgileri kullanın.
Her yeni Android modülünde, derleme sistemini modül meta verileriyle, derleme zamanı bağımlılıklarıyla ve paketleme talimatlarıyla yönlendirecek bir yapılandırma dosyası bulunmalıdır. Android, Soong derleme sistemini kullanır. Android derleme sistemi hakkında daha fazla bilgi için Android'i derleme başlıklı makaleyi inceleyin.
Derleme katmanlarını anlama
Derleme 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şkiyle üstteki katmanla ilişkilidir. Örneğin, bir mimarinin birden fazla kartı olabilir ve her kartın birden fazla ürünü olabilir. Belirli bir katmandaki bir öğeyi, aynı katmandaki bir öğenin özellemesi olarak tanımlayabilirsiniz. Bu sayede kopyalama işlemini ortadan kaldırabilir ve bakımı basitleştirebilirsiniz.
Katman | Örnek | Açıklama |
---|---|---|
Ürün | myProduct, myProduct_eu, myProduct_eu_fr, j2, sdk | Ürün katmanı, bir kargo ürününün özellik spesifikasyonunu (ör. oluşturulacak modüller, desteklenen yerel ayarlar ve çeşitli yerel ayarlar için yapılandırma) tanımlar. Diğer bir deyişle, bu, genel ürünün adı Ürüne özel değişkenler, ürün tanımı makefile'lerinde tanımlanır. Ürünler diğer ürün tanımlarından devralınabilir. Bu, bakım işlemlerini basitleştirir. 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 varyantları oluşturmaktır. Örneğin, yalnızca radyolarında (CDMA ve GSM) farklılık gösteren iki ürün, radyo tanımlamayan aynı temel ürünü miras alabilir. |
Kart/cihaz | marlin, blueline, mercan | Kart/cihaz katmanı, cihazdaki fiziksel plastik katmanı (yani cihazın endüstriyel tasarımını) temsil eder. Bu katman, bir ürünün temel şemalarını da temsil eder. Bunlar arasında karttaki çevre birimleri ve yapılandırmaları da bulunur. Kullanılan adlar, farklı kart/cihaz yapılandırmaları için kodlardan ibarettir. |
Kemer | arm, x86, arm64, x86_64 | Mimari katmanı, kartta çalışan işlemci yapılandırmasını ve uygulama ikili arabirimini (ABI) açıklar. |
Derleme varyantlarını kullanma
Belirli bir ürün için derleme yaparken nihai sürüm derlemesinde küçük varyasyonlar olması yararlıdır. Bir modül tanımında, modül LOCAL_MODULE_TAGS
ile etiketler belirtebilir. Bu etiketler optional
(varsayılan), debug
ve eng
değerlerinden biri veya daha fazlası olabilir.
Bir modülde etiket belirtilmezse (LOCAL_MODULE_TAGS
ile) etiket varsayılan olarak optional
olur. İsteğe bağlı modüller yalnızca PRODUCT_PACKAGES
ile ürün yapılandırması tarafından gerekiyorsa yüklenir.
Bunlar, şu anda tanımlanmış derleme varyantlarıdır.
Varyant | Açıklama |
---|---|
eng
|
Bu, varsayılan lezzettir.
|
user
|
Nihai sürüm bitleri olması amaçlanan varyant.
|
userdebug
|
Aşağıdaki istisnalar dışında user ile aynıdır:
|
userdebug için yönergeler
Test sırasında userdebug derlemelerini çalıştırmak, cihaz geliştiricilerine geliştirme aşamasındaki sürümlerin performansını ve gücünü anlamalarına yardımcı olur. Cihaz geliştiricileri, kullanıcı ve userdebug derlemeleri arasında tutarlılık sağlamak ve hata ayıklama için kullanılan derlemelerde güvenilir metrikler elde etmek amacıyla aşağıdaki yönergeleri uygulamalıdır:
- userdebug, aşağıdakiler hariç olmak üzere kök erişiminin etkin olduğu bir kullanıcı derlemesi olarak tanımlanır:
- Yalnızca kullanıcı tarafından istek üzerine çalıştırılan yalnızca userdebug uygulamaları
- Arka plan derlemeleri için
dex2oatd
yerinedex2oat
kullanmak 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 etkinleştirilen/devre dışı bırakılan özellikleri dahil etmeyin. Geliştiricilerin hata ayıklama günlük kaydı veya yığın dökümü gibi pil ömrünü etkileyen herhangi bir günlük kaydı kullanmaları önerilmez.
- userdebug'da varsayılan olarak etkinleştirilen tüm hata ayıklama özellikleri açıkça tanımlanmalı ve projede çalışan tüm geliştiricilerle paylaşılmalıdır. Hata ayıklama özelliklerini, hata ayıklama
Kaynak yer paylaşımlarıyla derlemeyi özelleştirme
Android derleme sistemi, bir ürünü derleme sırasında özelleştirmek için kaynak yer paylaşımlarını kullanır. Kaynak yer paylaşımları, varsayılanların üzerine uygulanan kaynak dosyalarını belirtir. Kaynak yer paylaşımlarını kullanmak için proje derleme dosyasını, PRODUCT_PACKAGE_OVERLAYS
değerini en üst düzey dizininize göre bir yola ayarlayacak şekilde değiştirin. Bu yol, derleme sistemi kaynaklar aradığında mevcut kökle birlikte aranan bir gölge kök haline gelir.
En sık özelleştirilen ayarlar frameworks/base/core/res/res/values/config.xml dosyasında bulunur.
Bu dosyada bir kaynak yer paylaşımı oluşturmak 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, dizin için bir yer paylaşımı 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 dize veya dize dizileri, orijinal dosyada bulunanların yerini alır.
Ürün oluşturma
Cihazınızın kaynak dosyalarını birçok farklı şekilde düzenleyebilirsiniz. Pixel uygulamasını düzenlemenin bir yolunun kısa bir açıklamasını aşağıda bulabilirsiniz.
Pixel, marlin
adlı bir ana cihaz yapılandırmasıyla uygulanır. Bu cihaz yapılandırmasından, cihazla ilgili ürüne özgü bilgileri (ör. ad ve model) açıklayan bir ürün tanımı makefile ile 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'leri yazma
Aşağıdaki adımlarda, ürün makefile'lerinin Pixel ürün serisine benzer şekilde nasıl ayarlanacağı açıklanmaktadır:
- Ürününüz için bir
device/<company-name>/<device-name>
dizin oluşturun. Örneğin,device/google/marlin
. Bu dizin, cihazınızın kaynak kodunu ve bu kodu derlemek için gereken makefile'leri içerir. - Cihaz için gereken dosyaları ve modülleri açıklayan bir
device.mk
makefile oluşturun. Örnek için bkz.device/google/marlin/device-marlin.mk
. - Cihaza göre belirli bir ürün oluşturmak için ürün tanımı makefile'i oluşturun. Aşağıdaki makefile, örnek olarak
device/google/marlin/aosp_marlin.mk
'ten 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 devraldığına ve ad, marka ve model gibi ürüne özgü bilgileri de beyan ettiğine dikkat edin.# 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
Derleme dosyalarınıza ekleyebileceğiniz ürüne özgü diğer değişkenler için Ürün tanımı değişkenlerini ayarlama bölümüne bakın.
- Ürünün makefile'lerini işaret eden bir
AndroidProducts.mk
dosyası oluşturun. Bu örnekte, yalnızca ürün tanımı makefile'i gereklidir. Aşağıdaki örnek,device/google/marlin/AndroidProducts.mk
(hem marlin (Pixel) hem de sailfish (Pixel XL) cihazları içerir. Bu cihazlar, yapılandırmalarının büyük bir kısmını paylaşır.) cihazından alınmıştır:PRODUCT_MAKEFILES := \ $(LOCAL_DIR)/aosp_marlin.mk \ $(LOCAL_DIR)/aosp_sailfish.mk COMMON_LUNCH_CHOICES := \ aosp_marlin-userdebug \ aosp_sailfish-userdebug
- Karta özgü yapılandırmaları içeren bir
BoardConfig.mk
makefile oluşturun. Örnek için bkz.device/google/marlin/BoardConfig.mk
. - Yalnızca Android 9 ve önceki sürümler için ürününüzü derleme varyantıyla birlikte tire ile ayrılmış bir
vendorsetup.sh
dosyasıyla derlemeye ekleyin. Örnek:add_lunch_combo <product-name>-userdebug
- 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 makefile dosyasında tanımlanır. Tabloda, ürün tanımı dosyasında tutulan değişkenlerden bazıları gösterilmektedir.
Değişken | Açıklama | Örnek |
---|---|---|
PRODUCT_AAPT_CONFIG
|
Paket oluştururken kullanılacak aapt yapılandırmaları.
|
|
PRODUCT_BRAND
|
Yazılımın özelleştirildiği marka (ör. operatör). | |
PRODUCT_CHARACTERISTICS
|
aapt özelliklerini kullanarak pakete varyanta özel kaynaklar ekleyebilirsiniz.
|
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 adresinde tanımlanmıştır.
|
|
PRODUCT_DEVICE
|
Endüstriyel tasarımın adı. Bu aynı zamanda kart adıdır ve derleme sistemi BoardConfig.mk 'ü bulmak için bu adı kullanır.
|
tuna
|
PRODUCT_LOCALES
|
Kullanıcının çeşitli ayarlarını (ör. kullanıcı arayüzü dili, saat, tarih ve para birimi biçimlendirmesi) açıklayan, iki harfli dil kodu ve iki harfli ülke kodu çiftlerinin boşlukla ayrılmış listesi. PRODUCT_LOCALES içinde 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ün son kullanıcı tarafından görülebilen adı. | |
PRODUCT_NAME
|
Ürünün tamamı için son kullanıcı tarafından görülebilen ad. Ayarlar > Hakkında ekranında görünür. | |
PRODUCT_OTA_PUBLIC_KEYS
|
Ürünün kablosuz (OTA) açık anahtarlarını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ı eklenip eklenmeyeceğini belirtir. |
vendor/acme/overlay
|
PRODUCT_SYSTEM_PROPERTIES
|
Sistem bölümü için "key=value" biçiminde sistem özelliği atamalarının listesi. Diğer bölümlerin sistem özellikleri, tedarikçi firma bölümü için PRODUCT_VENDOR_PROPERTIES 'te olduğu gibi PRODUCT_<PARTITION>_PROPERTIES üzerinden ayarlanabilir. Desteklenen bölüm adları: SYSTEM , VENDOR , ODM , SYSTEM_EXT ve PRODUCT .
|
Varsayılan sistem dilini ve yerel ayar filtresini yapılandırma
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 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 değer başlangıçtaPRODUCT_LOCALES
değişkenindeki ilk yerel ayara ayarlanı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 filtresi ayarlamak için yerel ayar adlarına uygulanan bir normal ifadeyi kullanır. Örneğin:- Kapsayıcı filtre:
^(de-AT|de-DE|en|uk).*
- yalnızca Almanca (Avusturya ve Almanya varyantları), İngilizcenin tüm varyantları ve Ukraynaca'ya izin verir - Münhasır filtre:
^(?!de-IT|es).*
- Almanca (İtalya varyantı) ve İspanyolca'nın tüm varyantlarını hariç tutar.
- Kapsayıcı filtre:
Yerel ayar filtresini etkinleştirme
Filtreyi etkinleştirmek için ro.localization.locale_filter
sistem özelliği dize değerini ayarlayın.
Fabrika kalibrasyonunda oem/oem.prop
aracılığıyla filtre özelliği değerini ve varsayılan dili ayarlayarak filtreyi sistem resmine yerleştirmeden kısıtlamaları yapılandırabilirsiniz.
Aşağıda belirtildiği gibi PRODUCT_OEM_PROPERTIES
değişkenine ekleyerek bu özelliklerin OEM bölümünden alınmasını sağlayabilirsiniz:
# Delegation for OEM customization
PRODUCT_OEM_PROPERTIES += \
ro.product.locale \
ro.localization.locale_filter
Ardından üretimde, hedef gereksinimleri yansıtmak için gerçek değerler oem/oem.prop
alanına yazılır. Bu yaklaşımda, fabrika ayarlarına sıfırlama sırasında varsayılan değerler korunur. Böylece, ilk ayarlar kullanıcı için tam olarak ilk kurulum gibi görünür.
USB üzerinden bağlanmak için ADB_VENDOR_KEYS ayarını yapma
ADB_VENDOR_KEYS
ortam değişkeni, cihaz üreticilerinin manuel yetkilendirme olmadan adb üzerinden hata ayıklama yapılabilir derlemelere (-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 bu anahtarı bağlı tüm cihazlara gönderir. Bu, adb yetkilendirme iletişim kutusunda gösterilen RSA anahtarıdır. Alternatif olarak, bilinen anahtarları sistem resmine ekleyebilir ve adb istemciyle paylaşabilirsiniz.
Bu, adb yetkilendirme iletişim kutusuyla manuel olarak etkileşim kurmayı önlediği için işletim sistemi geliştirme ve özellikle test için yararlıdır.
Tedarikçi anahtarları oluşturmak için bir kişi (genellikle sürüm yöneticisi) şunları yapmalıdır:
adb keygen
kullanarak bir anahtar çifti oluşturun. Google, Google cihazlar için her yeni işletim sistemi sürümü için yeni bir anahtar çifti oluşturur.- Kaynak ağacında bir yerdeki anahtar çiftlerini kontrol edin. Google bunları
vendor/google/security/adb/
gibi bir yerde depolar. - Derleme değişkeni
PRODUCT_ADB_KEYS
'yi anahtar dizininizi 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 dosya, her işletim sistemi sürümü için yeni bir anahtar çifti oluşturmayı hatırlamamıza yardımcı olur.
Google'ın her sürüm için teslim edilen anahtar çiftlerimizi depoladığımız dizinde kullandığı makefile 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 tedarikçi anahtarlarını kullanmak için mühendisin tek yapması gereken, ADB_VENDOR_KEYS
ortam değişkenini anahtar çiftlerinin depolandığı dizine yönlendirmektir.
Bu, adb
'e manuel yetkilendirme gerektiren oluşturulan ana makine anahtarına geçmeden önce bu standart anahtarları denemesini söyler. adb
, yetkisiz bir cihaza bağlanamadığında hata mesajında, henüz ayarlanmamışsa ADB_VENDOR_KEYS
'yi ayarlamanızı önerir.