Konfigurasi ART

Halaman ini membahas cara mengonfigurasi Android runtime (ART) dan opsi kompilasinya. Topik yang dibahas di sini mencakup konfigurasi prakompilasi image sistem, dex2oat pilihan kompilasi, dan cara menukar ruang partisi sistem, ruang partisi data, dan tingkat tinggi.

Lihat ART dan Dalvik serta format Dalvik yang dapat dieksekusi agar berfungsi dengan ART. Lihat Memverifikasi Perilaku Aplikasi di Android Runtime (ART) untuk memastikan aplikasi Anda berfungsi mereka dapat terus berjalan dengan baik.

Cara kerja ART

ART menggunakan kompilasi ahead-of-time (AOT), dan mulai Android 7, kombinasi hibrida dari kompilasi AOT, kompilasi tepat waktu (JIT), dan interpretasi, dan kompilasi AOT dapat dipandu profil. Kombinasi dari semua mode eksekusi ini adalah dapat dikonfigurasi dan akan dibahas di bagian ini. Sebagai contoh, perangkat Pixel dikonfigurasi untuk bekerja dalam alur berikut:

  1. Aplikasi yang awalnya diinstal dengan file metadata dex (.dm) yang didistribusikan oleh Play Store, yang berisi profil cloud. ART AOT mengompilasi metode yang tercantum di cloud untuk profil. Atau, jika aplikasi diinstal tanpa file metadata dex, tidak ada kompilasi AOT yang dilaksanakan.
  2. Beberapa kali aplikasi berjalan untuk pertama kalinya, metode yang tidak dikompilasi AOT akan ditafsirkan. Di antara metode yang diinterpretasikan, metode yang sering dieksekusi kemudian dikompilasi secara JIT. SENI membuat profil lokal berdasarkan eksekusi dan menggabungkannya dengan profil cloud (jika ada ada).
  3. Saat perangkat tidak ada aktivitas dan mengisi daya, daemon kompilasi berjalan untuk mengompilasi ulang aplikasi berdasarkan profil gabungan yang dihasilkan selama beberapa proses pertama.
  4. Pada pengoperasian aplikasi berikutnya, ART menggunakan artefak yang dihasilkan oleh kompilasi {i>daemon<i}, yang berisi lebih banyak kode yang dikompilasi AOT, dibandingkan dengan yang dihasilkan selama Metode yang tidak dikompilasi AOT akan tetap ditafsirkan atau dikompilasi secara JIT. ART memperbarui profil instalasi, berdasarkan eksekusi, dan profil kemudian akan diambil oleh daemon kompilasi.

ART terdiri dari compiler (alat dex2oat) dan runtime (libart.so) yang dimuat selama booting. Tujuan Alat dex2oat mengambil file APK dan membuat satu atau beberapa file artefak kompilasi yang dimuat oleh runtime. Jumlah file, ekstensi, dan nama dapat berubah di seluruh rilis, tetapi mulai Rilis Android 8, file berikut akan dibuat:

  • .vdex: berisi beberapa metadata tambahan untuk mempercepat verifikasi, terkadang juga dengan kode DEX tak terkompresi dari APK.
  • .odex: berisi kode yang dikompilasi AOT untuk metode di APK lainnya.
  • .art (optional) berisi internal ART dari beberapa string dan class yang tercantum dalam APK, digunakan untuk mempercepat startup aplikasi Anda.

Opsi kompilasi

Ada dua kategori opsi kompilasi untuk ART:

  1. Konfigurasi ROM sistem: Kode apa yang dikompilasi AOT saat membangun image sistem.
  2. Konfigurasi runtime: bagaimana ART mengompilasi dan menjalankan aplikasi pada perangkat seluler.

Filter compiler

Salah satu opsi ART inti untuk mengonfigurasi kedua kategori ini adalah compiler filter. Filter compiler mengatur cara ART mengompilasi kode DEX dan merupakan yang diteruskan ke alat dex2oat. Mulai dari Android 8, ada empat filter yang didukung secara resmi:

  • verify: hanya menjalankan verifikasi kode DEX (tanpa kompilasi AOT).
  • quicken: (hingga Android 11) menjalankan kode DEX verifikasi data dan mengoptimalkan beberapa petunjuk DEX untuk mendapatkan performa penafsir yang lebih baik.
  • speed: Menjalankan verifikasi kode DEX dan mengompilasi AOT semua metode.
  • speed-profile: Menjalankan verifikasi kode DEX dan metode kompilasi AOT yang tercantum dalam file profil.

Konfigurasi ROM sistem

Library dan aplikasi bawaan dikompilasi AOT saat image sistem sedang dibangun. Ini proses ini disebut dexpreopt. File yang dikompilasi seperti itu dapat digunakan selama semua dependensi tetap tidak berubah, khususnya classpath booting.

Catatan: Jika perangkat memerlukan modul sistem memperbarui maka classpath booting sangat mungkin akan berubah pada update berikutnya, yang membuat semua file dexpreopt menjadi usang dan tidak dapat digunakan.

Ada sejumlah opsi build ART yang tersedia untuk mengonfigurasi dexpreopt. Cara mengonfigurasi opsi ini tergantung pada ruang penyimpanan yang tersedia untuk {i>image<i} sistem dan jumlah aplikasi yang sudah diinstal sebelumnya. JAR/APK yang dikompilasi ke dalam ROM sistem dapat dibagi menjadi empat kategori:

  • Kode classpath booting: dikompilasi dengan filter compiler speed-profile berdasarkan secara default.
  • Kode server sistem (lihat PRODUCT_SYSTEM_SERVER_JARS, PRODUCT_APEX_SYSTEM_SERVER_JARS, PRODUCT_STANDALONE_SYSTEM_SERVER_JARS, PRODUCT_APEX_STANDALONE_SYSTEM_SERVER_JARS nanti di dokumen ini):
    • (Android 14 dan yang lebih baru) Dikompilasi dengan speed-profile filter compiler secara default, atau dikompilasi dengan filter compiler speed jika profil ini tidak tersedia.
    • (Android 13 dan yang lebih lama) Dikompilasi dengan speed filter compiler secara default.
    Dapat dikonfigurasi melalui PRODUCT_SYSTEM_SERVER_COMPILER_FILTER (lihat nanti dalam dokumen).
  • Aplikasi inti khusus produk (lihat PRODUCT_DEXPREOPT_SPEED_APPS nanti dalam dokumen): dikompilasi dengan filter compiler speed secara default.
  • Semua aplikasi lain: dikompilasi dengan filter compiler speed-profile secara default, atau dikompilasi dengan filter compiler verify jika profil tidak disediakan.

    Dapat dikonfigurasi melalui PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER (lihat nanti dalam dokumen).

Opsi makefile

  • WITH_DEXPREOPT
  • Apakah dex2oat dipanggil pada kode DEX yang diinstal pada image sistem. Diaktifkan secara default.

  • DONT_DEXPREOPT_PREBUILTS (Android 5 dan yang lebih baru)
  • Mengaktifkan DONT_DEXPREOPT_PREBUILTS akan mencegah bawaan menjadi dexpreopted. Ini adalah aplikasi yang memiliki include $(BUILD_PREBUILT) yang ditentukan dalam Android.mk. Melewati dexpreopt aplikasi bawaan yang kemungkinan akan diupdate melalui Google Play menghemat ruang di {i>image<i} sistem tetapi menambah waktu {i>booting<i} pertama. Perlu diketahui bahwa opsi ini tidak berpengaruh di aplikasi bawaan yang ditentukan di Android.bp.

  • PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER (Android 9) dan yang lebih tinggi)
  • PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER menentukan filter compiler default untuk aplikasi yang menggunakan dexpreopt. Aplikasi ini ditentukan di Android.bp atau memiliki include $(BUILD_PREBUILT) menentukan dalam Android.mk mereka. Jika tidak ditentukan, nilai defaultnya adalah speed-profile, atau verify jika nilai tidak ditentukan dan profil tidak disediakan.

  • WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY (sejak Android 8 MR1)
  • Mengaktifkan dexpreopt WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY hanya akan classpath boot, dan jar server sistem.

  • LOCAL_DEX_PREOPT
  • Dexpreopt juga dapat diaktifkan atau dinonaktifkan per aplikasi dengan menentukan opsi LOCAL_DEX_PREOPT dalam definisi modul. Ini dapat berguna untuk menonaktifkan dexpreopt aplikasi yang mungkin langsung menerima update Google Play karena update akan merender dexpreopted kode dalam image sistem sudah usang. Ini juga berguna untuk menghemat ruang pada OTA upgrade versi karena pengguna mungkin sudah memiliki versi aplikasi yang lebih baru di partisi data.

    LOCAL_DEX_PREOPT mendukung nilai true atau false untuk mengaktifkan atau menonaktifkan dexpreopt. Selain itu, nostripping dapat ditentukan jika dexpreopt tidak boleh menghapus classes.dex dari file APK atau JAR. Biasanya file ini dihapus karena tidak lagi diperlukan setelah {i>dexpreopt<i}, tetapi opsi terakhir ini diperlukan untuk memungkinkan tanda tangan APK pihak ketiga tetap valid.

  • PRODUCT_DEX_PREOPT_BOOT_FLAGS
  • Meneruskan opsi ke dex2oat untuk mengontrol cara image booting dikompilasi. Ini dapat digunakan untuk menentukan daftar class gambar yang disesuaikan, dikompilasi, daftar class, dan filter compiler.

  • PRODUCT_DEX_PREOPT_DEFAULT_FLAGS
  • Meneruskan opsi ke dex2oat untuk mengontrol bagaimana segala sesuatunya selain image booting dikompilasi.

  • PRODUCT_DEX_PREOPT_MODULE_CONFIGS
  • Memberikan kemampuan untuk meneruskan opsi dex2oat untuk modul, dan konfigurasi produk. Hal ini diatur dalam atribut produk File device.mk oleh $(call add-product-dex-preopt-module-config,<modules>,<option>) dengan <modules> adalah daftar LOCAL_MODULE dan Nama LOCAL_PACKAGE masing-masing untuk file JAR dan APK.

  • PRODUCT_DEXPREOPT_SPEED_APPS (sejak Android 8)
  • Daftar aplikasi yang telah diidentifikasi sebagai inti produk dan yang ingin dikompilasi dengan filter compiler speed. Sebagai misalnya, aplikasi persisten seperti SystemUI memiliki kesempatan untuk kompilasi yang dipandu profil hanya saat {i>reboot<i} berikutnya, jadi mungkin lebih baik agar aplikasi ini selalu dikompilasi AOT.

  • PRODUCT_SYSTEM_SERVER_APPS (sejak Android 8)
  • Daftar aplikasi yang dimuat oleh server sistem. Aplikasi ini dikompilasi secara default dengan filter compiler speed.

  • PRODUCT_ART_TARGET_INCLUDE_DEBUG_BUILD (sejak Android 8)
  • Apakah akan menyertakan versi debug ART pada perangkat. Secara {i>default<i}, adalah diaktifkan untuk userdebug dan build ing. Perilaku dapat diganti dengan secara eksplisit menyetel opsi ke true atau false.

    Secara default, perangkat menggunakan versi nondebug (libart.so). Untuk beralih, tetapkan properti sistem persist.sys.dalvik.vm.lib.2 ke libartd.so.

  • WITH_DEXPREOPT_PIC (hingga Android 7)
  • Di Android 5.1.0 hingga Android 6.0.1, WITH_DEXPREOPT_PIC dapat ditentukan untuk mengaktifkan kode yang tidak tergantung posisi (PIC). Dengan ini, dikompilasi kode dari gambar tidak harus dipindahkan dari /system ke dalam /data/dalvik-cache, menghemat ruang di partisi data. Namun, ada sedikit dampak runtime karena menonaktifkan pengoptimalan yang memanfaatkan dari kode yang bergantung pada posisi. Biasanya, perangkat yang ingin menghemat ruang penyimpanan di /data harus mengaktifkan kompilasi PIC.

    Di Android 7.0, kompilasi PIC diaktifkan secara default.

  • WITH_DEXPREOPT_BOOT_IMG_ONLY (hingga Android 7 MR1)
  • Opsi ini diganti dengan WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY yang juga menerapkan JAR server sistem.

  • PRODUCT_SYSTEM_SERVER_COMPILER_FILTER
  • Opsi ini menentukan filter compiler untuk server sistem.

    • (Android 14 dan yang lebih baru) Jika tidak ditentukan, speed-profile filter compiler digunakan, atau filter compiler speed digunakan jika profil bukan yang Anda berikan.
    • (Android 13 dan yang lebih lama) Jika tidak ditentukan, compiler speed filter yang digunakan.
    • Jika ditetapkan ke speed, filter compiler speed akan digunakan.
    • Jika ditetapkan ke speed-profile, filter compiler speed-profile akan digunakan, atau filter compiler verify digunakan jika profil tidak diberikan.
    • Jika ditetapkan ke verify, filter compiler verify akan digunakan.

  • PRODUCT_SYSTEM_SERVER_JARS, PRODUCT_APEX_SYSTEM_SERVER_JARS, PRODUCT_STANDALONE_SYSTEM_SERVER_JARS, PRODUCT_APEX_STANDALONE_SYSTEM_SERVER_JARS
  • Berikut ini adalah daftar JAR yang dimuat oleh server sistem. JAR dikompilasi dengan filter compiler ditentukan oleh PRODUCT_SYSTEM_SERVER_COMPILER_FILTER

    • (Wajib) PRODUCT_SYSTEM_SERVER_JARS: Daftar JAR classpath server sistem di platform (yaitu, sebagai bagian dari SYSTEMSERVERCLASSPATH). Menambahkan server sistem classpath JAR ke daftar ini diperlukan. Gagal menambahkan JAR classpath server sistem ke daftar menyebabkan JAR tersebut tidak dimuat.
    • (Wajib) PRODUCT_APEX_SYSTEM_SERVER_JARS: Daftar JAR classpath server sistem dikirim dengan APEX (yaitu, sebagai bagian dari SYSTEMSERVERCLASSPATH). Formatnya adalah <apex name>:<jar name>. Menambahkan classpath server sistem APEX JAR ke daftar ini wajib diisi. Gagal menambahkan JAR classpath server sistem APEX ke daftar ini mengakibatkan JAR tersebut tidak dimuat.
    • (Opsional, Android 13 dan yang lebih lama) PRODUCT_STANDALONE_SYSTEM_SERVER_JARS: Daftar JAR yang dimuat server sistem secara dinamis menggunakan classloader terpisah (melalui SystemServiceManager.startServiceFromJar). Menambahkan JAR server sistem {i>standalone<i} ke daftar ini tidak diperlukan tetapi sangat direkomendasikan karena membuat JAR dikompilasi dan sehingga performa runtime-nya baik.
    • (wajib, sejak Android 13) PRODUCT_APEX_STANDALONE_SYSTEM_SERVER_JARS: Daftar JAR yang dikirimkan dengan APEX yang dimuat server sistem secara dinamis menggunakan classloader terpisah (yang adalah, melalui SystemServiceManager.startServiceFromJar atau dideklarasikan sebagai <apex-system-service>). Formatnya adalah <apex name>:<jar name>. Menambahkan JAR server sistem APEX mandiri ke daftar ini wajib diisi. Gagal menambahkan JAR server sistem APEX mandiri ke daftar ini mengakibatkan kegagalan booting.

    Konfigurasi classpath booting

    Daftar class yang dipramuat adalah daftar class yang diinisialisasi oleh Zygote sistem dimulai. Dengan demikian, setiap aplikasi tidak perlu menjalankan penginisialisasi class ini secara terpisah, yang membuatnya bisa mulai lebih cepat dan berbagi laman di memori. Tujuan file daftar kelas bawaan terletak di frameworks/base/config/preloaded-classes secara {i>default<i}, dan berisi daftar yang disesuaikan untuk penggunaan ponsel pada umumnya. Hal ini mungkin berbeda untuk perangkat lain seperti perangkat wearable, dan harus disesuaikan sebagaimana mestinya. Hati-hati saat menyesuaikannya; menambahkan terlalu banyak pemborosan kelas saat class yang tidak digunakan dimuat. Menambahkan terlalu sedikit class akan memaksa setiap aplikasi harus memiliki salinannya sendiri, yang sekali lagi, membuang-buang memori.

    Contoh penggunaan (dalam device.mk produk):

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

    Catatan: Anda harus menempatkan baris ini sebelum mewarisi makefile konfigurasi produk apa pun yang mendapatkan maket {i>default<i} dari build/target/product/base.mk.

    Konfigurasi runtime

    opsi JIT

    Opsi berikut hanya memengaruhi rilis Android yang compiler JIT ART yang tersedia.

    • dalvik.vm.usejit: Apakah JIT diaktifkan atau tidak.
    • dalvik.vm.jitinitialsize (default 64K): Kapasitas awal dari cache kode. Cache kode akan secara berkala melakukan GC dan meningkat jika diperlukan.
    • dalvik.vm.jitmaxsize (default 64M): Kapasitas maksimum cache kode.
    • dalvik.vm.jitthreshold (default 10000): Ambang batas di mana "kepanasan" metode yang harus diteruskan secara berurutan agar metode tersebut dikompilasi secara JIT. "Kepanasan" adalah metrik internal ke runtime. Metrik ini mencakup jumlah panggilan, cabang mundur, dan faktor-faktor.
    • dalvik.vm.usejitprofiles (hingga Android 13): Apakah atau tidak mengaktifkan profil JIT; ini dapat digunakan meskipun dalvik.vm.usejit salah. Perlu diketahui bahwa jika nilai ini salah, filter compiler speed-profile akan melakukan bukan mengompilasi AOT metode apa pun dan setara dengan verify. Sejak Di Android 14, profil JIT selalu diaktifkan dan tidak dapat dinonaktifkan.
    • dalvik.vm.jitprithreadweight (default ke dalvik.vm.jitthreshold / 20): Bobot "sampel" JIT (lihat jitthreshold) untuk thread UI aplikasi. Gunakan untuk mempercepat kompilasi metode yang secara langsung mempengaruhi pengalaman pengguna saat berinteraksi dengan .
    • dalvik.vm.jittransitionweight (default ke dalvik.vm.jitthreshold / 10): Bobot metode pemanggilan yang bertransisi antara kode kompilasi dan penafsir. Hal ini membantu memastikan metode yang terlibat dikompilasi untuk meminimalkan transisi (yang mahal).

    Opsi dex2oat

    Opsi ini memengaruhi kompilasi di perangkat (alias, dexopt), dan beberapa di antaranya juga memengaruhi dexpreopt, sedangkan opsi yang dibahas di bagian Konfigurasi ROM sistem di atas saja memengaruhi dexpreopt.

    Opsi untuk mengontrol penggunaan resource:

    • dalvik.vm.image-dex2oat-threads/dalvik.vm.image-dex2oat-cpu-set (hingga Android 11): Jumlah thread dan set core CPU (lihat di bawah) yang akan digunakan untuk image booting.
    • dalvik.vm.boot-dex2oat-threads/dalvik.vm.boot-dex2oat-cpu-set:
      • (hingga Android 11) Jumlah thread dan set core CPU (lihat di bawah) yang digunakan selama waktu {i>booting<i} untuk segala hal selain gambar {i>booting<i}.
      • (sejak Android 12) Jumlah thread dan set inti CPU (lihat di bawah) yang akan digunakan selama waktu {i>booting<i} untuk semuanya, termasuk gambar {i>booting<i}.
        • Secara khusus, sejak Android 14, ini sesuai dengan class prioritas PRIORITY_BOOT di Layanan ART.
    • dalvik.vm.restore-dex2oat-threads/dalvik.vm.restore-dex2oat-cpu-set:
      • (sejak Android 11, hingga Android 13) jumlah thread dan rangkaian inti CPU (lihat di bawah) yang akan digunakan untuk melakukan pemulihan dari cloud cadangan.
      • (sejak Android 14) Jumlah thread dan set inti CPU (lihat di bawah) untuk digunakan untuk semua yang lebih sensitif terhadap latensi daripada biasanya, termasuk memulihkan dari cadangan {i>cloud<i}.
        • Secara khusus, ini sesuai dengan kelas prioritas PRIORITY_INTERACTIVE_FAST di Layanan ART.
    • dalvik.vm.background-dex2oat-threads/ dalvik.vm.background-dex2oat-cpu-set (sejak Android 14): Jumlah thread dan set inti CPU (lihat di bawah) untuk digunakan di latar belakang.
      • Secara khusus, ini sesuai dengan class prioritas PRIORITY_BACKGROUND di Layanan ART.
    • dalvik.vm.dex2oat-threads/dalvik.vm.dex2oat-cpu-set: Jumlah thread dan set core CPU yang akan digunakan untuk hal lainnya.

    Satu set core CPU harus ditentukan sebagai daftar ID CPU yang dipisahkan koma. Misalnya untuk menjalankan pada dex2oat pada core CPU 0-3, atur:

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

    Saat menetapkan properti afinitas CPU, sebaiknya cocokkan properti yang sesuai untuk jumlah thread dex2oat agar sesuai dengan jumlah CPU yang dipilih untuk menghindari memori dan I/O yang tidak perlu pertentangan:

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

    Selain properti sistem di atas, Anda juga bisa menggunakan profil tugas untuk mengontrol penggunaan resource dex2oat (lihat Cgroup Abstraksi Layer).

    Profil tugas yang didukung adalah:

    • Dex2OatBackground (sejak Android 14) (secara default mewarisi Dex2OatBootComplete): Mengontrol resource yang akan digunakan di latar belakang.
      • Secara khusus, ini sesuai dengan class prioritas PRIORITY_BACKGROUND di Layanan ART.
    • Dex2OatBootComplete:
      • (hingga Android 13) Mengontrol resource yang akan digunakan untuk semuanya setelah booting.
      • (sejak Android 14) Mengontrol resource yang akan digunakan untuk semuanya setelah {i>booting<i} dan bukan di latar belakang.
        • Secara khusus, ini sesuai dengan kelas prioritas PRIORITY_INTERACTIVE_FAST dan PRIORITY_INTERACTIVE dalam ART Layanan.

    Jika properti sistem dan profil tugas ditetapkan, keduanya akan diterapkan.

    Opsi untuk mengontrol ukuran heap:

    • dalvik.vm.image-dex2oat-Xms: Ukuran heap awal untuk image booting.
    • dalvik.vm.image-dex2oat-Xmx: Ukuran heap maksimum untuk image booting.
    • dalvik.vm.dex2oat-Xms: Ukuran heap awal untuk yang lainnya.
    • dalvik.vm.dex2oat-Xmx: Ukuran heap maksimum untuk yang lainnya.

    Opsi yang mengontrol ukuran heap awal dan maksimum untuk dex2oat tidak boleh dikurangi karena dapat membatasi apa aplikasi dapat dikompilasi.

    Opsi untuk mengontrol filter compiler:

    • dalvik.vm.image-dex2oat-filter (hingga Android 11): Filter compiler untuk image boot. Sejak Android 12, compiler filter untuk image booting selalu speed-profile dan tidak dapat diubah.
    • dalvik.vm.systemservercompilerfilter (sejak Android 13): Filter compiler untuk server sistem. Lihat PRODUCT_SYSTEM_SERVER_COMPILER_FILTER.
    • dalvik.vm.systemuicompilerfilter (sejak Android 13): Filter compiler untuk paket UI Sistem.
    • dalvik.vm.dex2oat-filter (hingga Android 6): Filter compiler untuk semua hal lainnya.
    • pm.dexopt.<reason> (sejak Android 7): Filter compiler untuk semua hal lainnya. Lihat Konfigurasi Layanan ART untuk Android 14 ke atas, atau Konfigurasi Pengelola Paket untuk Android 13 dan yang lebih lama.

    Opsi lain untuk mengontrol kompilasi semua selain image booting:

    • dalvik.vm.dex2oat-very-large (sejak Android 7.1): Total ukuran file dex minimum dalam byte untuk menonaktifkan kompilasi AOT.
    • dalvik.vm.dex2oat-swap (sejak Android 7.1) (default: true): Mengizinkan penggunaan swap untuk dex2oat. Hal ini dapat membantu menghindari error kehabisan memori. Perhatikan bahwa meskipun opsi ini dihidupkan, dex2oat hanya akan menggunakan file {i>swap<i} dalam kondisi tertentu, seperti ketika nomor file dex berukuran besar, dan kondisinya dapat berubah sewaktu-waktu.
    • dalvik.vm.ps-min-first-save-ms (sejak Android 12): waktu tunggu minimum sebelum runtime membuat profil aplikasi, saat pertama kali aplikasi diluncurkan.
    • dalvik.vm.ps-min-save-period-ms (sejak Android 12): waktu tunggu minimum sebelum memperbarui profil aplikasi.
    • dalvik.vm.dex2oat64.enabled (sejak Android 11) (default: false): Apakah akan menggunakan dex2oat versi 64-bit.
    • dalvik.vm.bgdexopt.new-classes-percent (sejak Android 12) (default: 20): Persentase minimum, antara 0 dan 100, class baru di profil untuk memicu kompilasi ulang. Hanya berlaku untuk kompilasi yang dipandu profil (speed-profile), biasanya selama dexopt latar belakang. Perhatikan bahwa ada juga batas minimal 50 kelas baru selain batas persentase, dan tidak dapat dikonfigurasi.
    • dalvik.vm.bgdexopt.new-methods-percent (sejak Android 12) (default: 20): Persentase minimum, antara 0 dan 100, metode baru di profil untuk memicu kompilasi ulang. Hanya berlaku untuk kompilasi yang dipandu profil (speed-profile), biasanya selama dexopt latar belakang. Perhatikan bahwa ada juga batas minimal 100 metode baru selain hingga batas persentase, dan tidak dapat dikonfigurasi.
    • dalvik.vm.dex2oat-max-image-block-size (sejak Android 10) (default: 524288) Ukuran blok solid maksimum untuk gambar terkompresi. Gambar besar dibagi menjadi satu set solid blok sehingga tidak ada blok yang lebih besar dari ukuran maksimum.
    • dalvik.vm.dex2oat-resolve-startup-strings (sejak Android 10) (default: true) Jika true (benar), menyebabkan dex2oat me-resolve semua string const yang direferensikan dari metode yang ditandai sebagai "memulai" di profil.
    • debug.generate-debug-info (default: false) Apakah akan menghasilkan informasi debug untuk proses debug native atau tidak, seperti pelepasan stack informasi, simbol ELF, dan bagian dwarf.
    • dalvik.vm.dex2oat-minidebuginfo (sejak Android 9) (default: true) Apakah akan menghasilkan jumlah minimal informasi debug yang dikompresi LZMA yang diperlukan untuk mencetak backtrace.

    Opsi Layanan ART

    Sejak Android 14, kompilasi AOT di perangkat untuk aplikasi (alias dexopt) telah ditangani oleh Layanan ART. Untuk informasi tentang mengonfigurasi Layanan ART, lihat Konfigurasi Layanan ART.

    Opsi pengelola paket

    Sebelum Android 14, kompilasi AOT di perangkat untuk aplikasi (alias dexopt) adalah ditangani oleh pengelola paket. Untuk informasi tentang cara mengkonfigurasi pengelola paket untuk dexopt, lihat Konfigurasi Package Manager.

    Konfigurasi khusus A/B

    Konfigurasi ROM

    Mulai Android 7.0, perangkat dapat menggunakan dua partisi sistem untuk mengaktifkan Update sistem A/B. Untuk menghemat ukuran partisi sistem, file yang dipilih dapat diinstal di partisi sistem kedua yang tidak digunakan lagi. Kemudian mereka disalin ke partisi data saat booting pertama.

    Contoh penggunaan (dalam device-common.mk):

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

    Dan di BoardConfig.mk perangkat:

    BOARD_USES_SYSTEM_OTHER_ODEX := true
    

    Perhatikan bahwa kode classpath booting, kode server sistem, dan inti khusus produk aplikasi selalu dikompilasi ke partisi sistem. Secara default, semua aplikasi dikompilasi ke partisi sistem kedua yang tidak digunakan. Dapat berupa dikontrol dengan SYSTEM_OTHER_ODEX_FILTER, yang memiliki nilai dengan default:

    SYSTEM_OTHER_ODEX_FILTER ?= app/% priv-app/%
    

    Dexopt OTA latar belakang

    Pada perangkat dengan A/B aktif, aplikasi bisa dikompilasi di latar belakang sebelum {i>reboot<i} image sistem baru. Lihat Kompilasi aplikasi di background untuk menyertakan skrip kompilasi dan biner di image sistem secara opsional. Tujuan filter kompilasi yang digunakan untuk kompilasi ini dikontrol dengan:

    pm.dexopt.ab-ota=speed-profile
    

    Sebaiknya gunakan speed-profile untuk memanfaatkan panduan profil kompilasi dan hemat penyimpanan.

    Opsi JDWP

    Pembuatan thread Java Debug Wire Protocol (JDWP) di build userdebug dikontrol melalui Properti sistem persist.debug.dalvik.vm.jdwp.enabled. Secara default, properti ini tidak ditetapkan dan thread JDWP hanya dibuat untuk aplikasi yang dapat di-debug. Untuk mengaktifkan thread JDWP untuk keduanya aplikasi yang dapat di-debug dan tidak dapat di-debug, setel persist.debug.dalvik.vm.jdwp.enabled ke 1. Perangkat harus dimulai ulang agar perubahan pada properti diterapkan.

    Untuk men-debug aplikasi yang tidak dapat di-debug pada build userdebug, aktifkan JDWP dengan menjalankan perintah berikut berikut:

      adb shell setprop persist.debug.dalvik.vm.jdwp.enabled 1
      adb reboot
      
    Untuk perangkat yang menjalankan Android 13 dan yang lebih rendah, runtime akan membuat JDWP thread untuk aplikasi yang dapat di-debug dan tidak dapat di-debug pada build userdebug. Artinya, mungkin saja untuk memasang debugger atau profil aplikasi apa pun pada build userdebug.