Konfigurasikan SENI

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

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

Bagaimana SENI bekerja

ART menggunakan kompilasi advance-of-time (AOT), dan mulai Android 7, ART menggunakan kombinasi hibrid kompilasi AOT, kompilasi just-in-time (JIT), dan interpretasi, serta kompilasi AOT dapat dipandu oleh profil. Kombinasi semua mode eksekusi ini dapat dikonfigurasi dan akan dibahas di bagian ini. Sebagai contoh, perangkat Pixel dikonfigurasikan untuk bekerja dalam alur berikut:

  1. Aplikasi awalnya diinstal dengan file dex metadata ( .dm ) yang didistribusikan oleh Play Store, yang berisi profil cloud. ART AOT-mengkompilasi metode yang tercantum di profil cloud. Atau, jika aplikasi diinstal tanpa file metadata dex, kompilasi AOT tidak dilakukan.
  2. Beberapa kali pertama aplikasi dijalankan, metode yang tidak dikompilasi AOT akan diinterpretasikan. Di antara metode yang diinterpretasikan, metode yang sering dieksekusi kemudian dikompilasi JIT. ART menghasilkan profil lokal berdasarkan eksekusi dan menggabungkannya dengan profil cloud (jika ada).
  3. Saat perangkat dalam keadaan idle dan mengisi daya, daemon kompilasi dijalankan untuk mengkompilasi ulang aplikasi berdasarkan profil gabungan yang dihasilkan selama beberapa proses pertama.
  4. Pada proses aplikasi selanjutnya, ART menggunakan artefak yang dihasilkan oleh daemon kompilasi, yang berisi lebih banyak kode yang dikompilasi AOT, dibandingkan dengan kode yang dihasilkan selama Metode yang tidak dikompilasi AOT masih ditafsirkan atau dikompilasi JIT. ART memperbarui instalasi profil, berdasarkan eksekusi, dan profil tersebut kemudian akan diambil oleh proses daemon kompilasi berikutnya.

ART terdiri dari kompiler (alat dex2oat ) dan runtime ( libart.so ) yang dimuat saat boot. Alat dex2oat mengambil file APK dan menghasilkan satu atau lebih file artefak kompilasi yang dimuat waktu proses. Jumlah file, ekstensi, dan namanya dapat berubah di seluruh rilis, namun mulai rilis Android 8, file berikut dibuat:

  • .vdex : berisi beberapa metadata tambahan untuk mempercepat verifikasi, terkadang bersama dengan kode DEX APK yang tidak terkompresi.
  • .odex : berisi kode yang dikompilasi AOT untuk metode di APK.
  • .art (optional) berisi representasi internal ART dari beberapa string dan kelas yang tercantum dalam APK, yang digunakan untuk mempercepat permulaan aplikasi.

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: cara ART mengkompilasi dan menjalankan aplikasi di perangkat.

Filter kompiler

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

  • verify : hanya menjalankan verifikasi kode DEX (tidak ada kompilasi AOT).
  • quicken : (hingga Android 11) menjalankan verifikasi kode DEX dan mengoptimalkan beberapa instruksi DEX untuk mendapatkan performa juru bahasa yang lebih baik.
  • speed : Jalankan verifikasi kode DEX dan kompilasi AOT semua metode.
  • speed-profile : Jalankan verifikasi kode DEX dan metode kompilasi AOT yang tercantum dalam file profil.

Konfigurasi ROM sistem

Pustaka dan aplikasi prainstal dikompilasi AOT saat image sistem sedang dibuat. Proses ini disebut dexpreopt . File yang dikompilasi tersebut dapat digunakan selama semua dependensi tetap tidak berubah, khususnya jalur kelas boot.

Catatan: Jika perangkat menerima pembaruan modul sistem maka jalur kelas boot kemungkinan besar akan berubah pada pembaruan berikutnya, yang membuat semua file dexpreopt menjadi basi dan tidak dapat digunakan.

Ada sejumlah opsi build ART yang tersedia untuk mengonfigurasi dexpreopt. Cara Anda mengonfigurasi opsi ini bergantung pada ruang penyimpanan yang tersedia untuk image sistem dan jumlah aplikasi pra-instal. JAR/APK yang dikompilasi ke dalam ROM sistem dapat dibagi dalam empat kategori:

  • Kode jalur kelas boot: dikompilasi dengan filter kompiler speed-profile 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 selanjutnya dalam dokumen ini):
    • (Android 14 dan lebih tinggi) Dikompilasi dengan filter compiler speed-profile secara default, atau dikompilasi dengan filter compiler speed jika profil tidak disediakan.
    • (Android 13 dan lebih rendah) Dikompilasi dengan filter kompiler speed secara default.
    Dapat dikonfigurasi melalui PRODUCT_SYSTEM_SERVER_COMPILER_FILTER (lihat nanti di dokumen ini).
  • Aplikasi inti khusus produk (lihat PRODUCT_DEXPREOPT_SPEED_APPS nanti di dokumen ini): dikompilasi dengan filter kompiler speed secara default.
  • Semua aplikasi lain: dikompilasi dengan filter kompiler speed-profile secara default, atau dikompilasi dengan filter kompiler verify jika profil tidak disediakan.

    Dapat dikonfigurasi melalui PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER (lihat nanti di dokumen ini).

Opsi Makefile

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

  • DONT_DEXPREOPT_PREBUILTS (Android 5 dan lebih tinggi)
  • Mengaktifkan DONT_DEXPREOPT_PREBUILTS mencegah prebuilt agar tidak di-dexpreopt. Ini adalah aplikasi yang include $(BUILD_PREBUILT) yang ditentukan di Android.mk . Melewatkan dexpreopt aplikasi bawaan yang kemungkinan akan diperbarui melalui Google Play akan menghemat ruang di image sistem namun menambah waktu booting pertama. Perhatikan bahwa opsi ini tidak berpengaruh pada aplikasi bawaan yang ditentukan di Android.bp .

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

  • WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY (sejak Android 8 MR1)
  • Mengaktifkan WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY hanya akan memilih jalur kelas boot dan jar server sistem.

  • LOCAL_DEX_PREOPT
  • Dexpreopt juga dapat diaktifkan atau dinonaktifkan berdasarkan aplikasi individual dengan menentukan opsi LOCAL_DEX_PREOPT dalam definisi modul. Hal ini berguna untuk menonaktifkan dexpreopt aplikasi yang mungkin segera menerima pembaruan Google Play karena pembaruan akan membuat kode dexpreopt di image sistem menjadi usang. Hal ini juga berguna untuk menghemat ruang pada OTA pemutakhiran versi utama 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 menghapus file classes.dex dari file APK atau JAR. Biasanya file ini dihapus karena tidak diperlukan lagi setelah dexpreopt, namun opsi terakhir ini diperlukan agar tanda tangan APK pihak ketiga tetap valid.

  • PRODUCT_DEX_PREOPT_BOOT_FLAGS
  • Melewati opsi ke dex2oat untuk mengontrol bagaimana image boot dikompilasi. Ini dapat digunakan untuk menentukan daftar kelas gambar yang disesuaikan, daftar kelas yang dikompilasi, dan filter kompiler.

  • PRODUCT_DEX_PREOPT_DEFAULT_FLAGS
  • Meneruskan opsi ke dex2oat untuk mengontrol bagaimana segala sesuatu selain image boot dikompilasi.

  • PRODUCT_DEX_PREOPT_MODULE_CONFIGS
  • Memberikan kemampuan untuk meneruskan opsi dex2oat untuk modul dan konfigurasi produk tertentu. Ini diatur dalam file device.mk produk dengan $(call add-product-dex-preopt-module-config,<modules>,<option>) di mana <modules> adalah daftar nama LOCAL_MODULE dan LOCAL_PACKAGE untuk file JAR dan APK , masing-masing.

  • PRODUCT_DEXPREOPT_SPEED_APPS (sejak Android 8)
  • Daftar aplikasi yang telah diidentifikasi sebagai inti produk dan ingin dikompilasi dengan filter kompiler speed . Misalnya, aplikasi persisten seperti SystemUI mendapat kesempatan untuk menggunakan kompilasi yang dipandu profil hanya pada reboot berikutnya, jadi mungkin lebih baik bagi produk untuk selalu membuat aplikasi ini dikompilasi AOT.

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

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

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

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

    Di Android 7.0, kompilasi PIC diaktifkan secara default.

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

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

    • (Android 14 dan lebih tinggi) Jika tidak ditentukan, filter compiler speed-profile akan digunakan, atau filter compiler speed digunakan jika profil tidak disediakan.
    • (Android 13 dan lebih rendah) Jika tidak ditentukan, filter kompiler speed akan digunakan.
    • Jika disetel ke speed , filter kompiler speed akan digunakan.
    • Jika disetel ke speed-profile , filter kompiler speed-profile akan digunakan, atau filter kompiler verify digunakan jika profil tidak disediakan.
    • Jika disetel ke verify , filter kompiler 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 kompiler yang ditentukan oleh PRODUCT_SYSTEM_SERVER_COMPILER_FILTER

    • (Wajib) PRODUCT_SYSTEM_SERVER_JARS : Daftar JAR classpath server sistem pada platform (yaitu, sebagai bagian dari SYSTEMSERVERCLASSPATH ). Menambahkan JAR classpath server sistem ke daftar ini diperlukan. Gagal menambahkan JAR classpath server sistem ke daftar mengakibatkan JAR tersebut tidak dimuat.
    • (Wajib) PRODUCT_APEX_SYSTEM_SERVER_JARS : Daftar JAR classpath server sistem yang dikirimkan dengan APEX (yaitu, sebagai bagian dari SYSTEMSERVERCLASSPATH ). Formatnya adalah <apex name>:<jar name> . Menambahkan JAR classpath server sistem APEX ke daftar ini diperlukan. Gagal menambahkan JAR classpath server sistem APEX ke daftar ini mengakibatkan JAR tersebut tidak dimuat.
    • (Opsional, Android 13 dan lebih rendah) PRODUCT_STANDALONE_SYSTEM_SERVER_JARS : Daftar JAR yang dimuat server sistem secara dinamis menggunakan classloader terpisah (melalui SystemServiceManager.startServiceFromJar ). Menambahkan JAR server sistem mandiri ke daftar ini tidak diperlukan tetapi sangat disarankan karena ini membuat JAR terkompilasi dan karenanya memiliki kinerja runtime yang 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 (yaitu, melalui SystemServiceManager.startServiceFromJar atau dinyatakan sebagai <apex-system-service> ). Formatnya adalah <apex name>:<jar name> . Menambahkan JAR server sistem APEX mandiri ke daftar ini diperlukan. Gagal menambahkan JAR server sistem APEX mandiri ke daftar ini mengakibatkan kegagalan boot.

    Konfigurasi jalur kelas boot

    Daftar kelas yang dimuat sebelumnya adalah daftar kelas yang diinisialisasi Zygote saat startup. Hal ini menyelamatkan setiap aplikasi dari keharusan menjalankan inisialisasi kelas ini secara terpisah, sehingga memungkinkan aplikasi untuk memulai lebih cepat dan berbagi halaman di memori. File daftar kelas yang dimuat sebelumnya terletak di frameworks/base/config/preloaded-classes secara default, dan berisi daftar yang disesuaikan untuk penggunaan telepon pada umumnya. Ini mungkin berbeda untuk perangkat lain seperti perangkat yang dapat dikenakan, dan harus disesuaikan. Berhati-hatilah saat menyetel ini; menambahkan terlalu banyak kelas akan membuang-buang memori ketika kelas yang tidak digunakan dimuat. Menambahkan terlalu sedikit kelas memaksa setiap aplikasi harus memiliki salinannya sendiri, yang lagi-lagi membuang-buang memori.

    Contoh penggunaan (di device.mk produk.mk ):

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

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

    Konfigurasi waktu proses

    pilihan JIT

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

    • dalvik.vm.usejit : Apakah JIT diaktifkan atau tidak.
    • dalvik.vm.jitinitialsize (default 64K): Kapasitas awal cache kode. Cache kode akan di-GC secara berkala dan ditingkatkan jika diperlukan.
    • dalvik.vm.jitmaxsize (default 64M): Kapasitas maksimum cache kode.
    • dalvik.vm.jitthreshold (default 10000): Ambang batas yang harus dilewati penghitung "panas" suatu metode agar metode dapat dikompilasi JIT. Penghitung "panas" adalah metrik internal waktu proses. Ini mencakup jumlah panggilan, cabang terbelakang, dan faktor lainnya.
    • dalvik.vm.usejitprofiles (hingga Android 13): Apakah profil JIT diaktifkan atau tidak; ini dapat digunakan meskipun dalvik.vm.usejit salah. Perhatikan bahwa jika ini salah, speed-profile filter kompiler tidak mengkompilasi AOT metode apa pun dan setara dengan verify . Sejak Android 14, profil JIT selalu diaktifkan dan tidak dapat dinonaktifkan.
    • dalvik.vm.jitprithreadweight (default pada dalvik.vm.jitthreshold / 20): Bobot "sampel" JIT (lihat jitthreshold) untuk thread UI aplikasi. Gunakan untuk mempercepat kompilasi metode yang secara langsung memengaruhi pengalaman pengguna saat berinteraksi dengan aplikasi.
    • dalvik.vm.jittransitionweight (default pada dalvik.vm.jitthreshold / 10): Bobot pemanggilan metode yang bertransisi antara kode kompilasi dan interpreter. Hal ini membantu memastikan metode yang terlibat dikompilasi untuk meminimalkan transisi (yang mahal).

    Pilihan Dex2oat

    Opsi ini memengaruhi kompilasi pada perangkat (alias, dexopt ), dan beberapa di antaranya juga memengaruhi dexpreopt, sedangkan opsi yang dibahas di bagian konfigurasi ROM Sistem di atas hanya memengaruhi dexpreopt.

    Opsi untuk mengontrol penggunaan sumber daya:

    • dalvik.vm.image-dex2oat-threads / dalvik.vm.image-dex2oat-cpu-set (hingga Android 11): Jumlah thread dan kumpulan inti CPU (lihat di bawah) yang akan digunakan untuk image boot.
    • dalvik.vm.boot-dex2oat-threads / dalvik.vm.boot-dex2oat-cpu-set :
      • (hingga Android 11) Jumlah thread dan kumpulan inti CPU (lihat di bawah) yang akan digunakan selama waktu booting untuk semua hal selain image booting.
      • (sejak Android 12) Jumlah thread dan kumpulan inti CPU (lihat di bawah) yang akan digunakan selama waktu booting untuk semuanya, termasuk image booting.
        • Khususnya, sejak Android 14, ini sesuai dengan kelas 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 kumpulan inti CPU (lihat di bawah) yang digunakan untuk memulihkan dari cadangan cloud.
      • (sejak Android 14) Jumlah thread dan kumpulan inti CPU (lihat di bawah) yang akan digunakan untuk segala hal yang lebih sensitif terhadap latensi dibandingkan biasanya, termasuk memulihkan dari cadangan cloud.
        • 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 kumpulan inti CPU (lihat di bawah) yang akan digunakan di latar belakang.
      • Secara khusus, ini sesuai dengan kelas prioritas PRIORITY_BACKGROUND di Layanan ART.
    • dalvik.vm.dex2oat-threads / dalvik.vm.dex2oat-cpu-set : Jumlah thread dan kumpulan inti CPU yang akan digunakan untuk hal lainnya.

    Satu set inti CPU harus ditentukan sebagai daftar id CPU yang dipisahkan koma. Misalnya untuk berjalan di dex2oat pada inti CPU 0-3, atur:

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

    Saat mengatur properti afinitas CPU, kami menyarankan untuk mencocokkan properti yang sesuai untuk jumlah thread dex2oat agar sesuai dengan jumlah CPU yang dipilih untuk menghindari pertikaian memori dan I/O yang tidak diperlukan:

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

    Selain properti sistem di atas, Anda juga dapat menggunakan profil tugas untuk mengontrol penggunaan sumber daya dex2oat (lihat Lapisan Abstraksi Cgroup ).

    Profil tugas yang didukung adalah:

    • Dex2OatBackground (sejak Android 14) (secara default mewarisi Dex2OatBootComplete ): Mengontrol sumber daya yang akan digunakan di latar belakang.
      • Secara khusus, ini sesuai dengan kelas prioritas PRIORITY_BACKGROUND di Layanan ART.
    • Dex2OatBootComplete :
      • (hingga Android 13) Mengontrol sumber daya yang akan digunakan untuk semuanya setelah boot.
      • (sejak Android 14) Mengontrol sumber daya yang akan digunakan untuk semuanya setelah boot dan bukan di latar belakang.
        • Secara khusus, ini sesuai dengan kelas prioritas PRIORITY_INTERACTIVE_FAST dan PRIORITY_INTERACTIVE di Layanan ART.

    Ketika properti sistem dan profil tugas ditentukan, keduanya akan berlaku.

    Opsi untuk mengontrol ukuran heap:

    • dalvik.vm.image-dex2oat-Xms : Ukuran heap awal untuk image boot.
    • dalvik.vm.image-dex2oat-Xmx : Ukuran heap maksimum untuk image boot.
    • 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 aplikasi apa yang dapat dikompilasi.

    Opsi untuk mengontrol filter kompiler:

    • dalvik.vm.image-dex2oat-filter (hingga Android 11): Filter compiler untuk image boot. Sejak Android 12, filter compiler untuk image booting selalu bersifat 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 kompiler untuk yang lainnya.
    • pm.dexopt.<reason> (sejak Android 7): Filter kompiler untuk yang lainnya. Lihat Konfigurasi Layanan ART untuk Android 14 dan yang lebih baru, atau Konfigurasi Manajer Paket untuk Android 13 dan yang lebih lama.

    Opsi lain untuk mengontrol kompilasi segala sesuatu selain gambar boot:

    • 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): Memungkinkan penggunaan file swap untuk dex2oat. Hal ini dapat membantu menghindari kerusakan kehabisan memori. Perhatikan bahwa meskipun opsi ini diaktifkan, dex2oat hanya akan menggunakan file swap dalam kondisi tertentu, seperti ketika jumlah file dex banyak, dan kondisi tersebut dapat berubah.
    • dalvik.vm.ps-min-first-save-ms (sejak Android 12): Waktu tunggu minimum sebelum runtime menghasilkan profil aplikasi, 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, kelas 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 ambang batas minimal 50 kelas baru selain ambang persentase, dan ini tidak dapat dikonfigurasi.
    • dalvik.vm.bgdexopt.new-methods-percent (sejak Android 12) (default: 20): Persentase minimum, antara 0 dan 100, metode baru dalam profil untuk memicu kompilasi ulang. Hanya berlaku untuk kompilasi yang dipandu profil ( speed-profile ), biasanya selama dexopt latar belakang. Perhatikan bahwa ada juga ambang batas minimal 100 metode baru selain ambang persentase, dan ini tidak dapat dikonfigurasi.
    • dalvik.vm.dex2oat-max-image-block-size (sejak Android 10) (default: 524288) Ukuran blok padat maksimum untuk gambar terkompresi. Gambar besar dipecah menjadi sekumpulan blok padat sehingga tidak ada blok yang lebih besar dari ukuran maksimum.
    • dalvik.vm.dex2oat-resolve-startup-strings (sejak Android 10) (default: true) Jika benar, menyebabkan dex2oat menyelesaikan semua const-string yang direferensikan dari metode yang ditandai sebagai "startup" di profil.
    • debug.generate-debug-info (default: false) Apakah akan menghasilkan informasi debug untuk debugging asli atau tidak, seperti informasi pelepasan tumpukan, simbol ELF, dan bagian katai.
    • dalvik.vm.dex2oat-minidebuginfo (sejak Android 9) (default: true) Apakah akan menghasilkan jumlah minimal informasi debug terkompresi LZMA yang diperlukan untuk mencetak penelusuran balik.

    Opsi Layanan SENI

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

    Opsi manajer paket

    Sebelum Android 14, kompilasi AOT di perangkat untuk aplikasi (alias dexopt) ditangani oleh pengelola paket. Untuk informasi tentang mengonfigurasi manajer paket untuk dexopt, lihat Konfigurasi Manajer Paket .

    Konfigurasi khusus A/B

    Konfigurasi ROM

    Mulai Android 7.0, perangkat dapat menggunakan dua partisi sistem untuk mengaktifkan pembaruan sistem A/B . Untuk menghemat ukuran partisi sistem, file yang sudah dipilih sebelumnya dapat diinstal di partisi sistem kedua yang tidak digunakan. Mereka kemudian disalin ke partisi data pada boot 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 jalur kelas boot, kode server sistem, dan aplikasi inti khusus produk selalu dikompilasi ke partisi sistem. Secara default, semua aplikasi lain dikompilasi ke partisi sistem kedua yang tidak digunakan. Hal ini dapat dikontrol dengan SYSTEM_OTHER_ODEX_FILTER , yang secara default memiliki nilai:

    SYSTEM_OTHER_ODEX_FILTER ?= app/% priv-app/%
    

    Latar belakang deksopt OTA

    Pada perangkat berkemampuan A/B, aplikasi dapat dikompilasi di latar belakang sebelum reboot dengan image sistem baru. Lihat Kompilasi aplikasi di latar belakang untuk secara opsional menyertakan skrip kompilasi dan biner dalam image sistem. Filter kompilasi yang digunakan untuk kompilasi ini dikontrol dengan:

    pm.dexopt.ab-ota=speed-profile
    

    Kami merekomendasikan penggunaan speed-profile untuk memanfaatkan kompilasi terpandu profil dan menghemat 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 disetel dan thread JDWP dibuat hanya untuk aplikasi yang dapat di-debug. Untuk mengaktifkan thread JDWP bagi aplikasi yang dapat di-debug dan tidak dapat di-debug, setel persist.debug.dalvik.vm.jdwp.enabled ke 1 . Perangkat harus di-boot ulang agar perubahan pada properti dapat diterapkan.

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

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