ART'yi Yapılandırma

Bu sayfada ART ve derleme seçeneklerinin nasıl yapılandırılacağı anlatılmaktadır. Burada ele alınan konular, sistem görüntüsünün ön derleme yapılandırmasını, dex2oat derleme seçeneklerini ve sistem bölümü alanı, veri bölümü alanı ve performansın nasıl değiş tokuş edileceğini içerir.

ART ile çalışmak için ART ve Dalvik , Dalvik Yürütülebilir formatı ve source.android.com'da kalan sayfalara 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 konusuna bakın.

SANAT nasıl çalışır?

ART, önceden (AOT) derleme kullanır ve Android 7.0'dan (Nougat veya N) başlayarak, AOT, tam zamanında (JIT) derleme ve profil kılavuzlu derlemenin karma bir kombinasyonunu kullanır. Tüm bu derleme modlarının kombinasyonu yapılandırılabilir ve bu bölümde tartışılacaktır. Örnek olarak, Pixel cihazları aşağıdaki derleme akışıyla yapılandırılır:

  1. Bir uygulama başlangıçta herhangi bir AOT derlemesi olmadan yüklenir. Uygulama ilk birkaç kez çalıştırıldığında yorumlanır ve sıklıkla yürütülen yöntemler JIT derlenir.
  2. Cihaz boştayken ve şarj olurken, bir derleme arka plan programı, ilk çalıştırmalar sırasında oluşturulan bir profile dayalı olarak sık kullanılan kodu AOT derlemek için çalışır.
  3. Bir uygulamanın sonraki yeniden başlatılması, profil kılavuzlu kodu kullanır ve önceden derlenmiş yöntemler için çalışma zamanında JIT derlemesi yapmaktan kaçınır. Yeni çalıştırmalar sırasında JIT'i derleyen yöntemler profile eklenir ve bu daha sonra derleme arka plan programı tarafından alınır.

ART, bir derleyici ( dex2oat aracı) ve Zygote'u başlatmak için yüklenen bir çalışma zamanı ( libart.so ) içerir. dex2oat aracı bir APK dosyası alır ve çalışma zamanının yüklediği bir veya daha fazla derleme yapıt dosyası oluşturur. Dosya sayısı, uzantıları ve adları sürümler arasında değişebilir, ancak Android 8 sürümünden itibaren oluşturulan dosyalar şunlardır:

  • .vdex : APK'nın sıkıştırılmamış DEX kodunu ve doğrulamayı hızlandırmak için bazı ek meta verileri içerir.
  • .odex : APK'daki yöntemler için AOT derlenmiş kodunu içerir.
  • .art (optional) : APK'da listelenen ve uygulamanın başlatılmasını hızlandırmak için kullanılan bazı dizelerin ve sınıfların ART dahili temsillerini içerir.

Derleme seçenekleri

ART için derleme seçenekleri iki kategoridedir:

  1. Sistem ROM yapılandırması: Bir sistem görüntüsü oluştururken hangi kodun AOT tarafından derlendiği.
  2. Çalışma zamanı yapılandırması: ART'nin bir cihazdaki uygulamaları nasıl derlediği ve çalıştırdığı.

Bu iki kategoriyi yapılandırmak için bir temel ART seçeneği, derleyici filtreleridir . Derleyici filtreleri, ART'nin DEX kodunu nasıl derlediğini yönlendirir ve dex2oat aracına iletilen bir seçenektir. Android 8'den başlayarak, resmi olarak desteklenen dört filtre vardır:

  • verify : yalnızca DEX kodu doğrulamasını çalıştırın.
  • quicken : (Android 12'den beri kaldırılmıştır), daha iyi yorumlayıcı performansı elde etmek için DEX kod doğrulamasını çalıştırın ve bazı DEX talimatlarını optimize edin.
  • speed : DEX kod doğrulamasını çalıştırın ve tüm yöntemleri AOT-derleyin.
  • speed-profile : bir profil dosyasında listelenen DEX kod doğrulamasını ve AOT derleme yöntemlerini çalıştırın.

Sistem ROM yapılandırması

Bir sistem ROM'unu yapılandırmak için bir dizi ART oluşturma seçeneği vardır. Bu seçenekleri nasıl yapılandıracağınız, sistem görüntüsü için kullanılabilir depolama alanına ve önceden yüklenmiş uygulamaların sayısına bağlıdır. Bir sistem ROM'unda derlenen JAR'lar/APK'lar dört kategoriye ayrılabilir:

  • Önyükleme sınıf yolu kodu: varsayılan olarak speed-profile derleyici filtresiyle derlenir.
  • Sistem sunucu kodu (bu belgede daha sonra PRODUCT_SYSTEM_SERVER_JARS , PRODUCT_APEX_SYSTEM_SERVER_JARS , PRODUCT_STANDALONE_SYSTEM_SERVER_JARS , PRODUCT_APEX_STANDALONE_SYSTEM_SERVER_JARS konusuna bakın):
    • (Android 14'ten (AOSP deneysel) beri) varsayılan olarak speed-profile derleyici filtresiyle derlenir veya bir profil sağlanmadıysa speed derleyici filtresiyle derlenir.
    • (Android 13'e kadar) varsayılan olarak speed derleyici filtresiyle derlenmiştir.
    PRODUCT_SYSTEM_SERVER_COMPILER_FILTER aracılığıyla yapılandırılabilir (bu belgenin ilerleyen kısımlarına bakın).
  • Ürüne özel temel uygulamalar (bu belgenin PRODUCT_DEXPREOPT_SPEED_APPS bölümüne bakın): varsayılan olarak speed derleyici filtresiyle derlenir.
  • Diğer tüm uygulamalar: varsayılan olarak speed-profile derleyici filtresiyle derlenir veya bir profil sağlanmadıysa derleyici verify filtresiyle derlenir.

    PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER aracılığıyla yapılandırılabilir (bu belgenin ilerleyen kısımlarına bakın).

Makefile seçenekleri

  • WITH_DEXPREOPT
  • dex2oat sistem görüntüsünde kurulu DEX kodunda çağrılıp çağrılmadığı. Varsayılan olarak etkindir.

  • DONT_DEXPREOPT_PREBUILTS (Android 5'ten beri)
  • DONT_DEXPREOPT_PREBUILTS etkinleştirilmesi, önceden oluşturulmuşların önceden optimize edilmesini engeller. Bunlar, Android.mk include $(BUILD_PREBUILT) uygulamalardır. Google Play aracılığıyla güncellenmesi muhtemel olan önceden oluşturulmuş uygulamaların ön optimizasyonunu atlamak, sistem görüntüsünde yer tasarrufu sağlar ancak ilk açılış süresine eklenir. 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 (Android 9'dan beri)
  • PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER , önceden optimize edilmiş uygulamalar için varsayılan derleyici filtresini belirtir. Bu uygulamalar Android.bp tanımlanmıştır veya Android.mk'lerinde include $(BUILD_PREBUILT) Android.mk . Belirtilmemişse, varsayılan değer speed-profile veya değerin belirtilmediğini ve bir profilin sağlanmadığını verify .

  • WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY (Android 8 MR1'de yeni)
  • WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY etkinleştirilmesi, yalnızca önyükleme sınıf yolunu ve sistem sunucusu kavanozlarını önceden optimize eder.

  • LOCAL_DEX_PREOPT
  • Modül tanımında LOCAL_DEX_PREOPT seçeneği belirlenerek, ön optimizasyon da bireysel uygulama bazında etkinleştirilebilir veya devre dışı bırakılabilir. Bu, güncellemeler sistem görüntüsündeki önceden optimize edilmiş kodu geçersiz kılacağından, Google Play güncellemelerini hemen alabilecek uygulamaların ön optimizasyonunu devre dışı bırakmak için faydalı olabilir. Bu, kullanıcıların veri bölümünde zaten daha yeni uygulama sürümlerine sahip olabileceğinden, ana sürüm yükseltme OTA'larında yerden tasarruf etmek için de yararlıdır.

    LOCAL_DEX_PREOPT , ön optimizasyonu etkinleştirmek veya devre dışı bırakmak için sırasıyla 'true' veya 'false' değerlerini destekler. Ayrıca, ön optimizasyonun classes.dex dosyasını APK veya JAR dosyasından çıkarmaması gerekiyorsa 'nostripping' belirtilebilir. Normalde bu dosya, ön optimizasyondan sonra artık gerekli olmadığından kaldırılır, ancak bu son seçenek, üçüncü taraf APK imzalarının geçerli kalmasına izin vermek için gereklidir.

  • PRODUCT_DEX_PREOPT_BOOT_FLAGS
  • Önyükleme görüntüsünün nasıl derlendiğini denetlemek için seçenekleri dex2oat . Özelleştirilmiş görüntü sınıfları listelerini, derlenmiş sınıf listelerini ve derleyici filtrelerini belirtmek için kullanılabilir.

  • PRODUCT_DEX_PREOPT_DEFAULT_FLAGS
  • Önyükleme görüntüsü dışındaki her şeyin nasıl derlendiğini kontrol etmek için seçenekleri dex2oat .

  • PRODUCT_DEX_PREOPT_MODULE_CONFIGS
  • Belirli bir modül ve ürün konfigürasyonu için dex2oat seçeneklerini geçme yeteneği sağlar. Bir ürünün device.mk dosyasında $(call add-product-dex-preopt-module-config,<modules>,<option>) tarafından ayarlanır; burada <modules> , JAR ve APK için LOCAL_MODULE ve LOCAL_PACKAGE adlarının bir listesidir. sırasıyla dosyalar.

  • PRODUCT_DEXPREOPT_SPEED_APPS (New in Android 8)
  • Ürünler için temel 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 kılavuzlu derlemeyi kullanma şansına sahiptir, bu nedenle ürün için bu uygulamaların her zaman AOT tarafından derlenmesi daha iyi olabilir.

  • PRODUCT_SYSTEM_SERVER_APPS (New in Android 8)
  • Sistem sunucusu tarafından yüklenen uygulamaların listesi. Bu uygulamalar varsayılan olarak speed derleyici filtresiyle derlenir.

  • PRODUCT_ART_TARGET_INCLUDE_DEBUG_BUILD(Post Android 8)
  • Cihazda ART'nin hata ayıklama sürümünün dahil edilip edilmeyeceği. Varsayılan olarak, bu, userdebug ve eng derlemeleri için etkinleştirilmiştir. Bu davranış, seçenek açıkça true veya false olarak ayarlanarak geçersiz kılınabilir.

    Varsayılan olarak, cihaz hata ayıklama olmayan sürümü ( libart.so ) kullanır. Geçiş yapmak için, sistem özelliğini persist.sys.dalvik.vm.lib.2 olarak libartd.so olarak ayarlayın.

  • WITH_DEXPREOPT_PIC (Removed in Android 8)
  • Android 5.1.0'dan Android 6.0.1'e kadar, WITH_DEXPREOPT_PIC , konumdan bağımsız kodu (PIC) etkinleştirmek için belirtilebilir. Bununla, görüntüden derlenen kodun /system'den /data/dalvik-cache'ye taşınması gerekmez, bu da veri bölümünde yerden tasarruf sağlar. Ancak, konuma bağlı koddan yararlanan bir optimizasyonu devre dışı bıraktığı için çalışma zamanı üzerinde hafif bir etkisi vardır. Tipik olarak, /data içinde yer kazanmak isteyen aygıtlar PIC derlemesini etkinleştirmelidir.

    Android 7.0'da PIC derlemesi varsayılan olarak etkindi.

  • WITH_DEXPREOPT_BOOT_IMG_ONLY (Android 8 MR1'de kaldırıldı)
  • Bu seçenek, sistem sunucusu kavanozlarını da önceden seçen WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY ile değiştirildi.

  • PRODUCT_SYSTEM_SERVER_COMPILER_FILTER
  • Bu seçenek, sistem sunucusu için derleyici filtresini belirtir.

    • (Android 14'ten beri (AOSP deneysel)) Belirtilmezse, speed-profile derleyici filtresi kullanılır veya bir profil sağlanmadıysa speed derleyici filtresi kullanılır.
    • (Android 13'e kadar) Belirtilmemişse, speed derleyici filtresi kullanılır.
    • speed olarak ayarlanırsa, speed derleyici filtresi kullanılır.
    • speed-profile olarak ayarlanırsa, speed-profile derleyici filtresi kullanılır veya bir profil sağlanmazsa derleyiciyi verify filtresi kullanılır.
    • verify verify filtresi kullanılır.

  • PRODUCT_SYSTEM_SERVER_JARS , PRODUCT_APEX_SYSTEM_SERVER_JARS , PRODUCT_STANDALONE_SYSTEM_SERVER_JARS , PRODUCT_APEX_STANDALONE_SYSTEM_SERVER_JARS
  • Aşağıdakiler, sistem sunucusu tarafından yüklenen kavanozların listesidir. Kavanozlar, PRODUCT_SYSTEM_SERVER_COMPILER_FILTER tarafından belirtilen derleyici filtresiyle derlenir

    • (gerekli) PRODUCT_SYSTEM_SERVER_JARS : Platformdaki sistem sunucusu sınıf yolu kavanozlarının listesi (yani, SYSTEMSERVERCLASSPATH bir parçası olarak). Bu listeye sistem sunucusu sınıf yolu kavanozları eklemek gereklidir. Listeye sistem sunucusu sınıf yolu kavanozlarının eklenememesi, bu kavanozların yüklenmemesine neden olur.
    • (gerekli) PRODUCT_APEX_SYSTEM_SERVER_JARS : Apex aracılığıyla (yani, SYSTEMSERVERCLASSPATH bir parçası olarak) teslim edilen sistem sunucusu sınıf yolu kavanozlarının listesi. Biçim <apex name>:<jar name> şeklindedir. Bu listeye apex sistem sunucusu sınıf yolu kavanozları eklemek gereklidir. Bu listeye apex sistem sunucusu sınıf yolu kavanozlarının eklenememesi, bu kavanozların yüklenmemesine neden olur.
    • (Android 13'ten beri isteğe bağlı) PRODUCT_STANDALONE_SYSTEM_SERVER_JARS : Sistem sunucusunun ayrı sınıf yükleyiciler kullanarak dinamik olarak yüklediği jar'ların listesi ( SystemServiceManager.startServiceFromJar aracılığıyla). Bu listeye bağımsız sistem sunucusu kavanozları eklemek gerekli değildir, ancak kavanozları derlediği ve dolayısıyla iyi bir çalışma zamanı performansına sahip olduğu için şiddetle tavsiye edilir.
    • (Android 13'ten beri gereklidir) PRODUCT_APEX_STANDALONE_SYSTEM_SERVER_JARS : Sistem sunucusunun ayrı sınıf yükleyiciler kullanarak dinamik olarak yüklediği apex aracılığıyla teslim edilen jar'ların listesi (yani SystemServiceManager.startServiceFromJar aracılığıyla veya <apex-system-service> olarak bildirilir). Biçim <apex name>:<jar name> şeklindedir. Bu listeye bağımsız apex sistem sunucu kavanozlarının eklenmesi gereklidir. Bu listeye bağımsız apex sistem sunucu kavanozları eklenememesi, önyükleme hatasına neden olur.

    Önyükleme sınıf yolu yapılandırması

    • Önceden Yüklenmiş Sınıflar Listesi
    • Önceden yüklenmiş sınıflar listesi, zigotun başlangıçta başlattığı sınıfların bir listesidir. Bu, her uygulamayı bu sınıf başlatıcıları ayrı ayrı çalıştırma zorunluluğundan kurtararak daha hızlı başlamalarına ve bellekteki sayfaları paylaşmalarına olanak tanı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. Bunu ayarlarken dikkatli olun; kullanılmayan sınıflar yüklendiğinde çok fazla sınıf eklemek hafızayı boşa harcar. Çok az sınıf eklemek, her uygulamayı kendi kopyasına sahip olmaya zorlar ve bu da yine hafızayı boşa harcar.

      Örnek kullanım (ürünün device.mk dosyasında):

      PRODUCT_COPY_FILES += <filename>:system/etc/preloaded-classes
      

      Not: Bu satır, varsayılanı şuradan alan herhangi bir ürün yapılandırma makefile dosyasını devralmadan önce yerleştirilmelidir: build/target/product/base.mk

    Çalışma zamanı yapılandırması

    Jit seçenekleri

    Aşağıdaki seçenekler, yalnızca ART JIT derleyicisinin kullanılabilir olduğu Android sürümlerini etkiler.

    • dalvik.vm.usejit: JIT'in etkin olup olmadığı.
    • dalvik.vm.jitinitialsize (varsayılan 64K): kod önbelleğinin başlangıç ​​kapasitesi. Kod önbelleği düzenli olarak GC yapacak ve gerekirse artacaktır.
    • dalvik.vm.jitmaxsize (varsayılan 64M): kod önbelleğinin maksimum kapasitesi.
    • dalvik.vm.jitthreshold: (varsayılan 10000) - Bu, yöntemin JIT derlenmesi için bir yöntemin "sıcaklık" sayacının geçmesi gereken eşiktir. "Sıcaklık" sayacı, çalışma zamanına dahil olan bir ölçümdür. Çağrıların sayısını, geriye dönük dalları ve diğer faktörleri içerir.
    • dalvik.vm.usejitprofiles: JIT profillerinin etkin olup olmadığı; bu, dalvik.vm.usejit yanlış olsa bile kullanılabilir. Bu yanlışsa, derleyici filtresi speed-profile herhangi bir yöntemi AOT derlemediğini ve verify ile eşdeğer olduğunu unutmayın.
    • dalvik.vm.jitprithreadweight (varsayılan dalvik.vm.jitthreshold / 20) - Uygulama UI iş parçacığı için JIT "örneklerinin" (jitthreshold'a bakın) ağırlığı. Uygulamayla etkileşim kurarken kullanıcıların deneyimini doğrudan etkileyen yöntemlerin derlenmesini hızlandırmak için kullanın.
    • dalvik.vm.jittransitionweight: (varsayılan olarak dalvik.vm.jitthreshold / 10) derleme kodu ile yorumlayıcı arasında geçiş yapan yöntem çağırmanın ağırlığı. Bu, geçişleri (pahalı olan) en aza indirmek için ilgili yöntemlerin derlendiğinden emin olmaya yardımcı olur.

    Paket yöneticisi seçenekleri

    Android 7.0'dan beri, çeşitli aşamalarda gerçekleşen derleme/doğrulama düzeyini belirlemenin genel bir yolu vardır. Derleme seviyeleri, varsayılanlar şu şekilde olacak şekilde sistem özellikleri aracılığıyla yapılandırılabilir:

    • pm.dexopt.install=speed-profile
    • Bu, Google Play üzerinden uygulama yüklerken kullanılan derleme filtresidir. Dex meta veri dosyalarından profillerin kullanımını etkinleştirmek için kurulum filtresinin speed-profile olarak ayarlanmasını öneririz. Bir profil sağlanmadıysa veya boşsa hız profilinin doğrulamaya eşdeğer olduğunu unutmayın.

    • pm.dexopt.bg-dexopt=speed-profile
    • Bu, cihaz boştayken, şarj olurken ve tam şarjlıyken kullanılan derleme filtresidir. Profil yönlendirmeli derlemeden yararlanmak ve depolama alanından tasarruf etmek için speed-profile derleyici filtresini deneyin.

    • pm.dexopt.boot-after-ota=verify
    • Havadan güncellemeden sonra kullanılan derleme filtresi. Çok uzun önyükleme sürelerinden kaçınmak için bu seçenek için derleyici verify filtresini şiddetle öneririz.

    • pm.dexopt.first-boot=verify
    • Aygıtın ilk kez önyükleme yaptığı derleme filtresi. Burada kullanılan filtre yalnızca fabrikadan sonraki önyükleme süresini etkiler. Bir kullanıcı telefonu ilk kez kullanmaya başlamadan önce uzun süre geçmesini önlemek için filtre verify öneririz. Sistem görüntüsündeki tüm uygulamalar zaten doğru sınıf yükleyici bağlamı ile verify , speed-profile veya speed ile derlenmişse, pm.dexopt.first-boot hiçbir etkisi olmayacağını unutmayın.

    Dex2oat seçenekleri

    Bu seçeneklerin cihaz üzerinde derleme sırasında olduğu kadar ön optimizasyon sırasında dex2oat etkilediğine, ancak yukarıda tartışılan seçeneklerin çoğunun yalnızca ön optimizasyonu etkilediğine dikkat edin.

    Önyükleme görüntüsünü derlerken dex2oat kontrol etmek için:

    • dalvik.vm.image-dex2oat-Xms: ilk yığın boyutu
    • dalvik.vm.image-dex2oat-Xmx: maksimum yığın boyutu
    • dalvik.vm.image-dex2oat-filter: derleyici filtre seçeneği
    • dalvik.vm.image-dex2oat-threads: kullanılacak iş parçacığı sayısı

    Önyükleme görüntüsü dışındaki her şeyi derlerken dex2oat kontrol etmek için:

    • dalvik.vm.dex2oat-Xms: ilk yığın boyutu
    • dalvik.vm.dex2oat-Xmx: maksimum yığın boyutu
    • dalvik.vm.dex2oat-filter: derleyici filtre seçeneği

    Android 6.0 üzerinden yayınlanan sürümlerde, önyükleme görüntüsünün yanı sıra her şeyi derlemek için ek bir seçenek sunulur:

    • dalvik.vm.dex2oat-threads: kullanılacak iş parçacığı sayısı

    Android 6.1 ile başlayarak, bu, önyükleme görüntüsünün yanı sıra her şeyi derlemek için iki ek seçenek haline gelir:

    • dalvik.vm.boot-dex2oat-threads: önyükleme sırasında kullanılacak iş parçacığı sayısı
    • dalvik.vm.dex2oat-threads: önyükleme süresinden sonra kullanılacak iş parçacığı sayısı

    Android 7.1'den başlayarak, önyükleme görüntüsü dışındaki her şeyi derlerken belleğin nasıl kullanıldığını kontrol etmek için iki seçenek sunulur:

    • dalvik.vm.dex2oat-very-large: AOT derlemesini devre dışı bırakmak için bayt cinsinden minimum toplam dex dosya boyutu
    • dalvik.vm.dex2oat-swap: dex2oat takas dosyasını kullanın (düşük bellekli cihazlar için)

    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.

    Android 11'den başlayarak, derleyici iş parçacıklarının belirli bir CPU grubuyla sınırlandırılmasına izin vermek için üç CPU benzeşim seçeneği sunulur:

    • dalvik.vm.boot-dex2oat-cpu-set: Önyükleme sırasında dex2oat iş parçacıklarını çalıştıran CPU'lar
    • dalvik.vm.image-dex2oat-cpu-set: Önyükleme görüntüsünü derlerken dex2oat çalıştıran CPU'lar
    • dalvik.vm.dex2oat-cpu-set: Önyükleme zamanından sonra dex2oat iş parçacıklarını çalıştıran CPU'lar

    CPU'lar, virgülle ayrılmış CPU kimlikleri listesi olarak belirtilmelidir. Örneğin, 0-3 CPU'larında dex2oat üzerinde çalışmak için şunu ayarlayın:

    dalvik.vm.dex2oat-cpu-set=0,1,2,3
    

    CPU benzeşim özelliklerini ayarlarken, gereksiz bellek ve G/Ç çekişmesini önlemek için dex2oat iş parçacığı sayısı için 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
    

    Android 12'den başlayarak, aşağıdaki seçenekler eklendi:

    • dalvik.vm.ps-min-first-save-ms: çalışma zamanının uygulamanın bir profilini oluşturmasını bekleme süresi, uygulama ilk kez başlatıldığında
    • dalvik.vm.ps-min-save-period-ms: Bir uygulamanın profilini güncellemeden önce minimum bekleme süresi
    • dalvik.vm.systemservercompilerfilter: cihazın sistem sunucusunu yeniden derlerken kullandığı derleyici filtresi

    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ü boyutundan tasarruf etmek için önceden seçilmiş dosyalar kullanılmayan ikinci sistem bölümüne yüklenebilir. Daha sonra ilk açılışta veri bölümüne kopyalanırlar.

    Örnek kullanım ( device-common.mk içinde):

    PRODUCT_PACKAGES += \
         cppreopts.sh
    PRODUCT_PROPERTY_OVERRIDES += \
         ro.cp_system_other_odex=1
    

    Ve cihazın BoardConfig.mk :

    BOARD_USES_SYSTEM_OTHER_ODEX := true
    

    Önyükleme sınıf yolu kodunun, sistem sunucusu kodunun ve ürüne özgü çekirdek uygulamaların her zaman sistem bölümünü derlediğine dikkat edin. Varsayılan olarak, diğer tüm uygulamalar kullanılmayan ikinci sistem bölümünde derlenir. Bu, varsayılan olarak bir değere sahip olan SYSTEM_OTHER_ODEX_FILTER ile kontrol edilebilir:

    SYSTEM_OTHER_ODEX_FILTER ?= app/% priv-app/%
    

    Arka plan dexopt OTA

    A/B özellikli cihazlarla, yeni sistem görüntüsüne güncelleme için uygulamalar 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 derlemesine 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.