Halaman ini membahas cara mengonfigurasi Android runtime (ART) dan opsi kompilasi-nya. Topik
yang dibahas di sini mencakup konfigurasi prakompilasi image sistem, opsi
kompilasi dex2oat
, dan cara mengorbankan ruang partisi sistem, ruang partisi data, dan
performa.
Lihat ART dan Dalvik serta Format Dalvik yang dapat dieksekusi untuk digunakan dengan ART. Lihat Memverifikasi Perilaku Aplikasi di Android Runtime (ART) untuk memastikan aplikasi Anda berfungsi dengan benar.
Cara kerja ART
ART menggunakan kompilasi mendahului waktu (AOT), dan mulai Android 7, ART menggunakan kombinasi campuran kompilasi AOT, kompilasi tepat waktu (JIT), dan interpretasi, dan kompilasi AOT dapat dipandu profil. Kombinasi semua mode eksekusi ini dapat dikonfigurasi dan akan dibahas di bagian ini. Sebagai contoh, perangkat Pixel dikonfigurasi untuk berfungsi dalam alur berikut:
- Aplikasi awalnya diinstal dengan file metadata dex (
.dm
) yang didistribusikan oleh Play Store, yang berisi profil cloud. ART AOT mengompilasi metode yang tercantum dalam profil cloud. Atau, jika aplikasi diinstal tanpa file metadata dex, kompilasi AOT tidak dilakukan. - Beberapa kali pertama aplikasi berjalan, metode yang tidak dikompilasi AOT akan ditafsirkan. Di antara metode yang ditafsirkan, metode yang sering dieksekusi kemudian dikompilasi dengan JIT. ART membuat profil lokal berdasarkan eksekusi dan menggabungkannya dengan profil cloud (jika ada profil cloud).
- Saat perangkat tidak ada aktivitas dan sedang diisi dayanya, daemon kompilasi akan berjalan untuk mengompilasi ulang aplikasi berdasarkan profil gabungan yang dihasilkan selama beberapa kali pengoperasian pertama.
- Pada pengoperasian aplikasi berikutnya, ART menggunakan artefak yang dihasilkan oleh daemon kompilasi, yang berisi lebih banyak kode yang dikompilasi AOT, dibandingkan dengan yang dihasilkan selama Metode yang tidak dikompilasi AOT masih diinterpretasikan atau dikompilasi JIT. ART memperbarui penginstalan profil, berdasarkan eksekusi, dan profil tersebut kemudian akan diambil oleh daemon kompilasi yang dijalankan berikutnya.
ART terdiri dari compiler (alat dex2oat
) dan runtime
(libart.so
) yang dimuat selama booting. Alat
dex2oat
mengambil file APK dan menghasilkan satu atau beberapa
file artefak kompilasi yang dimuat runtime. Jumlah file, ekstensi, dan namanya dapat berubah di seluruh rilis, tetapi mulai dari
rilis Android 8, file ini dibuat:
.vdex
: berisi beberapa metadata tambahan untuk mempercepat verifikasi, terkadang bersama kode DEX APK yang tidak dikompresi..odex
: berisi kode yang dikompilasi AOT untuk metode dalam APK..art (optional)
berisi representasi internal ART dari beberapa string dan class yang tercantum dalam APK, yang digunakan untuk mempercepat peluncuran aplikasi.
Opsi kompilasi
Ada dua kategori opsi kompilasi untuk ART:
- Konfigurasi ROM sistem: Kode apa yang dikompilasi AOT saat mem-build image sistem.
- Konfigurasi runtime: cara ART mengompilasi dan menjalankan aplikasi di perangkat.
Filter compiler
Salah satu opsi ART inti untuk mengonfigurasi kedua kategori ini adalah filter
compiler. Filter compiler mendorong cara ART mengompilasi 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 (tanpa kompilasi AOT).quicken
: (Android 11 atau yang lebih lama) Menjalankan verifikasi kode DEX dan mengoptimalkan beberapa petunjuk DEX untuk mendapatkan performa penafsir yang lebih baik.speed
: Menjalankan verifikasi kode DEX dan mengompilasi semua metode dengan AOT. Tidak mengoptimalkan pemuatan class untuk class apa pun.speed-profile
: Menjalankan verifikasi kode DEX, metode kompilasi AOT yang tercantum dalam profil, dan mengoptimalkan pemuatan class untuk class dalam profil.
Konfigurasi ROM sistem
Library dan aplikasi yang diinstal sebelumnya dikompilasi AOT saat image sistem sedang di-build. Proses ini disebut dexpreopt. File yang dikompilasi tersebut dapat digunakan selama semua dependensi tetap tidak berubah, terutama classpath booting.
Catatan: Jika perangkat menggunakan update modul sistem, classpath booting kemungkinan besar akan berubah pada update berikutnya, yang membuat semua file dexpreopt tidak berlaku 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 yang diprainstal. JAR/APK yang dikompilasi ke dalam ROM sistem dapat dibagi menjadi empat kategori:
- Kode classpath booting: dikompilasi dengan filter compiler
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
nanti dalam dokumen ini):- (Android 14 dan yang lebih baru) Dikompilasi dengan filter compiler
speed-profile
secara default, atau dikompilasi dengan filter compilerspeed
jika profil tidak disediakan. - (Android 13 dan yang lebih lama) Dikompilasi dengan filter compiler
speed
secara default.
PRODUCT_SYSTEM_SERVER_COMPILER_FILTER
(lihat nanti dalam dokumen ini). - (Android 14 dan yang lebih baru) Dikompilasi dengan filter compiler
- Aplikasi inti khusus produk (lihat
PRODUCT_DEXPREOPT_SPEED_APPS
nanti dalam dokumen ini): dikompilasi dengan filter compilerspeed
secara default. - Semua aplikasi lainnya: 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 ini).
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 tinggi) Jika tidak ditentukan, filter compiler
speed-profile
akan digunakan, atau filter compilerspeed
akan digunakan jika profil tidak disediakan. - (Android 13 dan yang lebih lama) Jika tidak ditentukan, filter compiler
speed
akan digunakan. - Jika disetel ke
speed
, filter compilerspeed
akan digunakan. - Jika ditetapkan ke
speed-profile
, filter compilerspeed-profile
akan digunakan, atau filter compilerverify
akan digunakan jika profil tidak disediakan. - Jika disetel 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 JAR classpath server sistem ke daftar ini diperlukan. Kegagalan menambahkan JAR classpath server sistem ke daftar akan menyebabkan JAR tersebut tidak dimuat. - (Wajib)
PRODUCT_APEX_SYSTEM_SERVER_JARS
: Daftar JAR classpath server sistem yang dikirimkan dengan APEX (yaitu, sebagai bagian dariSYSTEMSERVERCLASSPATH
). Formatnya adalah<apex name>:<jar name>
. Anda harus menambahkan JAR classpath server sistem APEX ke daftar ini. Kegagalan menambahkan JAR classpath server sistem APEX ke daftar ini akan 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 mandiri ke daftar ini tidak diperlukan, tetapi sangat direkomendasikan karena membuat JAR dikompilasi dan memiliki performa 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, melaluiSystemServiceManager.startServiceFromJar
atau dideklarasikan 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 akan menyebabkan kegagalan booting. dalvik.vm.usejit
: Apakah JIT diaktifkan atau tidak.dalvik.vm.jitinitialsize
(default 64K): Kapasitas awal cache kode. Cache kode akan melakukan GC secara berkala dan bertambah jika diperlukan.dalvik.vm.jitmaxsize
(default 64 M): Kapasitas maksimum cache kode.dalvik.vm.jitthreshold
(default 10000): Nilai minimum yang harus dilalui penghitung "hotness" metode agar metode dikompilasi JIT. Penghitung "hotness" adalah metrik internal untuk runtime. Hal ini mencakup jumlah panggilan, cabang mundur, dan faktor lainnya.dalvik.vm.usejitprofiles
(hingga Android 13): Apakah profil JIT diaktifkan atau tidak; ini dapat digunakan meskipundalvik.vm.usejit
bernilai salah. Perhatikan bahwa jika nilainya salah, filter compilerspeed-profile
tidak mengompilasi metode apa pun dengan AOT dan setara denganverify
. Sejak Android 14, profil JIT selalu diaktifkan dan tidak dapat dinonaktifkan.dalvik.vm.jitprithreadweight
(default kedalvik.vm.jitthreshold
/ 20): Bobot "sampel" JIT (lihat jitthreshold) untuk UI thread aplikasi. Gunakan untuk mempercepat kompilasi metode yang secara langsung memengaruhi pengalaman pengguna saat berinteraksi dengan aplikasi.dalvik.vm.jittransitionweight
(default kedalvik.vm.jitthreshold
/ 10): Bobot pemanggilan metode yang bertransisi antara kode kompilasi dan penafsir. Hal ini membantu memastikan metode yang terlibat dikompilasi untuk meminimalkan transisi (yang mahal).dalvik.vm.image-dex2oat-threads
/dalvik.vm.image-dex2oat-cpu-set
(hingga Android 11): Jumlah thread dan kumpulan 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 kumpulan core CPU (lihat di bawah) yang akan digunakan selama waktu booting untuk semua hal selain image booting.
- (sejak Android 12) Jumlah thread dan kumpulan core CPU
(lihat di bawah) yang akan digunakan selama waktu booting untuk semuanya, termasuk image booting.
- Secara khusus, sejak Android 14, hal ini sesuai dengan
class prioritas
PRIORITY_BOOT
di Layanan ART.
- Secara khusus, sejak Android 14, hal 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 kumpulan core CPU (lihat di bawah) yang akan digunakan untuk memulihkan dari pencadangan cloud.
- (sejak Android 14) Jumlah thread dan kumpulan core CPU
(lihat di bawah) yang akan digunakan untuk semua hal yang lebih sensitif terhadap latensi daripada biasanya, termasuk
memulihkan dari pencadangan cloud.
- Secara khusus, ini sesuai dengan class prioritas
PRIORITY_INTERACTIVE_FAST
di Layanan ART.
- Secara khusus, ini sesuai dengan class prioritas
dalvik.vm.background-dex2oat-threads
/dalvik.vm.background-dex2oat-cpu-set
(sejak Android 14): Jumlah thread dan kumpulan core CPU (lihat di bawah) 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
dalvik.vm.dex2oat-threads
/dalvik.vm.dex2oat-cpu-set
: Jumlah thread dan kumpulan core CPU yang akan digunakan untuk hal lainnya.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 semua hal setelah booting.
- (sejak Android 14) Mengontrol resource yang akan digunakan untuk semua
hal setelah booting dan bukan di latar belakang.
- Secara khusus, ini sesuai dengan class prioritas
PRIORITY_INTERACTIVE_FAST
danPRIORITY_INTERACTIVE
di Layanan ART.
- Secara khusus, ini sesuai dengan class prioritas
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 semua yang lain.dalvik.vm.dex2oat-Xmx
: Ukuran heap maksimum untuk semua yang lain.dalvik.vm.image-dex2oat-filter
(hingga Android 11): Filter compiler untuk image booting. Sejak Android 12, filter compiler 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 yang lain.pm.dexopt.<reason>
(sejak Android 7): Filter compiler untuk semua yang lain. Lihat Konfigurasi Layanan ART untuk Android 14 dan yang lebih baru, atau Konfigurasi Pengelola Paket untuk Android 13 dan yang lebih lama.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 file swap untuk dex2oat. Hal ini dapat membantu menghindari error kehabisan memori. Perhatikan bahwa meskipun opsi ini diaktifkan, dex2oat hanya akan menggunakan file swap dalam kondisi tertentu, seperti saat jumlah file dex besar, dan kondisinya dapat berubah.dalvik.vm.ps-min-first-save-ms
(sejak Android 12): Waktu minimum yang harus ditunggu sebelum runtime membuat profil aplikasi, saat pertama kali aplikasi diluncurkan.dalvik.vm.ps-min-save-period-ms
(sejak Android 12): Waktu minimum yang harus ditunggu 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, dari class baru dalam profil untuk memicu kompilasi ulang. Hanya berlaku untuk kompilasi terpandu profil (speed-profile
), biasanya selama dexopt latar belakang. Perhatikan bahwa ada juga nilai minimum 50 class baru selain nilai minimum persentase, dan nilai minimum ini tidak dapat dikonfigurasi.dalvik.vm.bgdexopt.new-methods-percent
(sejak Android 12) (default: 20): Persentase minimum, antara 0 dan 100, dari metode baru dalam profil untuk memicu kompilasi ulang. Hanya berlaku untuk kompilasi terpandu profil (speed-profile
), biasanya selama dexopt latar belakang. Perhatikan bahwa ada juga batas minimum 100 metode baru selain 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 serangkaian blok solid 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 me-resolve semua string const yang direferensikan dari metode yang ditandai sebagai "startup" di profil.debug.generate-debug-info
(default: false) Apakah akan membuat informasi debug untuk proses debug native atau tidak, seperti informasi penguraian stack, 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 pelacakan balik atau tidak.
Apakah dex2oat
dipanggil pada kode DEX yang diinstal di image sistem. Diaktifkan secara default.
Mengaktifkan DONT_DEXPREOPT_PREBUILTS
akan mencegah prebuilt
di-dexpreopt. Ini adalah aplikasi yang memiliki include $(BUILD_PREBUILT)
yang ditentukan dalam Android.mk
. Melewati
dexpreopt aplikasi bawaan yang cenderung diupdate melalui Google Play
akan menghemat ruang dalam image sistem, tetapi akan menambah waktu booting pertama. Perhatikan bahwa opsi ini tidak memengaruhi
aplikasi bawaan yang ditentukan di Android.bp
.
PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER
menentukan filter compiler default
untuk aplikasi dexpreopt. Aplikasi ini ditentukan dalam Android.bp
atau memiliki
include $(BUILD_PREBUILT)
yang ditentukan dalam Android.mk
. Jika tidak ditentukan,
nilai defaultnya adalah speed-profile
, atau verify
jika nilai tidak ditentukan
dan profil tidak diberikan.
Mengaktifkan dexpreopts WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY
hanya
classpath booting dan jar server sistem.
Dexpreopt juga dapat diaktifkan atau dinonaktifkan berdasarkan aplikasi individual dengan
menentukan opsi LOCAL_DEX_PREOPT
dalam definisi modul.
Hal ini dapat berguna untuk menonaktifkan dexpreopt aplikasi yang dapat langsung
menerima update Google Play karena update akan membuat kode dexpreopt
dalam image sistem menjadi usang. Hal ini juga berguna untuk menghemat ruang di OTA upgrade
versi utama karena pengguna mungkin sudah memiliki aplikasi versi 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 file classes.dex
dari file APK atau JAR. Biasanya file ini dihapus karena tidak
lagi diperlukan setelah dexpreopt, tetapi opsi terakhir ini diperlukan untuk
memungkinkan tanda tangan APK pihak ketiga tetap valid.
Meneruskan opsi ke dex2oat
untuk mengontrol cara kompilasi
gambar booting. Ini dapat digunakan untuk menentukan daftar class gambar yang disesuaikan, daftar class
yang dikompilasi, dan filter compiler.
Meneruskan opsi ke dex2oat
untuk mengontrol cara semua hal selain
image booting dikompilasi.
Memberikan kemampuan untuk meneruskan opsi dex2oat
untuk modul
dan konfigurasi produk tertentu. Nilai ini ditetapkan dalam file
device.mk
produk oleh $(call add-product-dex-preopt-module-config,<modules>,<option>)
dengan <modules>
adalah daftar nama LOCAL_MODULE
dan
LOCAL_PACKAGE
untuk file JAR dan APK.
Daftar aplikasi yang telah diidentifikasi sebagai inti produk dan
yang diinginkan untuk dikompilasi dengan filter compiler speed
. Misalnya, aplikasi persisten seperti SystemUI mendapatkan kesempatan untuk menggunakan
kompilasi terpandu profil hanya saat mulai ulang berikutnya, jadi sebaiknya
produk ini selalu mengompilasi aplikasi ini dengan AOT.
Daftar aplikasi yang dimuat oleh server sistem. Aplikasi ini
dikompilasi secara default dengan filter compiler speed
.
Apakah akan menyertakan versi debug ART di perangkat. Secara default, fitur ini
diaktifkan untuk build userdebug dan eng. Perilaku ini dapat diganti dengan menetapkan opsi secara eksplisit ke true
atau false
.
Secara default, perangkat menggunakan versi non-debug (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 bergantung posisi (PIC). Dengan demikian, kode
yang dikompilasi dari image tidak perlu dipindahkan dari
/system
ke /data/dalvik-cache
, sehingga menghemat ruang di partisi data.
Namun, ada sedikit dampak runtime karena tindakan ini 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.
Opsi ini diganti dengan WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY
yang juga melakukan pra-pemilihan JAR server sistem.
Opsi ini menentukan filter compiler untuk server sistem.
Berikut adalah daftar JAR yang dimuat oleh server sistem. JAR dikompilasi dengan
filter compiler yang ditentukan oleh PRODUCT_SYSTEM_SERVER_COMPILER_FILTER
Konfigurasi classpath booting
Daftar class yang dimuat sebelumnya adalah daftar class yang diinisialisasi Zygote saat
startup. Hal ini membuat setiap aplikasi tidak perlu menjalankan penginisialisasi class ini
secara terpisah, sehingga memungkinkan aplikasi dimulai lebih cepat dan berbagi halaman dalam memori. File daftar class yang dimuat sebelumnya terletak di frameworks/base/config/preloaded-classes
secara default, dan berisi daftar yang disesuaikan untuk penggunaan ponsel standar. Hal ini mungkin
berbeda untuk perangkat lain seperti perangkat wearable, dan harus disesuaikan
sesuai kebutuhan. Berhati-hatilah saat menyesuaikannya; menambahkan terlalu banyak class akan membuang
memori saat class yang tidak digunakan dimuat. Menambahkan terlalu sedikit class akan memaksa setiap aplikasi
harus memiliki salinannya sendiri, yang lagi-lagi, akan membuang memori.
Contoh penggunaan (di device.mk
produk):
PRODUCT_COPY_FILES += <filename>:system/etc/preloaded-classes
Catatan: Anda harus menempatkan baris ini sebelum
mewarisi makefile konfigurasi produk yang mendapatkan default dari
build/target/product/base.mk
.
Konfigurasi runtime
Opsi JIT
Opsi berikut memengaruhi rilis Android hanya jika compiler JIT ART tersedia.
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 hanya memengaruhi dexpreopt.
Opsi untuk mengontrol penggunaan resource:
Kumpulan core CPU harus ditentukan sebagai daftar ID CPU yang dipisahkan koma. Misalnya, untuk menjalankan di dex2oat pada core CPU 0-3, tetapkan:
dalvik.vm.dex2oat-cpu-set=0,1,2,3
Saat menetapkan properti afinitas CPU, sebaiknya cocokkan properti yang sesuai untuk jumlah thread dex2oat agar cocok dengan jumlah CPU yang dipilih untuk menghindari pertentangan memori dan I/O yang tidak perlu:
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 resource dex2oat (lihat Lapisan Abstraksi Cgroup).
Profil tugas yang didukung adalah:
Jika properti sistem dan profil tugas ditentukan, keduanya akan diterapkan.
Opsi untuk mengontrol ukuran heap:
Opsi yang mengontrol ukuran heap awal dan maksimum untuk
dex2oat
tidak boleh dikurangi karena dapat membatasi aplikasi
yang dapat dikompilasi.
Opsi untuk mengontrol filter compiler:
Opsi lain untuk mengontrol kompilasi semua hal selain image booting:
Opsi Layanan ART
Mulai Android 14, kompilasi AOT di perangkat untuk aplikasi (alias dexopt) ditangani oleh Layanan ART. Untuk informasi tentang cara mengonfigurasi Layanan ART, lihat Konfigurasi Layanan ART.Opsi pengelola paket
Sebelum Android 14, kompilasi AOT di perangkat untuk aplikasi (alias dexopt) ditangani oleh pengelola paket. Untuk informasi tentang cara mengonfigurasi pengelola paket untuk dexopt, lihat Konfigurasi Pengelola Paket.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 sebelumnya dapat diinstal di partisi sistem kedua yang tidak digunakan. Kemudian, file tersebut disalin ke partisi data saat booting pertama.
Contoh penggunaan (di 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 aplikasi core 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 memiliki nilai secara
default:
SYSTEM_OTHER_ODEX_FILTER ?= app/% priv-app/%
Dexopt OTA latar belakang
Pada perangkat yang mengaktifkan A/B, aplikasi dapat dikompilasi di latar belakang sebelum dimulai ulang dengan image sistem baru. Lihat Kompilasi aplikasi di latar belakang untuk menyertakan skrip kompilasi dan biner secara opsional dalam image sistem. Filter kompilasi yang digunakan untuk kompilasi ini dikontrol dengan:
pm.dexopt.ab-ota=speed-profile
Sebaiknya gunakan speed-profile
untuk memanfaatkan kompilasi yang
dibimbing profil dan menghemat penyimpanan.
Opsi JDWP
Pembuatan thread Java Debug Wire Protocol (JDWP) dalam 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
aplikasi yang dapat di-debug dan tidak dapat di-debug, tetapkan 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:
adb shell setprop persist.debug.dalvik.vm.jdwp.enabled 1
adb reboot