Trình bổ trợ Gradle cho Hồ sơ cơ sở giúp bạn dễ dàng tạo và duy trì Hồ sơ cơ sở. Trình bổ trợ này giúp bạn thực hiện những việc sau:
- Tạo Hồ sơ cơ sở mới cho ứng dụng.
- Tạo Hồ sơ cơ sở mới cho thư viện.
- Tuỳ chỉnh quá trình tạo Hồ sơ cơ sở.
Trang này giải thích cách sử dụng trình bổ trợ Gradle cho Hồ sơ cơ sở để tuỳ chỉnh quá trình tạo Hồ sơ cơ sở.
Yêu cầu đối với trình bổ trợ
- AGP 8.0 trở lên.
- Phần phụ thuộc trên phiên bản trình bổ trợ Gradle mới nhất
Sử dụng một Thiết bị do Gradle quản lý để tạo Hồ sơ cơ sở
Để sử dụng Thiết bị do Gradle quản lý (GMD) để tạo Hồ sơ cơ sở, hãy thêm một GMD vào cấu hình build.gradle.kts
của mô-đun trình tạo hồ sơ— có thể là mô đun kiểm thử :baselineprofile
— như minh hoạ trong ví dụ sau:
Kotlin
android { testOptions.managedDevices.devices { create<com.android.build.api.dsl.ManagedVirtualDevice>("pixel6Api31") { device = "Pixel 6" apiLevel = 31 systemImageSource = "aosp" } } }
Groovy
android { testOptions.managedDevices.devices { pixel6Api31(ManagedVirtualDevice) { device 'Pixel 6' apiLevel = 31 systemImageSource 'aosp' } } }
Sử dụng GMD để tạo Hồ sơ cơ sở bằng cách thêm GMD vào Hồ sơ cơ sở
Cấu hình trình bổ trợ Gradle như sau, trong build.gradle.kts
của
Mô-đun kiểm thử :baselineprofile
:
Kotlin
baselineProfile { managedDevices += "pixel6Api31" }
Groovy
baselineProfile { managedDevices = ['pixel6Api31'] }
Nếu sử dụng GMD để tạo Hồ sơ cơ sở, hãy đặt useConnectedDevices
thành
false
, trong mô-đun kiểm thử :baselineprofile
:
Kotlin
baselineProfile { ... useConnectedDevices = false }
Groovy
baselineProfile { ... useConnectedDevices false }
Tạo Hồ sơ cơ sở cho nhiều biến thể
Bạn có thể tạo Hồ sơ cơ sở cho mỗi biến thể, mỗi phiên bản hoặc tạo dưới dạng một tệp duy nhất để sử dụng cho mọi biến thể. Kiểm soát hành vi này thông qua chế độ cài đặt hợp nhất, như trong ví dụ sau, trong build.gradle.kts
của mô-đun ứng dụng hoặc thư viện.
Kotlin
baselineProfile { mergeIntoMain = true }
Groovy
baselineProfile { mergeIntoMain true }
Để hợp nhất các hồ sơ đã tạo cho tất cả biến thể thành một hồ sơ duy nhất, hãy đặt mergeIntoMain
thành true
. Bạn không thể tạo Hồ sơ cơ sở cho mỗi biến thể khi chế độ cài đặt này là true
. Vì vậy, sẽ chỉ có một tác vụ Gradle duy nhất có tên là generateBaselineProfile
. Dữ liệu đầu ra của hồ sơ nằm ở src/main/generated/baselineProfiles
.
Để tắt tính năng hợp nhất và mỗi biến thể đều có một hồ sơ riêng, hãy đặt mergeIntoMain
thành false
. Trong trường hợp này, sẽ có nhiều tác vụ Gradle riêng cho biến thể. Ví dụ: khi có hai phiên bản (chẳng hạn như miễn phí và có tính phí) và một loại bản phát hành, các tác vụ sẽ như sau:
* `generateFreeReleaseBaselineProfile`
* `generatePaidReleaseBaselineProfile`
* `generateReleaseBaselineProfile`
Để chỉ định hành vi hợp nhất cho mỗi biến thể, hãy sử dụng đoạn mã sau:
Kotlin
baselineProfile { variants { freeRelease { mergeIntoMain = true } } }
Groovy
baselineProfile { variants { freeRelease { mergeIntoMain true } } }
Trong ví dụ trước, các biến thể có cờ được đặt thành true
đều được hợp nhất vào src/main/generated/baselineProfiles
, trong khi hồ sơ của các biến thể có cờ được đặt thành false
sẽ được lưu giữ trong thư mục src/<variant>/generated/baselineProfiles
.
Theo mặc định, mergeIntoMain
được đặt thành true
đối với thư viện và false
đối với ứng dụng.
Tự động tạo Hồ sơ cơ sở khi tập hợp một bản phát hành mới
Bạn có thể định cấu hình Hồ sơ cơ sở để tự động tạo cho mọi bản phát hành, thay vì sử dụng tác vụ generateBaselineProfile
theo cách thủ công. Nhờ tạo tự động, hồ sơ mới nhất sẽ được đưa vào bản phát hành.
Để bật tính năng tạo tự động cho bản phát hành, hãy sử dụng cờ automaticGenerationDuringBuild
:
Kotlin
baselineProfile { automaticGenerationDuringBuild = true }
Groovy
baselineProfile { automaticGenerationDuringBuild true }
Việc đặt cờ automaticGenerationDuringBuild
thành true
sẽ kích hoạt quá trình tạo Hồ sơ cơ sở mới cho mỗi tập hợp bản phát hành. Tức là việc chạy tác vụ bản phát hành tập hợp (chẳng hạn như ./gradlew:app:assembleRelease
) cũng sẽ kích hoạt :app:generateReleaseBaselineProfile
, khởi động việc kiểm thử đo lường cho Hồ sơ cơ sở và tạo bản dựng Hồ sơ cơ sở để chạy chương trình kiểm thử này.
Tuy việc tạo tự động giúp người dùng có được hiệu suất tốt nhất, nhưng thời gian xây dựng cũng tăng lên do phải xây dựng cả quá trình kiểm thử đo lường và bản dựng.
Bạn cũng có thể chỉ định hành vi này cho mỗi biến thể, như trong ví dụ sau:
Kotlin
baselineProfile { variants { freeRelease { automaticGenerationDuringBuild = true } } }
Groovy
baselineProfile { variants { freeRelease { automaticGenerationDuringBuild true } } }
Trong ví dụ trước, tác vụ generateFreeReleaseBaselineProfile
sẽ chạy khi khởi động assembleFreeRelease
. Một trường hợp sử dụng là khi người dùng muốn có một release
cho bản dựng phân phối (luôn tạo hồ sơ khi tạo bản dựng) và một bản dựng releaseWithoutProfile
để kiểm thử nội bộ.
Lưu trữ Hồ sơ cơ sở vào nguồn
Bạn có thể lưu trữ Hồ sơ cơ sở trong thư mục nguồn thông qua saveInSrc
gắn cờ trong build.gradle.kts
của ứng dụng hoặc mô-đun thư viện:
true
: Hồ sơ cơ sở được lưu trữ trongsrc/<variant>/generated/baselineProfiles
. Khi đó, bạn có thể bạn xác nhận hồ sơ mới nhất được tạo bằng các nguồn của mình.false
: Hồ sơ cơ sở được lưu trữ trong các tệp trung gian trong thư mục bản dựng. Với cách này, khi chuyển giao (commit) mã, bạn sẽ không lưu hồ sơ mới nhất được tạo.
Kotlin
baselineProfile { saveInSrc = true }
Groovy
baselineProfile { saveInSrc true }
Bạn cũng có thể chỉ định hành vi này cho mỗi biến thể:
Kotlin
baselineProfile { variants { freeRelease { saveInSrc = true } } }
Groovy
baselineProfile { variants { freeRelease { saveInSrc true } } }
Lọc quy tắc hồ sơ
Trình bổ trợ Gradle cho Hồ sơ cơ sở cho phép bạn lọc các quy tắc Hồ sơ cơ sở đã tạo. Thao tác này đặc biệt hữu ích cho các thư viện nếu bạn muốn loại trừ quy tắc hồ sơ cho các lớp và phương thức trong những phần phụ thuộc khác của ứng dụng mẫu hoặc chính thư viện đó. Bộ lọc có thể bao gồm và loại trừ gói và lớp cụ thể. Khi bạn chỉ định các trường hợp loại trừ, thì chỉ các quy tắc Hồ sơ cơ sở phù hợp mới bị loại trừ còn mọi nội dung khác sẽ được bao gồm.
Nội dung trong bộ lọc có thể chứa bất kỳ giá trị nào sau đây:
- Tên gói kết thúc bằng ký tự đại diện kép để khớp với gói được chỉ định và mọi gói con. Ví dụ:
com.example.**
khớp vớicom.example.method
vàcom.example.method.bar
. - Tên gói kết thúc bằng ký tự đại diện để chỉ khớp với gói đã chỉ định. Ví dụ:
com.example.*
khớp vớicom.example.method
nhưng không khớp vớicom.example.method.bar
. - Tên lớp để khớp với một lớp cụ thể – ví dụ:
com.example.MyClass
.
Các ví dụ sau đây minh hoạ cách bao gồm và loại trừ các gói cụ thể:
Kotlin
baselineProfile { filter { include("com.somelibrary.widget.grid.**") exclude("com.somelibrary.widget.grid.debug.**") include("com.somelibrary.widget.list.**") exclude("com.somelibrary.widget.list.debug.**") include("com.somelibrary.widget.text.**") exclude("com.somelibrary.widget.text.debug.**") } }
Groovy
baselineProfile { filter { include 'com.somelibrary.widget.grid.**' exclude 'com.somelibrary.widget.grid.debug.**' include 'com.somelibrary.widget.list.**' exclude 'com.somelibrary.widget.list.debug.**' include 'com.somelibrary.widget.text.**' exclude 'com.somelibrary.widget.text.debug.**' } }
Tuỳ chỉnh quy tắc lọc cho các biến thể như sau:
Kotlin
// Non-specific filters applied to all the variants. baselineProfile { filter { include("com.myapp.**") } } // Flavor-specific filters. baselineProfile { variants { free { filter { include("com.myapp.free.**") } } paid { filter { include("com.myapp.paid.**") } } } } // Build-type-specific filters. baselineProfile { variants { release { filter { include("com.myapp.**") } } } } // Variant-specific filters. baselineProfile { variants { freeRelease { filter { include("com.myapp.**") } } } }
Groovy
// Non-specific filters applied to all the variants. baselineProfile { filter { include 'com.myapp.**' } } // Flavor-specific filters. baselineProfile { variants { free { filter { include 'com.myapp.free.**' } } paid { filter { include 'com.myapp.paid.**' } } } } // Build-type specific filters. baselineProfile { variants { release { filter { include 'com.myapp.**' } } } } // Variant-specific filters. baselineProfile { variants { freeRelease { filter { include 'com.myapp.**' } } } }
Bạn cũng có thể lọc các quy tắc bằng cách sử dụng đối số filterPredicate
trong BaselineProfileRule.collect()
, nhưng bạn nên sử dụng trình bổ trợ Gradle để lọc vì nó mang đến một cách đơn giản hơn để lọc các gói con và một nơi duy nhất để định cấu hình toàn bộ mô-đun.
Tuỳ chỉnh loại bản dựng điểm chuẩn và Hồ sơ cơ sở
Trình bổ trợ Gradle cho Hồ sơ cơ sở tạo thêm các loại bản dựng để tạo hồ sơ và chạy phép đo điểm chuẩn. Các loại bản dựng này có tiền tố
benchmark
và nonMinified
. Ví dụ: đối với loại bản dựng release
, thuộc tính
Trình bổ trợ này tạo các loại bản dựng benchmarkRelease
và nonMinifiedRelease
.
Các loại bản dựng này được tự động định cấu hình cho trường hợp sử dụng cụ thể và
thường không cần bất kỳ tuỳ chỉnh nào. Nhưng có một số trường hợp
vẫn có thể hữu ích khi áp dụng một số tùy chọn tùy chỉnh, ví dụ: để áp dụng một
cấu hình ký khác nhau.
Bạn có thể tuỳ chỉnh các loại bản dựng được tạo tự động bằng một tập hợp con thuộc tính loại bản dựng; các thuộc tính không sử dụng được sẽ bị ghi đè. Ví dụ sau đây cho thấy cách tuỳ chỉnh các loại bản dựng bổ sung và thuộc tính nào được ghi đè:
Kotlin
android { buildTypes { release { ... } create("benchmarkRelease") { // Customize properties for the `benchmarkRelease` build type here. // For example, you can change the signing config (by default // it's the same as for the `release` build type). signingConfig = signingConfigs.getByName("benchmarkRelease") } create("nonMinifiedRelease") { // Customize properties for the `nonMinifiedRelease` build type here. signingConfig = signingConfigs.getByName("nonMinifiedRelease") // From Baseline Profile Gradle plugin 1.2.4 and higher, you can't // customize the following properties, which are always overridden to // avoid breaking Baseline Profile generation: // // isJniDebuggable = false // isDebuggable = false // isMinifyEnabled = false // isShrinkResources = false // isProfileable = true // enableAndroidTestCoverage = false // enableUnitTestCoverage = false } } }
Groovy
android { buildTypes { release { ... } benchmarkRelease { // Customize properties for the `benchmarkRelease` build type here. // For example, you can change the signing config (by default it's the // same as for the `release` build type.) signingConfig = signingConfigs.benchmarkRelease } nonMinifiedRelease { // Customize properties for the `nonMinifiedRelease` build type here. signingConfig = signingConfigs.nonMinifiedRelease // From Baseline Profile Gradle plugin 1.2.4 and higher, you can't use // the following properties, which are always overridden to avoid breaking // Baseline Profile generation: // // isJniDebuggable = false // isDebuggable = false // isMinifyEnabled = false // isShrinkResources = false // isProfileable = true // enableAndroidTestCoverage = false // enableUnitTestCoverage = false } } }
Ghi chú khác
Khi tạo Hồ sơ cơ sở, bạn cần lưu ý một số điều sau đây:
Hồ sơ cơ sở đã biên dịch phải có dung lượng dưới 1,5 MB. Giới hạn này không áp dụng cho định dạng văn bản trong các tệp nguồn của bạn, thường là lớn hơn nhiều trước khi biên dịch. Xác minh kích thước của Hồ sơ cơ sở nhị phân bằng cách xem cấu phần phần mềm đầu ra trong
assets/dexopt/baseline.prof
đối với APK hoặcBUNDLE-METADATA/com.android.tools.build.profiles/baseline.prof
đối với AAB.Các quy tắc rộng biên dịch quá nhiều ứng dụng có thể làm chậm quá trình khởi động do mức độ truy cập ổ đĩa tăng lên. Nếu chỉ mới bắt đầu sử dụng Hồ sơ cơ sở, bạn không cần phải lo lắng về vấn đề này. Tuy nhiên, tuỳ thuộc vào ứng dụng cũng như kích thước và số lượng hành trình, việc thêm nhiều hành trình có thể khiến hiệu suất kém hơn. Hãy kiểm thử hiệu suất của ứng dụng bằng cách thử nhiều hồ sơ và xác minh rằng hiệu suất không giảm sau các lượt thêm.