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:
- 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. - 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).
- Saat perangkat tidak ada aktivitas dan mengisi daya, daemon kompilasi berjalan untuk mengompilasi ulang aplikasi berdasarkan profil gabungan yang dihasilkan selama beberapa proses pertama.
- 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:
- Konfigurasi ROM sistem: Kode apa yang dikompilasi AOT saat membangun image sistem.
- 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 compilerspeed
jika profil ini tidak tersedia. - (Android 13 dan yang lebih lama) Dikompilasi dengan
speed
filter compiler secara default.
PRODUCT_SYSTEM_SERVER_COMPILER_FILTER
(lihat nanti dalam dokumen). - (Android 14 dan yang lebih baru) Dikompilasi dengan
- Aplikasi inti khusus produk (lihat
PRODUCT_DEXPREOPT_SPEED_APPS
nanti dalam dokumen): dikompilasi dengan filter compilerspeed
secara default. - Semua aplikasi lain: dikompilasi dengan filter compiler
speed-profile
secara default, atau dikompilasi dengan filter compilerverify
jika profil tidak disediakan.Dapat dikonfigurasi melalui
PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER
(lihat nanti dalam dokumen).
Opsi makefile
WITH_DEXPREOPT
DONT_DEXPREOPT_PREBUILTS
(Android 5 dan yang lebih baru)PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER
(Android 9) dan yang lebih tinggi)WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY
(sejak Android 8 MR1)LOCAL_DEX_PREOPT
PRODUCT_DEX_PREOPT_BOOT_FLAGS
PRODUCT_DEX_PREOPT_DEFAULT_FLAGS
PRODUCT_DEX_PREOPT_MODULE_CONFIGS
PRODUCT_DEXPREOPT_SPEED_APPS
(sejak Android 8)PRODUCT_SYSTEM_SERVER_APPS
(sejak Android 8)PRODUCT_ART_TARGET_INCLUDE_DEBUG_BUILD
(sejak Android 8)WITH_DEXPREOPT_PIC
(hingga Android 7)WITH_DEXPREOPT_BOOT_IMG_ONLY
(hingga Android 7 MR1)PRODUCT_SYSTEM_SERVER_COMPILER_FILTER
- (Android 14 dan yang lebih baru) Jika tidak ditentukan,
speed-profile
filter compiler digunakan, atau filter compilerspeed
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 compilerspeed
akan digunakan. - Jika ditetapkan ke
speed-profile
, filter compilerspeed-profile
akan digunakan, atau filter compilerverify
digunakan jika profil tidak diberikan. - Jika ditetapkan ke
verify
, filter compilerverify
akan digunakan. PRODUCT_SYSTEM_SERVER_JARS
,PRODUCT_APEX_SYSTEM_SERVER_JARS
,PRODUCT_STANDALONE_SYSTEM_SERVER_JARS
,PRODUCT_APEX_STANDALONE_SYSTEM_SERVER_JARS
- (Wajib)
PRODUCT_SYSTEM_SERVER_JARS
: Daftar JAR classpath server sistem di platform (yaitu, sebagai bagian dariSYSTEMSERVERCLASSPATH
). 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 dariSYSTEMSERVERCLASSPATH
). 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 (melaluiSystemServiceManager.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, melaluiSystemServiceManager.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.
Apakah dex2oat
dipanggil pada kode DEX yang diinstal pada image sistem. Diaktifkan secara default.
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
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.
Mengaktifkan dexpreopt WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY
hanya akan
classpath boot, dan jar server sistem.
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.
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.
Meneruskan opsi ke dex2oat
untuk mengontrol bagaimana segala sesuatunya selain
image booting dikompilasi.
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.
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.
Daftar aplikasi yang dimuat oleh server sistem. Aplikasi ini
dikompilasi secara default dengan filter compiler speed
.
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
.
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.
Opsi ini diganti dengan WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY
yang juga menerapkan JAR server sistem.
Opsi ini menentukan filter compiler untuk server sistem.
Berikut ini adalah daftar JAR yang dimuat oleh server sistem. JAR dikompilasi dengan
filter compiler ditentukan oleh PRODUCT_SYSTEM_SERVER_COMPILER_FILTER
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 meskipundalvik.vm.usejit
salah. Perlu diketahui bahwa jika nilai ini salah, filter compilerspeed-profile
akan melakukan bukan mengompilasi AOT metode apa pun dan setara denganverify
. Sejak Di Android 14, profil JIT selalu diaktifkan dan tidak dapat dinonaktifkan.dalvik.vm.jitprithreadweight
(default kedalvik.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 kedalvik.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.
- Secara khusus, sejak Android 14, ini sesuai dengan
class prioritas
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.
- Secara khusus, ini sesuai dengan kelas prioritas
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.
- Secara khusus, ini sesuai dengan class prioritas
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 mewarisiDex2OatBootComplete
): Mengontrol resource yang akan digunakan di latar belakang.- Secara khusus, ini sesuai dengan class prioritas
PRIORITY_BACKGROUND
di Layanan ART.
- Secara khusus, ini sesuai dengan class prioritas
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
danPRIORITY_INTERACTIVE
dalam ART Layanan.
- Secara khusus, ini sesuai dengan kelas prioritas
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 selaluspeed-profile
dan tidak dapat diubah.dalvik.vm.systemservercompilerfilter
(sejak Android 13): Filter compiler untuk server sistem. LihatPRODUCT_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:
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.adb shell setprop persist.debug.dalvik.vm.jdwp.enabled 1
adb reboot