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.
|
user
|
Nihai yayın bitleri olması amaçlanan varyant.
|
userdebug
|
user ile aynıdır, ancak şu istisnalar mevcuttur:
|
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çindex2oat
- 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:
- 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. device.mk
olanak tanır. Örnek için bkz.device/google/marlin/device-marlin.mk
.- 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ündevice/google/marlin/device-marlin.mk
ve sırasında, makefile üzerindenvendor/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.
- Ü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
- Panoya özel yapılandırmalar içeren bir
BoardConfig.mk
oluşturma dosyası oluşturun. Örnek için bkz.device/google/marlin/BoardConfig.mk
. - 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
. - 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 ilkPRODUCT_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ı.
- Kapsayıcı filtre:
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:
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.- Anahtar çiftlerini, kaynak ağacında bir yerde kontrol edin. Google, bunları
Örneğin,
vendor/google/security/adb/
. 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.