Bu sayfada, Android çalışma zamanı (ART) ve derleme seçeneklerinin nasıl yapılandırılacağı ele alınmaktadır. Burada ele alınan konular arasında sistem görüntüsünün ön derlemesinin yapılandırılması, dex2oat
derleme seçenekleri ve sistem bölümü alanı, veri bölümü alanı ve performans arasında nasıl denge kurulacağı yer alır.
ART ile çalışmak için ART ve Dalvik'e ve Dalvik yürütülebilir biçimine bakın. Uygulamalarınızın düzgün çalıştığından emin olmak için Android Çalışma Zamanında (ART) Uygulama Davranışını Doğrulama başlıklı makaleyi inceleyin.
ART'nin işleyiş şekli
ART, önceden derleme (AOT) kullanır ve Android 7'den itibaren AOT derlemesi, tam zamanında (JIT) derleme ve yorumlamanın karma bir kombinasyonunu kullanır. AOT derlemesi profil odaklı olabilir. Tüm bu yürütme modlarının kombinasyonu yapılandırılabilir ve bu bölümde ele alınacaktır. Örneğin, Pixel cihazlar aşağıdaki akışta çalışacak şekilde yapılandırılmıştır:
- Uygulamalar başlangıçta Play Store tarafından dağıtılan ve bulut profili içeren bir dex meta veri (
.dm
) dosyasıyla yüklenir. ART, bulut profilinde listelenen yöntemleri AOT derleyebilir. Uygulama, dex meta veri dosyası olmadan yüklenirse AOT derlemesi yapılmaz. - Uygulama ilk birkaç kez çalıştırıldığında AOT derlenmemiş yöntemler yorumlanır. Yorumlanmış yöntemler arasından sık çalıştırılanlar JIT derlenir. ART, yürütmeye dayalı bir yerel profil oluşturur ve bunu bulut profiliyle (varsa) birleştirir.
- Cihaz boştayken ve şarj olurken, uygulamayı ilk birkaç çalıştırma sırasında oluşturulan birleşik profile göre yeniden derlemek için bir derleme hizmet programı çalışır.
- Uygulamanın sonraki çalıştırmalarında ART, derleme hizmetli tarafından oluşturulan yapıları kullanır. Bu yapılar, derleme sırasında oluşturulanlara kıyasla daha fazla AOT derlenmiş kod içerir. AOT derlenmemiş yöntemler yine yorumlanır veya JIT derlenir. ART, yürütmeye göre profil yüklemesini günceller ve profil daha sonra derleme daemon'ının sonraki çalıştırmaları tarafından alınır.
ART, bir derleyici (dex2oat
aracı) ve önyükleme sırasında yüklenen bir çalışma zamanı (libart.so
) içerir. dex2oat
aracı, bir APK dosyasını alır ve çalışma zamanında yüklenen bir veya daha fazla derleme yapı dosyası oluşturur. Dosya sayısı, uzantıları ve adları sürümlere göre değişiklik gösterebilir ancak Android 8 sürümünden itibaren aşağıdaki dosyalar oluşturulur:
.vdex
: Doğrulamayı hızlandırmak için bazı ek meta veriler içerir. Bazen APK'nın sıkıştırılmamış DEX kodu da bu dosyada bulunur..odex
: APK'daki yöntemler için AOT derlenmiş kodu içerir..art (optional)
, APK'da listelenen bazı dizelerin ve sınıfların ART'ın dahili temsillerini içerir. Bu temsiller, uygulamanın başlatılmasını hızlandırmak için kullanılır.
Derleme seçenekleri
ART için iki derleme seçeneği kategorisi vardır:
- Sistem ROM yapılandırması: Sistem görüntüsü oluşturulurken AOT'nin derlediği kod.
- Çalışma zamanı yapılandırması: ART'ın bir cihazda uygulamaları derleme ve çalıştırma şekli.
Derleyici filtreleri
Bu iki kategoriyi yapılandırmaya yönelik temel ART seçeneklerinden biri derleyici filtreleridir. Derleyici filtreleri, ART'ın DEX kodunu derleme şeklini belirler ve dex2oat
aracına iletilen bir seçenektir. Android 8'den itibaren resmi olarak desteklenen dört filtre vardır:
verify
: Yalnızca DEX kod doğrulamasını çalıştırır (AOT derlemesi yapılmaz).quicken
: (Android 11 veya önceki sürümler) DEX kodu doğrulamasını çalıştırır ve daha iyi yorumlayıcı performansı elde etmek için bazı DEX talimatlarını optimize eder.speed
: DEX kodu doğrulamasını çalıştırır ve tüm yöntemleri AOT derler. Sınıf yükleme işlemini hiçbir sınıf için optimize etmez.speed-profile
: DEX kodu doğrulamasını çalıştırır, profilde listelenen yöntemleri AOT derler ve profildeki sınıflar için sınıf yüklemelerini optimize eder.
Sistem ROM yapılandırması
Sistem görüntüsü oluşturulurken önceden yüklenmiş kitaplıklar ve uygulamalar AOT derlenir. Bu işleme dexpreopt denir. Bu tür derlenmiş dosyalar, özellikle de önyükleme sınıf yolu olmak üzere tüm bağımlılıklar değişmediği sürece kullanılabilir.
Not: Cihaz sistem modülü güncellemeleri alıyorsa sonraki güncellemede önyükleme sınıf yolu büyük olasılıkla değişir. Bu da tüm dexpreopt dosyalarının eski ve kullanılamaz hale gelmesine neden olur.
dexpreopt'i yapılandırmak için kullanabileceğiniz çeşitli ART derleme seçenekleri vardır. Bu seçenekleri nasıl yapılandıracağınız, sistem resmi için kullanılabilir depolama alanına ve önceden yüklenmiş uygulamaların sayısına bağlıdır. Sistem ROM'unda derlenen JAR'lar/APK'lar dört kategoriye ayrılabilir:
- Başlatma sınıf yolu kodu: Varsayılan olarak
speed-profile
derleyici filtresiyle derlenir. - Sistem sunucusu kodu (bu dokümanın sonraki bölümlerinde
PRODUCT_SYSTEM_SERVER_JARS
,PRODUCT_APEX_SYSTEM_SERVER_JARS
,PRODUCT_STANDALONE_SYSTEM_SERVER_JARS
,PRODUCT_APEX_STANDALONE_SYSTEM_SERVER_JARS
değerlerine bakın):- (Android 14 ve sonraki sürümler) Varsayılan olarak
speed-profile
derleyici filtresiyle veya profil sağlanmamışsaspeed
derleyici filtresiyle derlenir. - (Android 13 ve önceki sürümler) Varsayılan olarak
speed
ör. derleyici filtresiyle derlenir.
PRODUCT_SYSTEM_SERVER_COMPILER_FILTER
üzerinden yapılandırılabilir (bu dokümanın sonraki bölümlerinde bu konuyla ilgili bilgi verilmektedir). - (Android 14 ve sonraki sürümler) Varsayılan olarak
- Ürüne özgü temel uygulamalar (bu dokümanın sonraki bölümündeki
PRODUCT_DEXPREOPT_SPEED_APPS
bölümüne bakın): Varsayılan olarakspeed
derleyici filtresiyle derlenir. - Diğer tüm uygulamalar: Varsayılan olarak
speed-profile
derleyici filtresiyle derlenir veya profil sağlanmamışsaverify
derleyici filtresiyle derlenir.PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER
üzerinden yapılandırılabilir (bu belgenin ilerleyen bölümlerinde bu konuyla ilgili daha fazla bilgi verilmiştir).
Makefile seçenekleri
WITH_DEXPREOPT
DONT_DEXPREOPT_PREBUILTS
(Android 5 ve sonraki sürümler)PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER
(Android 9 ve sonraki sürümler)WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY
(Android 8 MR1'den beri)LOCAL_DEX_PREOPT
PRODUCT_DEX_PREOPT_BOOT_FLAGS
PRODUCT_DEX_PREOPT_DEFAULT_FLAGS
PRODUCT_DEX_PREOPT_MODULE_CONFIGS
PRODUCT_DEXPREOPT_SPEED_APPS
(Android 8'den beri)PRODUCT_SYSTEM_SERVER_APPS
(Android 8'den beri)PRODUCT_ART_TARGET_INCLUDE_DEBUG_BUILD
(Android 8'den beri)WITH_DEXPREOPT_PIC
(Android 7'ye kadar)WITH_DEXPREOPT_BOOT_IMG_ONLY
(Android 7 MR1'e kadar)PRODUCT_SYSTEM_SERVER_COMPILER_FILTER
- (Android 14 ve sonraki sürümler) Belirtilmezse
speed-profile
derleyici filtresi kullanılır veya profil sağlanmazsaspeed
derleyici filtresi kullanılır. - (Android 13 ve önceki sürümler) Belirtilmezse
speed
derleyici filtresi kullanılır. speed
olarak ayarlanırsaspeed
derleyici filtresi kullanılır.speed-profile
olarak ayarlanırsaspeed-profile
derleyici filtresi kullanılır veya profil sağlanmazsaverify
derleyici filtresi kullanılır.verify
olarak ayarlanırsaverify
derleyici filtresi kullanılır.PRODUCT_SYSTEM_SERVER_JARS
,PRODUCT_APEX_SYSTEM_SERVER_JARS
,PRODUCT_STANDALONE_SYSTEM_SERVER_JARS
,PRODUCT_APEX_STANDALONE_SYSTEM_SERVER_JARS
- (Zorunlu)
PRODUCT_SYSTEM_SERVER_JARS
: Platformdaki sistem sunucusu sınıf yolu JAR'larının listesi (yaniSYSTEMSERVERCLASSPATH
kapsamında). Sistem sunucusu sınıf yolu JAR'larının bu listeye eklenmesi gerekir. Sistem sunucusu sınıf yolu JAR'larının listeye eklenmemesi, bu JAR'ların yüklenmemesine neden olur. - (Zorunlu)
PRODUCT_APEX_SYSTEM_SERVER_JARS
: APEX ile birlikte (yaniSYSTEMSERVERCLASSPATH
kapsamında) sağlanan sistem sunucusu sınıf yolu JAR'larının listesi. Biçim<apex name>:<jar name>
'dir. APEX sistem sunucusu sınıf yolu JAR'larını bu listeye eklemeniz gerekir. APEX sistem sunucusu sınıf yolu JAR'larının bu listeye eklenmemesi, söz konusu JAR'ların yüklenmemesi - (İsteğe bağlı, Android 13 ve önceki sürümler)
PRODUCT_STANDALONE_SYSTEM_SERVER_JARS
: Sistem sunucusunun ayrı sınıf yükleyiciler kullanarak (SystemServiceManager.startServiceFromJar
aracılığıyla) dinamik olarak yüklediği JAR'ların listesi. Bu listeye bağımsız sistem sunucusu JAR'ları eklemek gerekli değildir ancak JAR'ların derlenmesini ve dolayısıyla iyi bir çalışma zamanı performansına sahip olmasını sağladığı için kesinlikle önerilir. - (Android 13'ten beri zorunludur)
PRODUCT_APEX_STANDALONE_SYSTEM_SERVER_JARS
: APEX ile birlikte yayınlanan ve sistem sunucusunun ayrı sınıf yükleyiciler kullanarak dinamik olarak yüklediği JAR dosyalarının listesi (yaniSystemServiceManager.startServiceFromJar
aracılığıyla veya<apex-system-service>
olarak tanımlanmış). Biçim<apex name>:<jar name>
'dır. Bu listeye bağımsız APEX sistem sunucusu JAR'larının eklenmesi gerekir. Bu listeye bağımsız APEX sistem sunucusu JAR'larının eklenmemesi, önyükleme hatasına neden olur. dalvik.vm.usejit
: JIT'nin etkin olup olmadığı.dalvik.vm.jitinitialsize
(varsayılan 64K): Kod önbelleğini Kod önbelleği düzenli olarak GC'ye alınır ve gerekirse artırılır.dalvik.vm.jitmaxsize
(varsayılan 64 MB): Kod önbelleği için maksimum kapasite.dalvik.vm.jitthreshold
(varsayılan 10000): Bir yöntemin JIT derlenmesi için "sıcaklığı" sayacının geçmesi gereken eşik. "Popülerlik" sayacı, çalışma zamanındaki dahili bir metriktir. Arama sayısı, geriye dönük dallar ve diğer faktörleri içerir.dalvik.vm.usejitprofiles
(Android 13'e kadar): JIT profillerinin etkin olup olmadığı; bu,dalvik.vm.usejit
yanlış olsa bile kullanılabilir. Bu değer yanlışsaspeed-profile
derleyici filtresinin hiçbir yöntemi AOT derlemediğini veverify
ile eşdeğer olduğunu unutmayın. Android 14'ten beri JIT profilleri her zaman etkindir ve devre dışı bırakılamaz.dalvik.vm.jitprithreadweight
(dalvik.vm.jitthreshold
/ 20 değerini alır): Uygulama kullanıcı arayüzü iş parçacığı için JIT "örneklerinin" ağırlığı (jitthreshold'a bakın). Uygulamayla etkileşime geçen kullanıcıların deneyimini doğrudan etkileyen yöntemlerin derlemesini hızlandırmak için kullanın.dalvik.vm.jittransitionweight
(varsayılan olarakdalvik.vm.jitthreshold
/ 10): Derleme kodu ile yorumlayıcı arasında geçiş yapan yöntem çağırmanın ağırlığı. Bu, ilgili yöntemlerin geçişleri (pahalı olan) en aza indirecek şekilde derlendiğinden emin olmanıza yardımcı olur.dalvik.vm.image-dex2oat-threads
/dalvik.vm.image-dex2oat-cpu-set
(Android 11'e kadar): Önyükleme resimleri için kullanılacak iş parçacıklarının sayısı ve CPU çekirdek grubu (aşağıya bakın).dalvik.vm.boot-dex2oat-threads
/dalvik.vm.boot-dex2oat-cpu-set
:- (Android 11'e kadar) Önyükleme resimleri dışındaki her şey için önyükleme sırasında kullanılacak iş parçacıklarının sayısı ve CPU çekirdek grubu (aşağıya bakın).
- (Android 12'den itibaren) Önyükleme resimleri dahil olmak üzere her şey için önyükleme sırasında kullanılacak iş parçacıklarının sayısı ve CPU çekirdek grubu (aşağıya bakın).
- Daha açık belirtmek gerekirse, Android 14'ten beri bu, ART Hizmeti'ndeki
PRIORITY_BOOT
öncelik sınıfına karşılık gelir.
- Daha açık belirtmek gerekirse, Android 14'ten beri bu, ART Hizmeti'ndeki
dalvik.vm.restore-dex2oat-threads
/dalvik.vm.restore-dex2oat-cpu-set
:- (Android 11'den Android 13'e kadar) Bulut yedeğinden geri yükleme işleminde kullanılacak iş parçacıklarının sayısı ve CPU çekirdek grubu (aşağıya bakın).
- (Android 14'ten itibaren) Bulut yedeğinden geri yükleme dahil olmak üzere normalden daha gecikmeye duyarlı olan her şey için kullanılacak iş parçacıklarının sayısı ve CPU çekirdek grubu (aşağıya bakın).
- Daha açık belirtmek gerekirse bu, ART Hizmeti'ndeki
PRIORITY_INTERACTIVE_FAST
öncelik sınıfına karşılık gelir.
- Daha açık belirtmek gerekirse bu, ART Hizmeti'ndeki
dalvik.vm.background-dex2oat-threads
/dalvik.vm.background-dex2oat-cpu-set
(Android 14'ten itibaren): Arka planda kullanılacak iş parçacıklarının sayısı ve CPU çekirdek grubu (aşağıya bakın).- Daha açık belirtmek gerekirse bu, ART Hizmeti'ndeki
PRIORITY_BACKGROUND
öncelik sınıfına karşılık gelir.
- Daha açık belirtmek gerekirse bu, ART Hizmeti'ndeki
dalvik.vm.dex2oat-threads
/dalvik.vm.dex2oat-cpu-set
: Diğer her şey için kullanılacak iş parçacıklarının sayısı ve CPU çekirdek grubu.Dex2OatBackground
(Android 14'ten itibaren) (varsayılan olarakDex2OatBootComplete
özelliğini devralır): Arka planda kullanılacak kaynakları kontrol eder.- Daha açık belirtmek gerekirse bu, ART Hizmeti'ndeki
PRIORITY_BACKGROUND
öncelik sınıfına karşılık gelir.
- Daha açık belirtmek gerekirse bu, ART Hizmeti'ndeki
Dex2OatBootComplete
:- (Android 13'e kadar) Açılıştan sonra her şey için kullanılacak kaynağı kontrol eder.
- (Android 14'ten beri) Önyüklemeden sonra her şey için kullanılacak kaynağı kontrol eder. Arka planda kullanılmaz.
- Daha açık belirtmek gerekirse bu, ART Hizmeti'ndeki
PRIORITY_INTERACTIVE_FAST
vePRIORITY_INTERACTIVE
öncelik sınıfına karşılık gelir.
- Daha açık belirtmek gerekirse bu, ART Hizmeti'ndeki
dalvik.vm.image-dex2oat-Xms
: Başlatma resimleri için başlangıç yığın boyutu.dalvik.vm.image-dex2oat-Xmx
: Başlatma resimleri için maksimum yığın boyutu.dalvik.vm.dex2oat-Xms
: Diğer her şey için başlangıç yığın boyutu.dalvik.vm.dex2oat-Xmx
: Diğer her şey için maksimum yığın boyutu.dalvik.vm.image-dex2oat-filter
(Android 11'e kadar): Açılış resimleri için derleyici filtresi. Android 12'den beri, önyükleme resimleri için derleyici filtresi her zamanspeed-profile
olur ve değiştirilemez.dalvik.vm.systemservercompilerfilter
(Android 13'ten itibaren): Sistem sunucusu için derleyici filtresi.PRODUCT_SYSTEM_SERVER_COMPILER_FILTER
bölümüne bakın.dalvik.vm.systemuicompilerfilter
(Android 13'ten beri): System UI paketi için derleyici filtresi.dalvik.vm.dex2oat-filter
(Android 6'ya kadar): Diğer her şey için derleyici filtresi.pm.dexopt.<reason>
(Android 7'den beri): Diğer her şey için derleyici filtresi. Android 14 ve sonraki sürümler için ART Hizmeti Yapılandırması'na veya Android 13 ve önceki sürümler için Paket Yöneticisi Yapılandırması'na bakın.dalvik.vm.dex2oat-very-large
(Android 7.1'den beri): AOT derlemeyi devre dışı bırakmak için bayt cinsinden minimum toplam dex dosyası boyutu.dalvik.vm.dex2oat-swap
(Android 7.1'den beri) (varsayılan: true): dex2oat için takas dosyasının kullanılmasına izin verir. Bu, bellek yetersizliği nedeniyle kilitlenmelerin önlenmesine yardımcı olabilir. Bu seçenek etkinleştirilmiş olsa bile dex2oat'ın yalnızca belirli koşullarda (ör. dex dosyalarının sayısı çok olduğunda) takas dosyası kullanacağını ve koşulların değişebileceğini unutmayın.dalvik.vm.ps-min-first-save-ms
(Android 12'den beri): Uygulama ilk kez başlatıldığında, çalışma zamanının uygulamanın profilini oluşturması için beklemeniz gereken minimum süre.dalvik.vm.ps-min-save-period-ms
(Android 12'den beri): Uygulamanın profilini güncellemeden önce beklemeniz gereken minimum süre.dalvik.vm.dex2oat64.enabled
(Android 11'den beri) (varsayılan: false): dex2oat'ın 64 bit sürümünün kullanılıp kullanılmayacağını belirtir.dalvik.vm.bgdexopt.new-classes-percent
(Android 12'den beri) (varsayılan: 20): Yeni derlemeyi tetiklemek için bir profildeki yeni sınıfların 0 ile 100 arasında minimum yüzdesi. Yalnızca profil yönlendirmeli derleme (speed-profile
) için geçerlidir. Genellikle arka planda dexopt sırasında kullanılır. Yüzde eşiğine ek olarak en az 50 yeni sınıf eşiğinin de olduğunu ve bu eşiğin yapılandırılabilir olmadığını unutmayın.dalvik.vm.bgdexopt.new-methods-percent
(Android 12'den beri) (varsayılan: 20): Yeniden derlemeyi tetiklemek için bir profildeki yeni yöntemlerin 0 ile 100 arasında minimum yüzdesi. Yalnızca profil yönlendirmeli derleme (speed-profile
) için geçerlidir. Genellikle arka planda dexopt sırasında kullanılır. Yüzde eşiğine ek olarak en az 100 yeni yöntem eşiğinin de olduğunu ve bu eşiğin yapılandırılabilir olmadığını unutmayın.dalvik.vm.dex2oat-max-image-block-size
(Android 10'dan beri) (varsayılan: 524288) Sıkıştırılmış resimler için maksimum katı blok boyutu. Büyük bir resim, hiçbir blok maksimum boyuttan daha büyük olmayacak şekilde bir dizi katı bloka bölünür.dalvik.vm.dex2oat-resolve-startup-strings
(Android 10'dan beri) (varsayılan: true) Değer doğruysa dex2oat, profilde "startup" olarak işaretlenmiş yöntemlerden referans verilen tüm const dizelerini çözer.debug.generate-debug-info
(varsayılan: false) Yerel hata ayıklama için yığın açma bilgileri, ELF simgeleri ve cüce bölümleri gibi hata ayıklama bilgilerinin oluşturulup oluşturulmayacağı.dalvik.vm.dex2oat-minidebuginfo
(Android 9'dan beri) (varsayılan: true) Geri izlemeleri yazdırmak için gereken minimum miktarda LZMA sıkıştırılmış hata ayıklama bilgisinin oluşturulup oluşturulmayacağını belirtir.
dex2oat
'ün, sistem görüntüsüne yüklenen DEX kodunda çağrılıp çağrılmadığı. Varsayılan olarak etkindir.
DONT_DEXPREOPT_PREBUILTS
etkinleştirildiğinde önceden derlenmiş uygulamaların dexpreopt özelliği devre dışı bırakılır. Bunlar, Android.mk
bölümünde include $(BUILD_PREBUILT)
belirtilmiş uygulamalardır. Google Play üzerinden güncellenmesi muhtemel önceden oluşturulmuş uygulamaların dexpreopt işleminin atlanması, sistem görüntüsünde yer tasarrufu sağlar ancak ilk açılış süresini uzatır. Bu seçeneğin, Android.bp
içinde tanımlanan önceden oluşturulmuş uygulamalar üzerinde hiçbir etkisi olmadığını unutmayın.
PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER
, dexpreopt uygulanmış uygulamalar için varsayılan derleyici filtresini belirtir. Bu uygulamalar Android.bp
içinde tanımlanır veya Android.mk
içinde include $(BUILD_PREBUILT)
belirtilir. Bir değer belirtilmezse varsayılan değer speed-profile
olur. Değer belirtilmezse ve profil sağlanmazsa varsayılan değer verify
olur.
WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY
dexpreopts etkinleştirildiğinde yalnızca önyükleme sınıf yolu ve sistem sunucusu jar'ları kullanılır.
Dexpreopt, modül tanımında LOCAL_DEX_PREOPT
seçeneği belirtilerek her uygulama için ayrı ayrı etkinleştirilebilir veya devre dışı bırakılabilir.
Bu, Google Play güncellemelerini hemen alabilecek uygulamaların dexpreopt özelliğini devre dışı bırakmak için yararlı olabilir. Çünkü güncellemeler, sistem görüntüsünde dexpreopt edilmiş kodu geçersiz kılar. Bu, kullanıcıların veri bölümünde uygulamaların daha yeni sürümlerine sahip olabileceğinden büyük sürüm yükseltme OTA'larında yer kazanmak için de yararlıdır.
LOCAL_DEX_PREOPT
, sırasıyla dexpreopt'i etkinleştirmek veya devre dışı bırakmak için true
ya da false
değerlerini destekler. Ayrıca, dexpreopt'un classes.dex
dosyasını APK veya JAR dosyasından kaldırmaması gerekiyorsa nostripping
belirtilebilir. Normalde bu dosya, dexpreopt'ten sonra artık gerekli olmadığı için kaldırılır ancak üçüncü taraf APK imzalarının geçerli kalmasına izin vermek için bu son seçenek gereklidir.
Önyükleme görüntüsünün nasıl derleneceğini kontrol etmek için dex2oat
'e seçenekler iletir. Özelleştirilmiş resim sınıfı listeleri, derlenmiş sınıf listeleri ve derleyici filtreleri belirtmek için kullanılabilir.
Önyükleme görüntüsünün dışındaki her şeyin nasıl derleneceğini kontrol etmek için dex2oat
'e seçenekler iletir.
Belirli bir modül ve ürün yapılandırması için dex2oat
seçeneklerini iletme olanağı sunar. Ürünün device.mk
dosyasında $(call add-product-dex-preopt-module-config,<modules>,<option>)
tarafından ayarlanır. Burada <modules>
, sırasıyla JAR ve APK dosyalarının LOCAL_MODULE
ve LOCAL_PACKAGE
adlarının bir listesidir.
Ürünlerin temeli olarak tanımlanan ve speed
derleyici filtresiyle derlenmesi istenen uygulamaların listesi. Örneğin, SystemUI gibi kalıcı uygulamalar yalnızca bir sonraki yeniden başlatmada profil yönlendirmeli derlemeyi kullanma şansı elde eder. Bu nedenle, ürünün bu uygulamaların her zaman AOT derlemesi kullanması daha iyi olabilir.
Sistem sunucusu tarafından yüklenen uygulamaların listesi. Bu uygulamalar varsayılan olarak speed
derleyici filtresiyle derlenir.
ART'ın hata ayıklama sürümünün cihaza dahil edilip edilmeyeceği. Bu ayar varsayılan olarak userdebug ve eng derlemeleri için etkindir. Bu davranış, seçeneği true
veya false
olarak açıkça ayarlayarak geçersiz kılınabilir.
Cihaz varsayılan olarak hata ayıklama içermeyen sürümü (libart.so
) kullanır. Geçiş yapmak için persist.sys.dalvik.vm.lib.2
sistem özelliğini libartd.so
olarak ayarlayın.
Android 5.1.0 ile Android 6.0.1 arasında WITH_DEXPREOPT_PIC
, konumdan bağımsız kodu (PIC) etkinleştirmek için belirtilebilir. Bu sayede, görüntüdeki derlenmiş kodun /system
'ten /data/dalvik-cache
'a taşınması gerekmez. Böylece veri bölümünde yer tasarrufu sağlanır.
Ancak, konuma bağlı koddan yararlanan bir optimizasyonu devre dışı bıraktığı için çalışma zamanında küçük bir etki vardır. Genellikle, /data
'te yer kazanmak isteyen cihazlar PIC derlemeyi etkinleştirmelidir.
Android 7.0'da PIC derlemesi varsayılan olarak etkindi.
Bu seçenek, sistem sunucusu JAR'larını da önceden seçen WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY
ile değiştirildi.
Bu seçenek, sistem sunucusu için derleyici filtresini belirtir.
Aşağıda, sistem sunucusu tarafından yüklenen JAR'ların listesi verilmiştir. JAR'lar, PRODUCT_SYSTEM_SERVER_COMPILER_FILTER
tarafından belirtilen derleyici filtresiyle derlenir.
Önyükleme sınıf yolu yapılandırması
Önceden yüklenmiş sınıflar listesi, Zygote'un başlangıçta başlattığı sınıfların listesidir. Bu sayede her uygulamanın bu sınıf başlatıcıları ayrı ayrı çalıştırması gerekmez. Böylece uygulamalar daha hızlı başlatılır ve sayfalar bellekte paylaşılır. Önceden yüklenmiş sınıflar listesi dosyası varsayılan olarak frameworks/base/config/preloaded-classes
konumunda bulunur ve tipik telefon kullanımı için ayarlanmış bir liste içerir. Bu, giyilebilir cihazlar gibi diğer cihazlar için farklı olabilir ve buna göre ayarlanmalıdır. Bu ayarı yaparken dikkatli olun. Çok fazla sınıf eklemek, kullanılmayan sınıflar yüklendiğinde bellek israfına neden olur. Çok az sınıf eklemek, her uygulamanın kendi kopyasını oluşturmasını zorunlu kılar. Bu da bellek israfına neden olur.
Örnek kullanım (ürünün device.mk
bölümünde):
PRODUCT_COPY_FILES += <filename>:system/etc/preloaded-classes
Not: Bu satırı, varsayılan yapılandırmayı build/target/product/base.mk
'den alan tüm ürün yapılandırma makefile'lerini devralmadan önce yerleştirmeniz gerekir.
Çalışma zamanı yapılandırması
JIT seçenekleri
Aşağıdaki seçenekler yalnızca ART JIT derleyicisinin kullanılabildiği Android sürümlerini etkiler.
Dex2oat seçenekleri
Bu seçenekler cihaz üzerinde derlemeyi (dexopt olarak da bilinir) ve birkaçı da dexpreopt'i etkiler. Yukarıdaki Sistem ROM yapılandırması bölümünde açıklanan seçenekler ise yalnızca dexpreopt'i etkiler.
Kaynak kullanımını kontrol etme seçenekleri:
CPU çekirdekleri, virgülle ayrılmış bir CPU kimlikleri listesi olarak belirtilmelidir. Örneğin, 0-3 arasındaki CPU çekirdeklerinde dex2oat üzerinde çalıştırmak için şunları ayarlayın:
dalvik.vm.dex2oat-cpu-set=0,1,2,3
CPU yakınlık özelliklerini ayarlarken, gereksiz bellek ve I/O anlaşmazlığını önlemek için dex2oat iş parçacıklarının sayısına karşılık gelen özelliği, seçilen CPU sayısıyla eşleştirmenizi öneririz:
dalvik.vm.dex2oat-cpu-set=0,1,2,3 dalvik.vm.dex2oat-threads=4
Yukarıdaki sistem özelliklerine ek olarak, dex2oat'ın kaynak kullanımını kontrol etmek için görev profillerini de kullanabilirsiniz (Cgroup Soyutlama Katmanı bölümüne bakın).
Desteklenen görev profilleri şunlardır:
Hem sistem özellikleri hem de görev profilleri belirtildiğinde her ikisi de geçerli olur.
Yığın boyutunu kontrol etme seçenekleri:
dex2oat
için ilk ve maksimum yığın boyutunu kontrol eden seçenekler, hangi uygulamaların derlenebileceğini sınırlayabileceğinden azaltılmamalıdır.
Derleyici filtresini kontrol etme seçenekleri:
Önyükleme resimleri dışındaki her şeyin derlenmesini kontrol etmek için diğer seçenekler:
ART hizmet seçenekleri
Android 14'ten beri, uygulamalar için cihaz üzerinde AOT derlemesi (diğer adıyla dexopt) ART Hizmeti tarafından yönetilmektedir. ART Hizmeti'ni yapılandırma hakkında bilgi edinmek için ART Hizmeti yapılandırması başlıklı makaleyi inceleyin.Paket yöneticisi seçenekleri
Android 14'ten önce, uygulamalar için cihaz üzerinde AOT derleme (diğer adıyla dexopt) işlemi paket yöneticisi tarafından yönetiliyordu. Paket yöneticisini dexopt için yapılandırma hakkında bilgi edinmek istiyorsanız Paket Yöneticisi Yapılandırması başlıklı makaleyi inceleyin.A/B'ye özel yapılandırma
ROM yapılandırması
Android 7.0'dan itibaren cihazlar, A/B sistem güncellemelerini etkinleştirmek için iki sistem bölümü kullanabilir. Sistem bölümünün boyutunu azaltmak için önceden seçilen dosyalar kullanılmayan ikinci sistem bölümüne yüklenebilir. Ardından, ilk önyüklemede veri bölümüne kopyalanır.
Örnek kullanım (device-common.mk
içinde):
PRODUCT_PACKAGES += \ cppreopts.sh PRODUCT_PROPERTY_OVERRIDES += \ ro.cp_system_other_odex=1
Cihazın BoardConfig.mk
bölümünde:
BOARD_USES_SYSTEM_OTHER_ODEX := true
Açılış sınıf yolu kodunun, sistem sunucusu kodunun ve ürüne özel temel uygulamaların her zaman sistem bölümüne derlendiğini unutmayın. Varsayılan olarak diğer tüm uygulamalar kullanılmayan ikinci sistem bölümüne derlenir. Bu, varsayılan olarak şu değeri alan SYSTEM_OTHER_ODEX_FILTER
ile kontrol edilebilir:
SYSTEM_OTHER_ODEX_FILTER ?= app/% priv-app/%
Arka planda OTA dexopt
A/B özellikli cihazlarda, uygulamalar yeniden başlatmadan önce yeni sistem görüntüsüyle arka planda derlenebilir. Derleme komut dosyasını ve ikili dosyaları isteğe bağlı olarak sistem görüntüsüne dahil etmek için Arka planda uygulama derleme bölümüne bakın. Bu derleme için kullanılan derleme filtresi şu şekilde kontrol edilir:
pm.dexopt.ab-ota=speed-profile
Profil yönlendirmeli derlemeden yararlanmak ve depolama alanından tasarruf etmek için speed-profile
kullanmanızı öneririz.
JDWP seçenekleri
userdebug derlemelerinde Java Debug Wire Protocol (JDWP) ileti dizisi oluşturma işlemi, persist.debug.dalvik.vm.jdwp.enabled
sistem özelliği aracılığıyla kontrol edilir. Varsayılan olarak bu özellik ayarlanmamış ve JDWP iş parçacıkları yalnızca hata ayıklaması yapılabilecek uygulamalar için oluşturulur. Hem hata ayıklama yapılabilir hem de hata ayıklama yapılamayan uygulamalar için JDWP ileti dizilerini etkinleştirmek üzere persist.debug.dalvik.vm.jdwp.enabled
değerini 1
olarak ayarlayın. Mülkteki değişikliklerin geçerli olması için cihazın yeniden başlatılması gerekir.
Hata ayıklama yapılamayan bir uygulamada userdebug derlemesinde hata ayıklama yapmak için aşağıdaki komutu çalıştırarak JDWP'yi etkinleştirin:
adb shell setprop persist.debug.dalvik.vm.jdwp.enabled 1
adb reboot