Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

Định cấu hình ART

Trang này thảo luận về cách cấu hình ART và các tùy chọn biên dịch của nó. Các chủ đề được đề cập ở đây bao gồm cấu hình biên dịch trước hình ảnh hệ thống, các tùy chọn biên dịch dex2oat và cách đánh đổi không gian phân vùng hệ thống, không gian phân vùng dữ liệu và hiệu suất.

Xem ART và Dalvik , định dạng Dalvik Executable và các trang còn lại trên source.android.com để làm việc với ART. Xem phần Xác minh hành vi ứng dụng trên Android Runtime (ART) để đảm bảo ứng dụng của bạn hoạt động bình thường.

Cách thức hoạt động của ART

ART sử dụng tính năng biên dịch trước thời gian (AOT) và bắt đầu từ Android 7.0 (Nougat hoặc N), nó sử dụng sự kết hợp kết hợp giữa biên dịch AOT, biên dịch kịp thời (JIT) và biên dịch hướng dẫn hồ sơ. Sự kết hợp của tất cả các chế độ biên dịch này có thể cấu hình được và sẽ được thảo luận trong phần này. Ví dụ: thiết bị Pixel được định cấu hình với quy trình biên dịch sau:

  1. Một ứng dụng được cài đặt ban đầu mà không có bất kỳ biên dịch AOT nào. Trong vài lần đầu tiên ứng dụng chạy, nó sẽ được thông dịch và các phương thức được thực thi thường xuyên sẽ được biên dịch JIT.
  2. Khi thiết bị ở chế độ chờ và đang sạc, một daemon biên dịch sẽ chạy tới mã AOT-biên dịch thường xuyên được sử dụng dựa trên cấu hình được tạo trong lần chạy đầu tiên.
  3. Lần khởi động lại ứng dụng tiếp theo sẽ sử dụng mã hướng dẫn hồ sơ và tránh thực hiện biên dịch JIT trong thời gian chạy đối với các phương thức đã được biên dịch. Các phương thức được biên dịch JIT trong quá trình chạy mới sẽ được thêm vào hồ sơ, sau đó sẽ được chọn bởi daemon biên dịch.

ART bao gồm một trình biên dịch (công cụ dex2oat ) và một thời gian chạy ( libart.so ) được tải để khởi động Zygote. Công cụ dex2oat lấy một tệp APK và tạo một hoặc nhiều tệp cấu phần biên dịch mà thời gian chạy sẽ tải. Số lượng tệp, phần mở rộng và tên của chúng có thể thay đổi giữa các bản phát hành, nhưng kể từ bản phát hành Android O, các tệp đang được tạo là:

  • .vdex : chứa mã DEX không nén của APK, với một số siêu dữ liệu bổ sung để tăng tốc độ xác minh.
  • .odex : chứa mã được biên dịch AOT cho các phương thức trong APK.
  • .art (optional) : chứa các biểu diễn nội bộ ART của một số chuỗi và lớp được liệt kê trong APK, được sử dụng để tăng tốc độ khởi động ứng dụng.

Tùy chọn biên dịch

Các lựa chọn biên dịch cho ART gồm hai loại:

  1. Cấu hình ROM hệ thống: mã nào được biên dịch AOT khi xây dựng hình ảnh hệ thống.
  2. Cấu hình thời gian chạy: cách ART biên dịch và chạy các ứng dụng trên thiết bị.

Một tùy chọn ART cốt lõi để định cấu hình hai danh mục này là bộ lọc trình biên dịch . Bộ lọc trình biên dịch thúc đẩy cách ART biên dịch mã DEX và là một tùy chọn được chuyển đến công cụ dex2oat . Bắt đầu từ Android O, có bốn bộ lọc được hỗ trợ chính thức:

  • verify : chỉ chạy xác minh mã DEX.
  • Quicken : chạy xác minh mã DEX và tối ưu hóa một số hướng dẫn DEX để có được hiệu suất thông dịch viên tốt hơn.
  • tốc độ : chạy xác minh mã DEX và biên dịch AOT tất cả các phương pháp.
  • hồ sơ tốc độ : chạy phương pháp xác minh mã DEX và biên dịch AOT được liệt kê trong tệp hồ sơ.

Cấu hình ROM hệ thống

Có một số tùy chọn xây dựng ART có sẵn để định cấu hình ROM hệ thống. Cách cấu hình các tùy chọn này phụ thuộc vào dung lượng lưu trữ có sẵn cho /system và số lượng ứng dụng được cài đặt sẵn. Các JAR / APK được biên dịch thành ROM hệ thống có thể được chia thành bốn loại:

  • Mã khởi động classpath: được biên dịch với bộ lọc trình biên dịch tốc độ theo mặc định.
  • Mã máy chủ hệ thống: được biên dịch với bộ lọc trình biên dịch tốc độ theo mặc định.
  • Các ứng dụng cốt lõi dành riêng cho sản phẩm: được biên dịch với bộ lọc trình biên dịch tốc độ theo mặc định.
  • Tất cả các ứng dụng khác: được biên dịch với bộ lọc trình biên dịch nhanh theo mặc định.

Tùy chọn Makefile

  • WITH_DEXPREOPT
  • dex2oat có được gọi trên mã DEX được cài đặt trên hình ảnh hệ thống hay không. Được bật theo mặc định.

  • DONT_DEXPREOPT_PREBUILTS (kể từ Android L)
  • Việc kích hoạt DONT_DEXPREOPT_PREBUILTS ngăn các bản dựng sẵn được tối ưu hóa trước. Đây là những ứng dụng đã include $(BUILD_PREBUILT) được chỉ định trong Android.mk của chúng, chẳng hạn như Gmail. Bỏ qua việc tối ưu hóa trước các ứng dụng dựng sẵn có khả năng được cập nhật qua Google Play giúp tiết kiệm /system nhưng làm tăng thêm thời gian khởi động đầu tiên.

  • PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER (kể từ Android 9)
  • PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER chỉ định bộ lọc trình biên dịch mặc định cho các ứng dụng được tối ưu hóa trước. Đây là những ứng dụng đã include $(BUILD_PREBUILT) được chỉ định trong Android.mk của chúng, chẳng hạn như Gmail. Nếu không được chỉ định, giá trị mặc định sẽ nhanh hơn.

  • WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY (mới trong Android O MR1)
  • Bật WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY chỉ tối ưu hóa trước các chum của hệ thống và classpath khởi động.

  • LOCAL_DEX_PREOPT
  • Tối ưu hóa trước cũng có thể được bật hoặc tắt trên cơ sở ứng dụng riêng lẻ bằng cách chỉ định tùy chọn LOCAL_DEX_PREOPT trong định nghĩa mô-đun. Điều này có thể hữu ích cho việc tắt tính năng tối ưu hóa trước của các ứng dụng có thể nhận ngay các bản cập nhật của Google Play vì các bản cập nhật sẽ làm cho mã được tối ưu hóa trước trong hình ảnh hệ thống bị lỗi thời. Điều này cũng hữu ích để tiết kiệm dung lượng trên các OTA nâng cấp phiên bản chính vì người dùng có thể đã có các phiên bản ứng dụng mới hơn trong phân vùng dữ liệu.

    LOCAL_DEX_PREOPT hỗ trợ các giá trị 'true' hoặc 'false' để bật hoặc tắt tính năng tối ưu hóa trước tương ứng. Ngoài ra, 'nostripping' có thể được chỉ định nếu việc tối ưu hóa trước không nên tách tệp classes.dex khỏi tệp APK hoặc JAR. Thông thường, tệp này sẽ bị loại bỏ vì nó không còn cần thiết sau khi tối ưu hóa trước, nhưng tùy chọn cuối cùng này là cần thiết để cho phép chữ ký APK của bên thứ ba vẫn còn hiệu lực.

  • PRODUCT_DEX_PREOPT_BOOT_FLAGS
  • Chuyển các tùy chọn cho dex2oat để kiểm soát cách hình ảnh khởi động được biên dịch. Nó có thể được sử dụng để chỉ định danh sách lớp ảnh tùy chỉnh, danh sách lớp đã biên dịch và bộ lọc trình biên dịch.

  • PRODUCT_DEX_PREOPT_DEFAULT_FLAGS
  • Chuyển các tùy chọn cho dex2oat để kiểm soát cách mọi thứ ngoài hình ảnh khởi động được biên dịch.

  • PRODUCT_DEX_PREOPT_MODULE_CONFIGS
  • Cung cấp khả năng vượt qua các tùy chọn dex2oat cho một mô-đun và cấu hình sản phẩm cụ thể. Nó được đặt trong tệp device.mk của sản phẩm bằng $(call add-product-dex-preopt-module-config,<modules>,<option>) trong đó <modules> là danh sách các tên LOCAL_MODULE và LOCAL_PACKAGE cho JAR và APK các tệp, tương ứng.

  • PRODUCT_DEXPREOPT_SPEED_APPS (New in Android O)
  • Danh sách các ứng dụng đã được xác định là cốt lõi của sản phẩm và được mong muốn biên dịch bằng bộ lọc trình biên dịch tốc độ . Ví dụ: các ứng dụng liên tục như SystemUI chỉ có cơ hội sử dụng tính năng biên dịch theo hướng dẫn cấu hình ở lần khởi động lại tiếp theo, vì vậy, sản phẩm có thể tốt hơn nếu các ứng dụng này luôn được biên dịch RẤT NHIỀU.

  • PRODUCT_SYSTEM_SERVER_APPS (New in Android O)
  • Danh sách các ứng dụng được tải bởi máy chủ hệ thống. Các ứng dụng này sẽ được biên dịch theo mặc định với bộ lọc trình biên dịch tốc độ .

  • PRODUCT_ART_TARGET_INCLUDE_DEBUG_BUILD(Post Android O)
  • Có bao gồm phiên bản gỡ lỗi của ART trên thiết bị hay không. Theo mặc định, tính năng này được kích hoạt cho các bản dựng của userdebug và eng. Hành vi có thể được ghi đè bằng cách đặt tùy chọn thành true hoặc false một cách rõ ràng.

    Theo mặc định, thiết bị sẽ sử dụng phiên bản không gỡ lỗi ( libart.so ). Để chuyển đổi, hãy đặt thuộc tính hệ thống persist.sys.dalvik.vm.lib.2 thành libartd.so .

  • WITH_DEXPREOPT_PIC (Removed in Android O)
  • Trong Android 5.1.0 đến Android 6.0.1, WITH_DEXPREOPT_PIC có thể được chỉ định để bật mã độc lập vị trí (PIC). Với điều này, mã đã biên dịch từ hình ảnh không cần phải di dời từ / system sang / data / dalvik-cache, tiết kiệm không gian trong phân vùng dữ liệu. Tuy nhiên, có một chút tác động về thời gian chạy vì nó vô hiệu hóa tính năng tối ưu hóa tận dụng mã phụ thuộc vào vị trí. Thông thường, các thiết bị muốn tiết kiệm dung lượng trong / dữ liệu nên kích hoạt biên dịch PIC.

    Trong Android 7.0, tính năng biên dịch PIC được bật theo mặc định.

  • WITH_DEXPREOPT_BOOT_IMG_ONLY (bị xóa trong Android O MR1)
  • Tùy chọn này đã được thay thế bằng WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY, tùy chọn này cũng mở trước các chum máy chủ hệ thống.

Cấu hình classpath khởi động

  • Danh sách các lớp được tải trước
  • Danh sách lớp được tải trước là danh sách các lớp mà hợp tử khởi tạo khi khởi động. Điều này giúp mỗi ứng dụng không phải chạy các trình khởi tạo lớp này riêng biệt, cho phép chúng khởi động nhanh hơn và chia sẻ các trang trong bộ nhớ. Tệp danh sách các lớp được tải trước được đặt tại frameworks/base/config/preloaded-classes theo mặc định và nó chứa một danh sách được điều chỉnh để sử dụng trên điện thoại thông thường. Điều này có thể khác đối với các thiết bị khác như thiết bị đeo được và phải được điều chỉnh cho phù hợp. Hãy cẩn thận khi điều chỉnh điều này; thêm quá nhiều lớp sẽ lãng phí bộ nhớ khi các lớp không sử dụng được tải. Thêm quá ít lớp buộc mỗi ứng dụng phải có bản sao của riêng nó, điều này lại gây lãng phí bộ nhớ.

    Ví dụ về cách sử dụng (trong product.mk của sản phẩm):

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

    Lưu ý: Dòng này phải được đặt trước khi kế thừa bất kỳ cấu hình cấu hình sản phẩm nào lấy cấu hình mặc định từ: build/target/product/base.mk

  • Danh sách lớp hình ảnh
  • Danh sách lớp hình ảnh là danh sách các lớp mà dex2oat khởi tạo trước thời hạn và lưu trữ trong tệp boot.art. Điều này cho phép hợp tử tải các kết quả này ra khỏi tệp boot.art khi khởi động thay vì chạy trình khởi tạo cho chính các lớp này trong quá trình tải trước. Một tính năng chính của điều này là các trang được tải từ hình ảnh và được chia sẻ giữa các quá trình có thể sạch sẽ, cho phép chúng được hoán đổi dễ dàng trong các tình huống bộ nhớ thấp. Trong L, theo mặc định, danh sách các lớp hình ảnh sử dụng cùng một danh sách với danh sách các lớp được tải trước. Bắt đầu sau L trong AOSP, danh sách các lớp hình ảnh tùy chỉnh có thể được chỉ định bằng cách sử dụng:

    PRODUCT_DEX_PREOPT_BOOT_FLAGS
    

    Ví dụ sử dụng (trong device.mk của sản phẩm):

    PRODUCT_DEX_PREOPT_BOOT_FLAGS += --image-classes=<filename>
    
  • Danh sách lớp học được tổng hợp
  • Trong AOSP sau L, một tập hợp con các lớp từ đường dẫn khởi động có thể được chỉ định để được biên dịch trong quá trình tối ưu hóa trước bằng cách sử dụng danh sách các lớp đã biên dịch. Đây có thể là một tùy chọn hữu ích cho các thiết bị rất eo hẹp về dung lượng và không thể chứa toàn bộ hình ảnh khởi động được tối ưu hóa trước. Tuy nhiên, các lớp ghi chú không được chỉ định bởi danh sách này sẽ không được biên dịch - thậm chí không có trên thiết bị - và phải được thông dịch, có khả năng ảnh hưởng đến hiệu suất thời gian chạy. Theo mặc định, dex2oat sẽ tìm kiếm danh sách các lớp đã biên dịch trong $ OUT / system / etc / biên dịch-lớp, vì vậy, một danh sách tùy chỉnh có thể được sao chép vào vị trí đó bởi device.mk. Một vị trí tệp cụ thể cũng có thể được chỉ định bằng cách sử dụng:

    PRODUCT_DEX_PREOPT_BOOT_FLAGS
    

    Ví dụ về cách sử dụng (trong device.mk của sản phẩm):

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

    Lưu ý: Dòng này phải được đặt trước khi kế thừa bất kỳ cấu hình cấu hình sản phẩm nào lấy cấu hình mặc định từ: build/target/product/base.mk

Cấu hình thời gian chạy

Tùy chọn jit

Các tùy chọn sau chỉ ảnh hưởng đến các bản phát hành Android khi có trình biên dịch ART JIT.

  • dalvik.vm.usejit: JIT có được bật hay không.
  • dalvik.vm.jitinitialsize (mặc định 64K): dung lượng ban đầu của bộ đệm mã. Bộ đệm mã sẽ thường xuyên GC và tăng lên nếu cần.
  • dalvik.vm.jitmaxsize (mặc định 64M): dung lượng tối đa của bộ đệm mã.
  • dalvik.vm.jitthreshold: (mặc định 10000) - Đây là ngưỡng mà bộ đếm "độ nóng" của một phương thức cần vượt qua để phương thức được biên dịch JIT. Bộ đếm "độ nóng" là một số liệu bên trong thời gian chạy. Nó bao gồm số lượng cuộc gọi, các nhánh lùi và các yếu tố khác.
  • dalvik.vm.usejitprofiles: có hay không kích hoạt cấu hình JIT; điều này có thể được sử dụng ngay cả khi dalvik.vm.usejit là sai. Lưu ý rằng nếu điều này là sai, cấu hình tốc độ bộ lọc trình biên dịch không AOT-biên dịch bất kỳ phương pháp nào và tương đương với quicken .
  • dalvik.vm.jitprithreadweight (mặc định là dalvik.vm.jitthreshold / 20) - Trọng lượng của các "mẫu" JIT (xem jitthreshold) cho chuỗi giao diện người dùng ứng dụng. Sử dụng để tăng tốc quá trình biên dịch các phương pháp ảnh hưởng trực tiếp đến trải nghiệm của người dùng khi tương tác với ứng dụng.
  • dalvik.vm.jittransitionweight: (mặc định là dalvik.vm.jitthreshold / 10) trọng số của lệnh gọi phương thức chuyển đổi giữa mã biên dịch và trình thông dịch. Điều này giúp đảm bảo các phương pháp liên quan được biên dịch để giảm thiểu quá trình chuyển đổi (tốn kém).

Tùy chọn trình quản lý gói

Kể từ Android 7.0, có một cách chung để chỉ định mức độ biên dịch / xác minh đã xảy ra ở các giai đoạn khác nhau. Các mức biên dịch có thể được cấu hình thông qua các thuộc tính hệ thống với các giá trị mặc định là:

  • pm.dexopt.install=speed-profile
  • Đây là bộ lọc biên dịch được sử dụng khi cài đặt ứng dụng thông qua Google Play. Chúng tôi khuyên bạn nên đặt bộ lọc cài đặt thành cấu hình tốc độ để cho phép sử dụng cấu hình từ tệp siêu dữ liệu dex. Lưu ý rằng nếu một cấu hình không được cung cấp hoặc nếu nó trống, cấu hình tốc độ tương đương với việc làm nhanh.

  • pm.dexopt.bg-dexopt=speed-profile
  • Đây là bộ lọc biên dịch được sử dụng khi thiết bị không hoạt động, đang sạc và đã sạc đầy. Hãy thử bộ lọc trình biên dịch hồ sơ tốc độ để tận dụng khả năng biên dịch theo hướng dẫn hồ sơ và tiết kiệm dung lượng lưu trữ.

  • pm.dexopt.boot=verify
  • Bộ lọc biên dịch được sử dụng sau khi cập nhật qua mạng. Chúng tôi thực sự khuyên bạn nên sử dụng bộ lọc trình biên dịch xác minh cho tùy chọn này để tránh thời gian khởi động rất lâu.

  • pm.dexopt.first-boot=quicken
  • Bộ lọc biên dịch lần đầu tiên thiết bị khởi động. Bộ lọc được sử dụng ở đây sẽ chỉ ảnh hưởng đến thời gian khởi động sau khi xuất xưởng. Chúng tôi khuyên bạn nên làm nhanh bộ lọc để tránh mất nhiều thời gian trước khi người dùng sử dụng điện thoại lần đầu tiên. Lưu ý rằng nếu tất cả các ứng dụng trong /system đã được biên dịch với bộ lọc trình biên dịch nhanh hoặc được biên dịch với bộ lọc biên dịch cấu hình tốc độ hoặc tốc độ , pm.dexopt.first-boot sẽ không có tác dụng.

Tùy chọn Dex2oat

Lưu ý rằng các tùy chọn này ảnh hưởng đến dex2oat trong quá trình biên dịch trên thiết bị cũng như trong quá trình tối ưu hóa trước, trong khi hầu hết các tùy chọn được thảo luận ở trên chỉ ảnh hưởng đến việc tối ưu hóa trước.

Để điều khiển dex2oat trong khi biên dịch hình ảnh khởi động:

  • dalvik.vm.image-dex2oat-Xms: kích thước heap ban đầu
  • dalvik.vm.image-dex2oat-Xmx: kích thước heap tối đa
  • dalvik.vm.image-dex2oat-filter: tùy chọn bộ lọc trình biên dịch
  • dalvik.vm.image-dex2oat-thread: số lượng chủ đề sẽ sử dụng

Để kiểm soát dex2oat trong khi biên dịch mọi thứ ngoài hình ảnh khởi động:

  • dalvik.vm.dex2oat-Xms: kích thước heap ban đầu
  • dalvik.vm.dex2oat-Xmx: kích thước heap tối đa
  • dalvik.vm.dex2oat-filter: tùy chọn bộ lọc trình biên dịch

Trên các bản phát hành thông qua Android 6.0, một tùy chọn bổ sung được cung cấp để biên dịch mọi thứ ngoài hình ảnh khởi động:

  • dalvik.vm.dex2oat-thread: số lượng chủ đề sẽ sử dụng

Bắt đầu với Android 6.1, đây trở thành hai tùy chọn bổ sung để biên dịch mọi thứ ngoài hình ảnh khởi động:

  • dalvik.vm.boot-dex2oat-thread: số lượng chủ đề sẽ sử dụng trong thời gian khởi động
  • dalvik.vm.dex2oat-thread: số lượng chủ đề sẽ sử dụng sau thời gian khởi động

Bắt đầu với Android 7.1, hai tùy chọn được cung cấp để kiểm soát cách bộ nhớ được sử dụng khi biên dịch mọi thứ ngoài hình ảnh khởi động:

  • dalvik.vm.dex2oat-very-large: tổng kích thước tệp dex tối thiểu tính bằng byte để tắt biên dịch AOT
  • dalvik.vm.dex2oat-swap: sử dụng tệp hoán đổi dex2oat (dành cho thiết bị có bộ nhớ thấp)

Không nên giảm các tùy chọn kiểm soát kích thước heap ban đầu và tối đa cho dex2oat vì chúng có thể giới hạn những ứng dụng nào có thể được biên dịch.

Bắt đầu với Android 11, ba tùy chọn sở thích CPU được cung cấp để cho phép giới hạn các luồng trình biên dịch đối với một nhóm CPU cụ thể:

  • dalvik.vm.boot-dex2oat-cpu-set: CPU chạy các luồng dex2oat trong thời gian khởi động
  • dalvik.vm.image-dex2oat-cpu-set: CPU chạy dex2oat trong khi biên dịch hình ảnh khởi động
  • dalvik.vm.dex2oat-cpu-set: CPU chạy các luồng dex2oat sau thời gian khởi động

Các CPU phải được chỉ định dưới dạng danh sách id CPU được phân tách bằng dấu phẩy. Ví dụ để chạy trên dex2oat trên CPU 0-3, hãy đặt:

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

Khi đặt thuộc tính ái lực của CPU, chúng tôi khuyên bạn nên so khớp thuộc tính tương ứng với số luồng dex2oat để khớp với số CPU được chọn để tránh bộ nhớ không cần thiết và tranh chấp I / O:

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

Bắt đầu với Android 12, các tùy chọn sau đã được thêm vào:

  • dalvik.vm.ps-min-first-save-ms: thời gian chờ thời gian chạy để tạo cấu hình của ứng dụng, lần đầu tiên ứng dụng được khởi chạy
  • dalvik.vm.ps-min-save-period-ms: thời gian tối thiểu để đợi trước khi cập nhật hồ sơ của một ứng dụng
  • dalvik.vm.systemservercompilerfilter: bộ lọc trình biên dịch mà thiết bị sẽ sử dụng khi biên dịch lại máy chủ hệ thống

Cấu hình A / B cụ thể

Cấu hình ROM

Bắt đầu từ Android 7.0, các thiết bị có thể sử dụng hai phân vùng hệ thống để kích hoạt cập nhật hệ thống A / B. Để tiết kiệm kích thước phân vùng hệ thống, các tệp được mở sẵn có thể được cài đặt trong phân vùng hệ thống thứ hai không sử dụng. Sau đó, chúng được sao chép vào phân vùng dữ liệu trong lần khởi động đầu tiên.

Ví dụ về cách sử dụng (trong device-common.mk ):

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

Và trong BoardConfig.mk của thiết bị:

BOARD_USES_SYSTEM_OTHER_ODEX := true

Lưu ý rằng mã classpath khởi động, mã máy chủ hệ thống và các ứng dụng cốt lõi dành riêng cho sản phẩm luôn được biên dịch thành phân vùng hệ thống. Theo mặc định, tất cả các ứng dụng khác được biên dịch vào phân vùng hệ thống thứ hai không sử dụng. Điều này có thể được kiểm soát bằng SYSTEM_OTHER_ODEX_FILTER , có giá trị theo mặc định là:

SYSTEM_OTHER_ODEX_FILTER ?= app/% priv-app/%

Nền dexopt OTA

Với các thiết bị hỗ trợ A / B, các ứng dụng có thể được biên dịch trong nền để cập nhật lên hình ảnh hệ thống mới. Xem phần Biên dịch ứng dụng trong nền để tùy chọn bao gồm tập lệnh biên dịch và các tệp nhị phân trong hình ảnh hệ thống. Bộ lọc biên dịch được sử dụng cho biên dịch này được điều khiển bằng:

pm.dexopt.ab-ota=speed-profile

Chúng tôi khuyên bạn nên sử dụng hồ sơ tốc độ để tận dụng lợi thế của việc biên dịch có hướng dẫn hồ sơ và tiết kiệm dung lượng lưu trữ.