Hồ sơ khởi động là một tập hợp con của Hồ sơ cơ sở. Hệ thống bản 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 các 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ở.
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 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 dựng phát hành, hãy đặt
isMinifyEnabled = true. - Đã bật tính năng tối ưu hoá bố cục DEX. 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 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 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 hoạt động 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ơn, 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
thêm các điểm truy cập phổ biến nhất vào ứng dụng, 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 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 Generate Baseline Profile for app và tìm các quy tắc
Hồ sơ khởi động tại
src/<variant>/generated/baselineProfiles/startup-prof.txt.
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 phễu người dùng để khởi động ứng dụng. Trong nhiều trường hợp, phễu khởi động ứng dụng tuân theo danh sách này:
- 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
Xử lý danh sách này từ trên xuống và dừng 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 đầy đủ 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