Hồ sơ khởi động là một tập hợp con của Hồ sơ cơ sở. Hệ thống xây dựng sử dụng Hồ sơ khởi động để tối ưu hoá thêm các lớp và phương thức mà hồ sơ này chứa bằng cách cải thiện bố cục của mã trong tệp DEX của APK. Với Hồ sơ khởi động, quá trình khởi động ứng dụng thường nhanh hơn từ 15% đến 30% so với chỉ dùng Hồ sơ cơ sở.
Để biết thêm thông tin, hãy xem bài viết Tổng quan về Hồ sơ khởi động.
Yêu cầu
Bạn nên sử dụng Hồ sơ khởi động với các công cụ sau:
- Jetpack Macrobenchmark 1.2.0 trở lên
- Trình bổ trợ Android cho Gradle (AGP) 8.2 trở lên
- Android Studio Iguana trở lên
Ngoài ra, bạn cần có các chế độ cài đặt sau trong ứng dụng:
- Đã bật R8. Đối với bản phát hành, hãy đặt
isMinifyEnabled = true. - Đã bật tính năng tối ưu hoá bố cục DEX. Tính năng này chỉ có từ AGP 8.1 trở lên và được bật theo mặc định kể từ AGP 8.3. Đối với các phiên bản AGP từ 8.1 đến 8.2, trong khối
baselineProfile {}của tệp bản dựng mô-đun ứng dụng, hãy đặtdexLayoutOptimization = true.
Tạo Hồ sơ khởi động
Android Studio sẽ tạo Hồ sơ khởi động cùng với Hồ sơ cơ sở khi bạn sử dụng mẫu Trình tạo Hồ sơ cơ sở mặc định.
Các bước chung để tạo và tạo Hồ sơ khởi động cũng giống như các bước để tạo Hồ sơ cơ sở.
Cách mặc định để tạo Hồ sơ khởi động là sử dụng mẫu mô-đun Trình tạo Hồ sơ cơ sở trong Android Studio. Cách này bao gồm các lượt tương tác khởi động tạo thành Hồ sơ khởi động cơ bản. Để tăng cường Hồ sơ khởi động này bằng nhiều Hành trình trọng yếu của người dùng (CUJ), hãy thêm CUJ khởi động ứng dụng vào khối rule với includeInStartupProfile được đặt thành true. Đối với các ứng dụng đơn giản, việc chạy MainActivity của ứng dụng có thể là đủ. Đối với các ứng dụng phức tạp hơn, hãy cân nhắc
việc thêm các điểm truy cập phổ biến nhất vào ứng dụng của bạn, chẳng hạn như khởi động ứng dụng từ
màn hình chính hoặc chạy vào một đường liên kết sâu.
Đoạn mã sau đây cho thấy một trình tạo Hồ sơ cơ sở (theo mặc định là tệp BaselineProfileGenerator.kt) bao gồm việc khởi động ứng dụng từ màn hình chính và chạy vào một đường liên kết sâu. Đường liên kết sâu sẽ chuyển thẳng đến nguồn cấp tin tức của ứng dụng chứ không phải màn hình chính của ứng dụng.
@RunWith(AndroidJUnit4::class)
@LargeTest
class BaselineProfileGenerator {
@get:Rule
val rule = BaselineProfileRule()
@Test
fun generate() {
rule.collect(
packageName = "com.example.app",
includeInStartupProfile = true
) {
uiAutomator {
// Launch directly into the NEWS_FEED using startActivityIntent
startIntent(Intent().apply {
setPackage(packageName)
setAction("com.example.app.NEWS_FEED")
})
}
}
}
Chạy cấu hình Tạo Hồ sơ cơ sở cho ứng dụng và tìm các quy tắc
Hồ sơ khởi động tại
src/<variant>/generated/baselineProfiles/startup-prof.txt, nơi AGP
tự động sử dụng các quy tắc này.
Những điều cần cân nhắc khi tạo hồ sơ khởi động
Để quyết định hành trình của người dùng nào cần đề cập khi tạo hồ sơ khởi động, hãy cân nhắc xem hầu hết người dùng bắt đầu ứng dụng ở đâu. Thông thường là từ trình chạy và sau khi họ đăng nhập. Đây cũng là hành trình hồ sơ cơ sở cơ bản nhất.
Sau khi đề cập đến trường hợp sử dụng đầu tiên, hãy làm theo quy trình người dùng để khởi động ứng dụng. Trong nhiều trường hợp, quy trình khởi động ứng dụng tuân theo danh sách sau:
- Hoạt động chính của trình chạy
- Thông báo kích hoạt quá trình khởi động ứng dụng
- Các hoạt động không bắt buộc của trình chạy
Hãy làm theo danh sách này từ trên xuống và dừng lại trước khi classes.dex đầy. Để đề cập đến nhiều hành trình hơn sau đó, hãy di chuyển mã ra khỏi đường dẫn khởi động và thêm nhiều hành trình hơn. Để di chuyển mã ra khỏi đường dẫn khởi động, hãy kiểm tra dấu vết Perfetto trong quá trình khởi động ứng dụng và tìm các hoạt động chạy trong thời gian dài. Bạn cũng có thể sử dụng macrobenchmark
với tính năng theo dõi phương thức được bật để có chế độ xem hoàn chỉnh và có thể tự động hoá về các lệnh gọi phương thức trong quá trình khởi động ứng dụng.
Đề xuất cho bạn
- Lưu ý: văn bản có đường liên kết sẽ hiện khi JavaScript tắt
- Tạo Hồ sơ cơ sở {:#creating-profile-rules}
- Hồ sơ cơ sở {:#baseline-profiles}
- Viết Microbenchmark