Tạo hồ sơ khởi động

Hồ sơ khởi động là một tập hợp con của Hồ sơ cơ sở. Hồ sơ khởi động được hệ thống xây dựng sử dụng để tối ưu hoá hơn nữa các lớp và phương thức trong đó bằng cách cải thiện bố cục mã trong tệp DEX của APK. Với Hồ sơ khởi động, quá trình khởi động ứng dụng của bạn nhanh hơn tới 15% so với khi chỉ sử dụng Hồ sơ cơ sở.

Hình 1. Cải thiện vị trí của mã nhờ tính năng tối ưu hoá bố cục DEX.

Yêu cầu

Bạn nên sử dụng Hồ sơ khởi động bằng 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 của mình:

  • Đã 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. Trong khối baselineProfile {} của tệp bản dựng của mô-đun ứng dụng, hãy đặt dexLayoutOptimization = true.

Tạo hồ sơ khởi động

Android Studio sẽ tạo một 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. Trong đó có cả các hoạt động tương tác khởi động tạo thành một Hồ sơ khởi động cơ bản. Để tăng cường Hồ sơ khởi động này với nhiều Hành trình trọng yếu của người dùng (CUJ), hãy thêm CUJ khi 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, có thể chạy MainActivity của ứng dụng 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 của bạn, chẳng hạn như khởi động ứng dụng từ màn hình chính hoặc khởi chạy 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 của bạn từ màn hình chính và khởi chạy tới 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
        ) {
            // Launch directly into the NEWS_FEED.
            startActivityAndWait(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.

Xác nhận tối ưu hoá Hồ sơ khởi động

Để xác nhận việc tối ưu hoá bố cục DEX, hãy sử dụng Android Studio để mở APK và xác minh các lớp trong tệp DEX. Hãy đảm bảo classes.dex chính chưa được điền đầy đủ. Nếu ứng dụng của bạn chỉ chứa một tệp DEX, bạn có thể kiểm tra xem ứng dụng có chứa 2 tệp DEX hay không sau khi bật Hồ sơ khởi động.

Android Studio sẽ cảnh báo bạn nếu các lớp khởi động không vừa với một tệp DEX. Để nhận thông tin chẩn đoán bao gồm số lượng phương thức không khởi động trong các lớp khởi động, hãy đảm bảo trình biên dịch R8 được cập nhật lên ít nhất là phiên bản 8.3.36-dev bằng cách thực hiện các thay đổi sau đối với tệp settings.gradle khi bạn áp dụng Hồ sơ khởi động:

Kotlin

pluginManagement {
    buildscript {
        repositories {
            mavenCentral()
            maven {
                url = uri("https://storage.googleapis.com/r8-releases/raw")
            }
        }
        dependencies {
            classpath("com.android.tools:r8:8.3.6-dev")
        }
    }
}

Groovy

pluginManagement {
    buildscript {
        repositories {
            mavenCentral()
            maven {
                url uri('https://storage.googleapis.com/r8-releases/raw')
            }
        }
        dependencies {
            classpath 'com.android.tools:r8:8.3.6-dev"
        }
    }
}

Nhớ thêm --info sau assembleRelease trong lệnh sau khi tạo bằng Gradle.

./gradlew assembleRelease --info

Sau đó, hệ thống sẽ in báo cáo chẩn đoán vào thiết bị đầu cuối.

Nếu ứng dụng hoặc thư viện của bạn tham chiếu bất kỳ API đơn giản hoá nào, thì việc triển khai khả năng tương thích đi kèm của các lớp này luôn nằm trong tệp DEX cuối cùng. Tệp DEX gần đây nhất đã đơn giản hoá này không tham gia vào quá trình tối ưu hoá bố cục DEX.