ART'ı yapılandır

Bu sayfada Android çalışma zamanının (ART) ve derleme seçeneklerinin nasıl yapılandırılacağı anlatılmaktadı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ın nasıl değiş tokuş edileceği yer almaktadır.

ART ile çalışmak için ART ve Dalvik'e ve Dalvik yürütülebilir formatına 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.

ART nasıl çalışır?

ART, önceden belirlenmiş (AOT) derlemeyi kullanır ve Android 7'den başlayarak, AOT derlemesi, tam zamanında (JIT) derlemesi ve yorumlamanın hibrit bir kombinasyonunu kullanır ve AOT derlemesi profil yönlendirmeli olabilir. Tüm bu yürütme modlarının kombinasyonu yapılandırılabilir ve bu bölümde ele alınacaktır. Örnek olarak Pixel cihazları aşağıdaki akışta çalışacak şekilde yapılandırılmıştır:

  1. Bir uygulama başlangıçta Play Store tarafından dağıtılan ve bir bulut profili içeren bir dex meta veri ( .dm ) dosyasıyla yüklenir. ART AOT bulut profilinde listelenen yöntemleri derler. Veya uygulama dex meta veri dosyası olmadan kurulursa AOT derlemesi yapılmaz.
  2. Uygulama ilk birkaç çalıştırıldığında AOT ile derlenmeyen yöntemler yorumlanır. Yorumlanan yöntemler arasında sıklıkla çalıştırılanlar daha sonra JIT ile derlenir. ART, yürütmeye dayalı olarak yerel bir profil oluşturur ve bunu bulut profiliyle (varsa) birleştirir.
  3. Cihaz boştayken ve şarj olurken, ilk birkaç çalıştırma sırasında oluşturulan birleştirilmiş profile dayalı olarak uygulamayı yeniden derlemek için bir derleme arka plan programı çalışır.
  4. Uygulamanın sonraki çalıştırmalarında ART, derleme arka plan programı tarafından oluşturulan ve AOT tarafından derlenmeyen Yöntemler hala yorumlanırken veya JIT tarafından derlenirken oluşturulanlarla karşılaştırıldığında daha fazla AOT tarafından derlenmiş kod içeren yapıları kullanır. ART, yürütmeye bağlı olarak profil kurulumunu günceller ve profil daha sonra derleme arka plan programının sonraki çalıştırmaları tarafından alınır.

ART, bir derleyiciden ( dex2oat aracı) ve önyükleme sırasında yüklenen bir çalışma zamanından ( libart.so ) oluşur. dex2oat aracı bir APK dosyasını alır ve çalışma zamanının yüklediği bir veya daha fazla derleme yapıt dosyası oluşturur. Dosyaların sayısı, uzantıları ve adları sürümlere göre değişebilir ancak Android 8 sürümünden itibaren şu dosyalar oluşturulmuştur:

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

Derleme seçenekleri

ART için iki derleme seçeneği kategorisi vardır:

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

Derleyici filtreleri

Bu iki kategoriyi yapılandırmak için temel ART seçeneklerinden biri derleyici filtreleridir . Derleyici filtreleri ART'ın DEX kodunu nasıl derlediğini belirler ve dex2oat aracına aktarılan bir seçenektir. Android 8'den itibaren resmi olarak desteklenen dört filtre bulunmaktadır:

  • verify : yalnızca DEX kod doğrulamasını çalıştırın (AOT derlemesi yok).
  • quicken : (Android 11'e kadar) daha iyi tercüman 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ı

Önceden yüklenmiş kitaplıklar ve uygulamalar, bir sistem görüntüsü oluşturulurken AOT derlenir. Bu işleme dexpreopt denir. Bu tür derlenmiş dosyalar, başta önyükleme sınıf yolu olmak üzere tüm bağımlılıklar değişmeden kaldığı sürece kullanılabilir.

Not: Cihaz sistem modülü güncellemelerini alırsa, bir sonraki güncellemede önyükleme sınıf yolunun değişmesi muhtemeldir, bu da tüm dexpreopt dosyalarını eski ve kullanılamaz hale getirir.

Dexpreopt'u yapılandırmak için bir dizi ART oluşturma seçeneği mevcuttur. 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'ler dört kategoriye ayrılabilir:

  • Önyükleme sınıf yolu kodu: varsayılan olarak speed-profile derleyici filtresiyle derlenir.
  • Sistem sunucusu kodu (bu belgenin ilerleyen kısımlarındaki PRODUCT_SYSTEM_SERVER_JARS , PRODUCT_APEX_SYSTEM_SERVER_JARS , PRODUCT_STANDALONE_SYSTEM_SERVER_JARS , PRODUCT_APEX_STANDALONE_SYSTEM_SERVER_JARS bakın):
    • (Android 14 ve üzeri) Varsayılan olarak speed-profile derleyici filtresiyle derlenir veya bir profil sağlanmadıysa speed derleyici filtresiyle derlenir.
    • (Android 13 ve altı) Varsayılan olarak speed derleyici filtresiyle derlenmiştir.
    PRODUCT_SYSTEM_SERVER_COMPILER_FILTER aracılığıyla yapılandırılabilir (bu belgenin ilerleyen bölümlerine bakın).
  • Ürüne özel temel uygulamalar (bu belgenin ilerleyen kısımlarındaki PRODUCT_DEXPREOPT_SPEED_APPS 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 verify derleyici filtresiyle derlenir.

    PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER aracılığıyla yapılandırılabilir (bu belgenin ilerleyen bölümlerine bakın).

Makefile seçenekleri

  • WITH_DEXPREOPT
  • Sistem görüntüsünde yüklü olan DEX kodunda dex2oat çağrılıp çağrılmayacağı. Varsayılan olarak etkindir.

  • DONT_DEXPREOPT_PREBUILTS (Android 5 ve üzeri)
  • DONT_DEXPREOPT_PREBUILTS etkinleştirilmesi, önceden oluşturulmuş yapıların açıklamasının kaldırılmasını engeller. Bunlar, Android.mk dosyasında belirtilen include $(BUILD_PREBUILT) uygulamalardır. Google Play aracılığıyla güncellenmesi muhtemel önceden oluşturulmuş uygulamaların dexpreopt'unun atlanması, sistem görüntüsünde yer tasarrufu sağlar ancak ilk önyükleme süresini uzatır. Bu seçeneğin Android.bp tanımlanan önceden oluşturulmuş uygulamalar üzerinde hiçbir etkisi olmadığını unutmayın.

  • PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER (Android 9 ve üzeri)
  • PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER , açıklanmış uygulamalar için varsayılan derleyici filtresini belirtir. Bu uygulamalar Android.bp tanımlanmıştır veya Android.mk belirtilen include $(BUILD_PREBUILT) . Belirtilmemişse varsayılan değer speed-profile şeklindedir veya değerin belirtilmemiş olduğunu ve bir profilin sağlanmadığını verify .

  • WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY (Android 8 MR1'den beri)
  • WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY etkinleştirilmesi yalnızca önyükleme sınıf yolunu ve sistem sunucusu jar'larını dexpreopts eder.

  • LOCAL_DEX_PREOPT
  • Dexpreopt ayrıca modül tanımında LOCAL_DEX_PREOPT seçeneği belirtilerek bireysel uygulama bazında etkinleştirilebilir veya devre dışı bırakılabilir. Bu, güncellemeler sistem görüntüsündeki açıklanmış kodu geçersiz kılacağından, Google Play güncellemelerini hemen alabilecek uygulamalarda açıklama düzeltmesini devre dışı bırakmak için yararlı olabilir. Bu aynı zamanda büyük sürüm yükseltme OTA'larında yerden tasarruf etmek için de kullanışlıdır çünkü kullanıcılar veri bölümünde uygulamaların daha yeni sürümlerine zaten sahip olabilir.

    LOCAL_DEX_PREOPT dexpreopt'u etkinleştirmek veya devre dışı bırakmak için sırasıyla true veya false değerlerini destekler. Ayrıca, dexpreopt'un classes.dex dosyasını APK veya JAR dosyasından çıkarmaması gerekiyorsa nostripping belirtilebilir. Normalde bu dosya, dexpreopt'tan sonra artık ihtiyaç duyulmadığından çıkarı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 kontrol etmek için seçenekleri dex2oat iletir. Özelleştirilmiş görüntü sınıf 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 iletir.

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

  • PRODUCT_DEXPREOPT_SPEED_APPS (Android 8'den beri)
  • Ürünlerin temeli olarak tanımlanan ve speed derleyici filtresiyle derlenmesi istenen uygulamaların listesi. Örneğin, SystemUI gibi kalıcı uygulamalar, profil kılavuzlu derlemeyi yalnızca bir sonraki yeniden başlatmada kullanma şansına sahip olur; bu nedenle, bu uygulamaların her zaman AOT derlenmesi ürün için daha iyi olabilir.

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

  • PRODUCT_ART_TARGET_INCLUDE_DEBUG_BUILD (Android 8'den beri)
  • Cihaza ART'ın hata ayıklama sürümünün eklenip eklenmeyeceği. Varsayılan olarak bu, userdebug ve eng yapıları için etkindir. Seçenek açıkça true veya false olarak ayarlanarak davranış geçersiz kılınabilir.

    Varsayılan olarak cihaz, hata ayıklamayan 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.

  • WITH_DEXPREOPT_PIC (Android 7'ye kadar)
  • Android 5.1.0'dan Android 6.0.1'e kadar, konumdan bağımsız kodu (PIC) etkinleştirmek için WITH_DEXPREOPT_PIC belirtilebilir. Bununla, görüntüden derlenen kodun /system /data/dalvik-cache taşınmasına gerek kalmaz, 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ı üzerinde hafif bir etki vardır. Genellikle /data alanından tasarruf etmek isteyen cihazların PIC derlemesini etkinleştirmesi gerekir.

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

  • WITH_DEXPREOPT_BOOT_IMG_ONLY (Android 7 MR1'e kadar)
  • Bu seçenek, aynı zamanda sistem sunucusu JAR'ları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 ve üzeri) Belirtilmemişse speed-profile derleyici filtresi kullanılır veya profil sağlanmadıysa speed derleyici filtresi kullanılır.
    • (Android 13 ve altı) 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ğlanmadıysa derleyiciyi verify filtresi kullanılır.
    • verify olarak ayarlanırsa verify 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
  • Aşağıda sistem sunucusu tarafından yüklenen JAR'ların listesi bulunmaktadır. JAR'lar PRODUCT_SYSTEM_SERVER_COMPILER_FILTER tarafından belirtilen derleyici filtresiyle derlenir.

    • (Gerekli) PRODUCT_SYSTEM_SERVER_JARS : Platformdaki sistem sunucusu sınıf yolu JAR'larının listesi (yani, SYSTEMSERVERCLASSPATH bir parçası olarak). Bu listeye sistem sunucusu sınıf yolu JAR'larının eklenmesi gerekir. Sistem sunucusu sınıf yolu JAR'larının listeye eklenememesi, bu JAR'ların yüklenmemesine neden olur.
    • (Gerekli) PRODUCT_APEX_SYSTEM_SERVER_JARS : APEX ile (yani SYSTEMSERVERCLASSPATH bir parçası olarak) teslim edilen sistem sunucusu sınıf yolu JAR'larının listesi. Format şu şekildedir <apex name>:<jar name> . APEX sistem sunucusu sınıf yolu JAR'larının bu listeye eklenmesi gerekir. APEX sistem sunucusu sınıf yolu JAR'larının bu listeye eklenememesi, bu JAR'ların yüklenmemesine neden olur.
    • (İsteğe bağlı, Android 13 ve altı) 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ının eklenmesi gerekli değildir ancak JAR'ların derlenmesini sağladığından ve dolayısıyla iyi bir çalışma zamanı performansına sahip olduğundan kesinlikle önerilir.
    • (Android 13'ten beri gereklidir) PRODUCT_APEX_STANDALONE_SYSTEM_SERVER_JARS : Sistem sunucusunun ayrı sınıf yükleyiciler (yani SystemServiceManager.startServiceFromJar aracılığıyla veya <apex-system-service> olarak bildirilen) kullanarak dinamik olarak yüklediği APEX ile teslim edilen JAR'ların listesi. Format şu şekildedir <apex name>:<jar name> . Bu listeye bağımsız APEX sistem sunucusu JAR'larının eklenmesi gerekir. Bağımsız APEX sistem sunucusu JAR'larının bu listeye eklenememesi, önyükleme hatasıyla sonuçlanır.

    Ö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 bir listesidir. Bu, her uygulamanın bu sınıf başlatıcıları ayrı ayrı çalıştırma zorunluluğunu ortadan kaldırarak uygulamaların daha hızlı başlatılmasına ve bellekteki sayfaları paylaşması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ına göre ayarlanmış bir liste içerir. Bu, giyilebilir cihazlar gibi diğer cihazlar için farklı olabilir ve buna göre ayarlanması gerekir. Bunu ayarlarken dikkatli olun; Çok fazla sınıf eklemek, kullanılmayan sınıflar yüklendiğinde belleği boşa harcar. Çok az sınıf eklemek, her uygulamanın kendi kopyasına sahip olmasını zorunlu kılar ve bu da yine hafızanın boşa harcanmasına neden olur.

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

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

    Not: build build/target/product/base.mk dosyasından varsayılan olanı alan herhangi bir ürün yapılandırma makefile dosyasını devralmadan önce bu satırı yerleştirmeniz gerekir.

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

    JIT seçenekleri

    Aşağıdaki seçenekler yalnızca ART JIT derleyicisinin mevcut 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 olacak ve gerekirse artırılacaktır.
    • dalvik.vm.jitmaxsize (varsayılan 64M): Kod önbelleğinin maksimum kapasitesi.
    • dalvik.vm.jitthreshold (varsayılan 10000): Yöntemin JIT ile derlenmesi için yöntemin "sıcaklık" sayacının geçmesi gereken eşik. "Sıcaklık" sayacı, çalışma zamanının dahili bir ölçüsüdür. Çağrı sayısını, geriye doğru şubeleri ve diğer faktörleri içerir.
    • dalvik.vm.usejitprofiles (Android 13'e kadar): JIT profillerinin etkin olup olmadığı; dalvik.vm.usejit yanlış olsa bile bu kullanılabilir. Bu yanlışsa, derleyici filtre speed-profile herhangi bir yöntemi AOT derlemesi yapmadığını ve verify eşdeğer olduğunu unutmayın. Android 14'ten beri JIT profilleri her zaman etkindir ve kapatılamaz.
    • dalvik.vm.jitprithreadweight (varsayılan olarak dalvik.vm.jitthreshold / 20): Uygulama kullanıcı arayüzü iş parçacığı için JIT "örneklerinin" (jit eşiğine bakın) ağırlığı. Uygulamayla etkileşimde bulunurken 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ğrısının ağırlığı. Bu, ilgili yöntemlerin (pahalı olan) geçişleri en aza indirecek şekilde derlendiğinden emin olmanıza yardımcı olur.

    Dex2yulaf seçenekleri

    Bu seçenekler cihazdaki derlemeyi (diğer adıyla dexopt ) etkiler ve bunlardan birkaçı aynı zamanda dexpreopt'u da etkiler; oysa yukarıdaki Sistem ROM yapılandırması bölümünde tartışılan seçenekler yalnızca dexpreopt'u etkiler.

    Kaynak kullanımını kontrol etme seçenekleri:

    • dalvik.vm.image-dex2oat-threads / dalvik.vm.image-dex2oat-cpu-set (Android 11'e kadar): Önyükleme görüntüleri için kullanılacak iş parçacığı sayısı ve CPU çekirdeği seti (aşağıya bakın).
    • dalvik.vm.boot-dex2oat-threads / dalvik.vm.boot-dex2oat-cpu-set :
      • (Android 11'e kadar) Önyükleme görüntüleri dışındaki her şey için önyükleme sırasında kullanılacak iş parçacığı sayısı ve CPU çekirdeği seti (aşağıya bakın).
      • (Android 12'den beri) Önyükleme görüntüleri de dahil olmak üzere her şey için önyükleme sırasında kullanılacak iş parçacığı sayısı ve CPU çekirdeği seti (aşağıya bakın).
        • Özellikle Android 14'ten beri bu, ART Hizmetindeki PRIORITY_BOOT öncelik sınıfına karşılık gelir.
    • dalvik.vm.restore-dex2oat-threads / dalvik.vm.restore-dex2oat-cpu-set :
      • (Android 11'den beri, Android 13'e kadar) Bulut yedeklemesinden geri yükleme için kullanılacak iş parçacığı sayısı ve CPU çekirdeği seti (aşağıya bakın).
      • (Android 14'ten beri) Bulut yedeklemesinden geri yükleme de dahil olmak üzere, gecikmeye normalden daha duyarlı olan her şey için kullanılacak iş parçacığı sayısı ve CPU çekirdeği kümesi (aşağıya bakın).
        • Özellikle bu, ART Hizmetindeki PRIORITY_INTERACTIVE_FAST öncelik sınıfına karşılık gelir.
    • dalvik.vm.background-dex2oat-threads / dalvik.vm.background-dex2oat-cpu-set (Android 14'ten beri): Arka planda kullanılacak iş parçacığı sayısı ve CPU çekirdeği seti (aşağıya bakın).
      • Özellikle bu, ART Hizmetindeki PRIORITY_BACKGROUND öncelik sınıfına karşılık gelir.
    • dalvik.vm.dex2oat-threads / dalvik.vm.dex2oat-cpu-set : Diğer her şey için kullanılacak iş parçacığı sayısı ve CPU çekirdeği seti.

    Bir dizi CPU çekirdeği, CPU kimliklerinin virgülle ayrılmış bir listesi olarak belirtilmelidir. Örneğin, 0-3 CPU çekirdeklerinde dex2oat'ta çalıştırmak için şunu ayarlayın:

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

    CPU benzeşimi özelliklerini ayarlarken, gereksiz bellek ve G/Ç çekişmesini önlemek için dex2oat iş parçacığı sayısına karşılık gelen özelliği seçilen CPU sayısıyla eşleştirecek şekilde 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 (bkz. Cgroup Abstraction Layer ).

    Desteklenen görev profilleri şunlardır:

    • Dex2OatBackground (Android 14'ten beri) (varsayılan olarak Dex2OatBootComplete devralır): Arka planda kullanılacak kaynakları kontrol eder.
      • Özellikle bu, ART Hizmetindeki PRIORITY_BACKGROUND öncelik sınıfına karşılık gelir.
    • Dex2OatBootComplete :
      • (Android 13'e kadar) Önyükleme sonrasında her şey için kullanılacak kaynağı kontrol eder.
      • (Android 14'ten beri) Arka planda değil, önyükleme sonrasında her şey için kullanılacak kaynağı kontrol eder.
        • Özellikle bu, ART Hizmetindeki PRIORITY_INTERACTIVE_FAST ve PRIORITY_INTERACTIVE öncelik sınıfına karşılık gelir.

    Hem sistem özellikleri hem de görev profilleri belirtildiğinde her ikisi de etkili olur.

    Yığın boyutunu kontrol etme seçenekleri:

    • dalvik.vm.image-dex2oat-Xms : Önyükleme görüntüleri için başlangıç ​​yığın boyutu.
    • dalvik.vm.image-dex2oat-Xmx : Önyükleme görüntüleri 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.

    dex2oat için başlangıç ​​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:

    • dalvik.vm.image-dex2oat-filter (Android 11'e kadar): Önyükleme görüntüleri için derleyici filtresi. Android 12'den bu yana, önyükleme görüntülerine yönelik derleyici filtresi her zaman speed-profile ve değiştirilemez.
    • dalvik.vm.systemservercompilerfilter (Android 13'ten beri): Sistem sunucusu için derleyici filtresi. PRODUCT_SYSTEM_SERVER_COMPILER_FILTER bakın.
    • dalvik.vm.systemuicompilerfilter (Android 13'ten beri): Sistem Kullanıcı Arayüzü 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 üzeri için ART Hizmet Yapılandırması'na veya Android 13 ve altı için Paket Yöneticisi Yapılandırması'na bakın.

    Önyükleme görüntüleri dışındaki her şeyin derlenmesini denetlemeye yönelik diğer seçenekler:

    • dalvik.vm.dex2oat-very-large (Android 7.1'den beri): AOT derlemesini devre dışı bırakmak için bayt cinsinden minimum toplam dex dosyası boyutu.
    • dalvik.vm.dex2oat-swap (Android 7.1'den beri) (varsayılan: doğru): dex2oat için bir takas dosyası kullanılmasına izin verir. Bu, yetersiz bellek çökmelerinin önlenmesine yardımcı olabilir. Bu seçenek açık olsa bile, dex2oat'ın takas dosyasını yalnızca belirli koşullar altında kullanacağını, örneğin dex dosyalarının sayısının fazla olduğunu ve koşulların değişebileceğini unutmayın.
    • dalvik.vm.ps-min-first-save-ms (Android 12'den beri): Uygulama ilk başlatıldığında, çalışma zamanının uygulamanın profilini oluşturmasından önce beklenecek minimum süre.
    • dalvik.vm.ps-min-save-period-ms (Android 12'den beri): Uygulamanın profilini güncellemeden önce beklenecek 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ğı.
    • dalvik.vm.bgdexopt.new-classes-percent (Android 12'den beri) (varsayılan: 20): Yeniden derlemeyi tetiklemek için profildeki yeni sınıfların 0 ile 100 arasındaki minimum yüzdesi. Yalnızca profil kılavuzlu derleme ( speed-profile ) için geçerlidir, genellikle arka plan dexopt sırasında. Yüzde eşiğine ek olarak en az 50 yeni sınıftan oluşan bir eşiğin de bulunduğunu ve bunun yapılandırılamayacağını unutmayın.
    • dalvik.vm.bgdexopt.new-methods-percent (Android 12'den beri) (varsayılan: 20): Bir profilde yeniden derlemeyi tetiklemek için yeni yöntemlerin 0 ile 100 arasındaki minimum yüzdesi. Yalnızca profil kılavuzlu derleme ( speed-profile ) için geçerlidir, genellikle arka plan dexopt sırasında. Yüzde eşiğine ek olarak en az 100 yeni yöntemden oluşan bir eşiğin de bulunduğunu ve bunun yapılandırılamayacağını unutmayın.
    • dalvik.vm.dex2oat-max-image-block-size (Android 10'dan beri) (varsayılan: 524288) Sıkıştırılmış görüntüler için maksimum katı blok boyutu. Büyük bir görüntü, hiçbir blok maksimum boyuttan daha büyük olmayacak şekilde bir dizi katı bloklara bölünür.
    • dalvik.vm.dex2oat-resolve-startup-strings (Android 10'dan beri) (varsayılan: true) Doğruysa, dex2oat'ın profilde "startup" olarak işaretlenen yöntemlerden başvurulan tüm const-string'leri çözümlemesine neden olur.
    • debug.generate-debug-info (varsayılan: false) Yerel hata ayıklama için yığın çözme bilgileri, ELF sembolleri 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: doğru) Geri izlemeleri yazdırmak için gerekli minimum miktarda LZMA sıkıştırılmış hata ayıklama bilgisi oluşturulup oluşturulmayacağı.

    ART Hizmet seçenekleri

    Android 14'ten bu yana, uygulamalar için cihazdaki AOT derlemesi (diğer adıyla dexopt) ART Hizmeti tarafından gerçekleştirilir. ART Hizmetini yapılandırma hakkında bilgi için bkz. ART Hizmeti yapılandırması .

    Paket yöneticisi seçenekleri

    Android 14'ten önce, uygulamalar için cihazdaki AOT derlemesi (diğer adıyla dexopt) paket yöneticisi tarafından gerçekleştirilir. Dexopt için paket yöneticisini yapılandırma hakkında bilgi için bkz. Paket Yöneticisi Yapılandırması .

    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çilen 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 ):

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

    Ve cihazın BoardConfig.mk dosyasında:

    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ü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 aşağıdaki değere sahip olan SYSTEM_OTHER_ODEX_FILTER ile kontrol edilebilir:

    SYSTEM_OTHER_ODEX_FILTER ?= app/% priv-app/%
    

    Arka plan OTA dexopt'u

    A/B özellikli cihazlarda uygulamalar, yeni sistem görüntüsüyle yeniden başlatmadan önce arka planda derlenebilir. Derleme komut dosyasını ve ikili dosyaları isteğe bağlı olarak sistem görüntüsüne eklemek için Arka planda uygulama derlemesine bakın. Bu derleme için kullanılan derleme filtresi şununla kontrol edilir:

    pm.dexopt.ab-ota=speed-profile
    

    Profil kılavuzlu derlemenin avantajlarından yararlanmak ve depolama alanından tasarruf etmek için speed-profile kullanmanızı öneririz.

    JDWP seçenekleri

    Kullanıcı hata ayıklama yapılarında Java Hata Ayıklama Tel Protokolü (JDWP) iş parçacığı oluşturma, persist.debug.dalvik.vm.jdwp.enabled sistem özelliği aracılığıyla kontrol edilir. Varsayılan olarak bu özellik ayarlanmamıştır ve JDWP iş parçacıkları yalnızca hata ayıklaması yapılabilen uygulamalar için oluşturulur. Hem hata ayıklanabilir hem de hata ayıklanamayan uygulamalar için JDWP iş parçacıklarını etkinleştirmek için persist.debug.dalvik.vm.jdwp.enabled değerini 1 olarak ayarlayın. Özellikte yapılan değişikliklerin etkili olması için cihazın yeniden başlatılması gerekir.

    Kullanıcı hata ayıklama yapısında hata ayıklanamayan bir uygulamanın hatalarını ayıklamak 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
      
    Android 13 ve daha önceki sürümleri çalıştıran cihazlar için çalışma zamanı, kullanıcı hata ayıklama derlemelerinde hata ayıklanabilen ve hata ayıklanamayan uygulamalar için JDWP iş parçacıkları oluşturur. Bu, kullanıcı hata ayıklama derlemelerine bir hata ayıklayıcı eklemenin veya herhangi bir uygulamanın profilini çıkarmanın mümkün olduğu anlamına gelir.