ART'yi yapılandır

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ı, dex2oatderleme 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:

  1. 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.
  2. 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.
  3. 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.
  4. 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:

  1. Sistem ROM yapılandırması: Sistem görüntüsü oluşturulurken AOT'nin derlediği kod.
  2. Ç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ışsa speed 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).
  • Ü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 olarak speed derleyici filtresiyle derlenir.
  • Diğer tüm uygulamalar: Varsayılan olarak speed-profile derleyici filtresiyle derlenir veya profil sağlanmamışsa verify 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
  • 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 (Android 5 ve sonraki sürümler)
  • 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 (Android 9 ve sonraki sürümler)
  • 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 (Android 8 MR1'den beri)
  • 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.

  • LOCAL_DEX_PREOPT
  • 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.

  • PRODUCT_DEX_PREOPT_BOOT_FLAGS
  • Ö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.

  • PRODUCT_DEX_PREOPT_DEFAULT_FLAGS
  • Ö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.

  • PRODUCT_DEX_PREOPT_MODULE_CONFIGS
  • 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.

  • 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 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.

  • 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)
  • 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.

  • WITH_DEXPREOPT_PIC (Android 7'ye kadar)
  • 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.

  • WITH_DEXPREOPT_BOOT_IMG_ONLY (Android 7 MR1'e kadar)
  • Bu seçenek, 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 sonraki sürümler) Belirtilmezse speed-profile derleyici filtresi kullanılır veya profil sağlanmazsa speed derleyici filtresi kullanılır.
    • (Android 13 ve önceki sürümler) Belirtilmezse 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 profil sağlanmazsa verify derleyici 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 verilmiştir. JAR'lar, PRODUCT_SYSTEM_SERVER_COMPILER_FILTER tarafından belirtilen derleyici filtresiyle derlenir.

    • (Zorunlu) PRODUCT_SYSTEM_SERVER_JARS: Platformdaki sistem sunucusu sınıf yolu JAR'larının listesi (yani SYSTEMSERVERCLASSPATH 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 (yani SYSTEMSERVERCLASSPATH 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 (yani SystemServiceManager.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.

    Ö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.

    • 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ışsa speed-profile derleyici filtresinin hiçbir yöntemi AOT derlemediğini ve verify 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 olarak dalvik.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.

    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:

    • 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.
    • 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.
    • 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.
    • 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.

    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:

    • Dex2OatBackground (Android 14'ten itibaren) (varsayılan olarak Dex2OatBootComplete ö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.
    • 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 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 geçerli olur.

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

    • 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.

    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:

    • 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 zaman speed-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.

    Önyükleme resimleri dışındaki her şeyin derlenmesini kontrol etmek için diğer seçenekler:

    • 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.

    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
      
    Android 13 ve önceki sürümleri çalıştıran cihazlarda, çalışma zamanı, userdebug derlemelerinde hata ayıklama yapılabilir ve hata ayıklama yapılamayan uygulamalar için JDWP iş parçacıkları oluşturur. Bu, userdebug derlemelerinde hata ayıklayıcı eklemek veya herhangi bir uygulamanın profilini oluşturmak mümkün olduğu anlamına gelir.