Il plug-in Gradle del profilo di base semplifica la generazione e la gestione dei profili di base. Ti aiuta a svolgere le seguenti attività:
- Crea nuovi profili di baseline per la tua app.
- Crea nuovi profili di riferimento per la tua raccolta.
- Personalizza la generazione del profilo di riferimento.
Questa pagina spiega come utilizzare il plug-in Gradle del profilo di riferimento per personalizzare la generazione dei profili di riferimento.
Requisiti dei plug-in
- AGP 8.0 o versioni successive
- Dipendenza dalla versione più recente del plug-in Gradle
Utilizzare i dispositivi gestiti da Gradle per generare profili di riferimento
Per utilizzare un dispositivo gestito da Gradle (GMD) per
generare il profilo di riferimento, aggiungine uno nella configurazione build.gradle.kts
del modulo di produzione del profilo, probabilmente il modulo di test :baselineprofile
, come показано показано nell'esempio seguente:
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' } } }
Utilizza il GMD per generare profili di riferimento aggiungendolo alla configurazione del plug-in Gradle del profilo di riferimento come segue, nel build.gradle.kts
del modulo di test :baselineprofile
:
Kotlin
baselineProfile { managedDevices += "pixel6Api31" }
Groovy
baselineProfile { managedDevices = ['pixel6Api31'] }
Quando utilizzi un GMD per generare profili di riferimento, imposta useConnectedDevices
su
false
nel modulo di test :baselineprofile
:
Kotlin
baselineProfile { ... useConnectedDevices = false }
Groovy
baselineProfile { ... useConnectedDevices false }
Genera profili di baseline per varianti diverse
Puoi generare profili di riferimento per variante, per versione o come singolo file da utilizzare per tutte le varianti. Controlla questo comportamento tramite l'impostazione di unione, come mostrato nell'esempio seguente, nel build.gradle.kts
del modulo dell'applicazione o della libreria.
Kotlin
baselineProfile { mergeIntoMain = true }
Groovy
baselineProfile { mergeIntoMain true }
Per unire i profili generati per tutte le varianti in un unico profilo, imposta
mergeIntoMain
su true
. Non è possibile generare profili di base per variante quando questa impostazione è true
, quindi esiste un'unica attività Gradle chiamata generateBaselineProfile
. Il profilo viene visualizzato in src/main/generated/baselineProfiles
.
Per disattivare l'unione e avere un profilo per variante, imposta mergeIntoMain
su
false
. In questo caso, esistono più attività Gradle specifiche per le varianti. Ad esempio, quando sono presenti due versioni, ad esempio una senza costi e una a pagamento, e un tipo di build di release, le attività sono le seguenti:
* `generateFreeReleaseBaselineProfile`
* `generatePaidReleaseBaselineProfile`
* `generateReleaseBaselineProfile`
Per specificare il comportamento di unione per variante, utilizza il seguente codice:
Kotlin
baselineProfile { variants { freeRelease { mergeIntoMain = true } } }
Groovy
baselineProfile { variants { freeRelease { mergeIntoMain true } } }
Nell'esempio precedente, le varianti in cui il flag è impostato su true
vengono tutte unite in src/main/generated/baselineProfiles
, mentre i profili delle varianti in cui il flag è impostato su false
vengono conservati nella cartella src/<variant>/generated/baselineProfiles
.
Per impostazione predefinita, mergeIntoMain
è impostato su true
per le librerie e su false
per le app.
Genera automaticamente i profili di riferimento durante l'assemblaggio di una nuova release
Puoi configurare i profili di riferimento in modo che vengano generati automaticamente con ogni compilazione di release, anziché utilizzare manualmente l'attività generateBaselineProfile
. Con la generazione automatica, il profilo più aggiornato è incluso nella build di release.
Per attivare la generazione automatica per le build di release, utilizza il flag automaticGenerationDuringBuild
:
Kotlin
baselineProfile { automaticGenerationDuringBuild = true }
Groovy
baselineProfile { automaticGenerationDuringBuild true }
L'impostazione del flag automaticGenerationDuringBuild
su true
attiva la generazione di un nuovo profilo di riferimento per ogni assembly di release. Ciò significa che eseguire un'attività di compilazione di release di assemble, ad esempio ./gradlew:app:assembleRelease
, attiva anche :app:generateReleaseBaselineProfile
, avvia i test di strumentazione del profilo di riferimento e compila il profilo di riferimento su cui vengono eseguiti.
Sebbene la generazione automatica aiuti gli utenti a ottenere il massimo vantaggio in termini di prestazioni, aumenta anche il tempo di compilazione a causa dei doppi test di compilazione e instrumentation.
Puoi anche specificare questo comportamento per variante, come mostrato nell'esempio seguente:
Kotlin
baselineProfile { variants { freeRelease { automaticGenerationDuringBuild = true } } }
Groovy
baselineProfile { variants { freeRelease { automaticGenerationDuringBuild true } } }
Nell'esempio precedente, l'attività generateFreeReleaseBaselineProfile
viene eseguita
all'avvio di assembleFreeRelease
. Questo è utile quando l'utente vuole avere, ad esempio, una build release
per la distribuzione che generi sempre il profilo al momento della compilazione e una build releaseWithoutProfile
per i test interni.
Memorizzare i profili di riferimento nelle origini
Puoi archiviare i profili di riferimento nella directory di origine tramite il saveInSrc
flag nel build.gradle.kts
del modulo dell'applicazione o della libreria:
true
: il profilo di riferimento è archiviato insrc/<variant>/generated/baselineProfiles
. In questo modo puoi eseguire il commit del profilo generato più recente con le tue origini.false
: il profilo di baseline è archiviato nei file intermedi della directory di compilazione. In questo modo, quando esegui il commit del codice, non salvi il profilo generato più di recente.
Kotlin
baselineProfile { saveInSrc = true }
Groovy
baselineProfile { saveInSrc true }
Puoi anche specificare questo comportamento per variante:
Kotlin
baselineProfile { variants { freeRelease { saveInSrc = true } } }
Groovy
baselineProfile { variants { freeRelease { saveInSrc true } } }
Disattivare gli avvisi
Per impostazione predefinita, il plug-in Gradle Baseline Profile ti avvisa di situazioni che potrebbero causare problemi. Per disattivare gli avvisi, puoi impostare l'opzione pertinente su
false
nel file build.gradle.kts
. Ecco le opzioni di avviso:
baselineProfile {
warnings {
/**
* Warn when the Android Gradle Plugin version is higher than the max
* tested one.
*/
maxAgpVersion = true
/**
* Warn when a benchmark or baseline profile variant has been disabled.
*/
disabledVariants = true
/**
* Warn that running `generateBaselineProfile` with AGP 8.0 doesn't
* support running instrumentation tests for multiple build types at
* once.
*/
multipleBuildTypesWithAgp80 = true
/**
* Warn when no baseline profiles are generated after running the
* generate baseline profile command.
*/
noBaselineProfileRulesGenerated = true
/**
* Warn when no startup profiles are generated after running the generate
* baseline profile command.
*/
noStartupProfileRulesGenerated = true
}
}
Regole del profilo di filtro
Il plug-in Gradle del profilo di riferimento consente di filtrare le regole del profilo di riferimento generate. Questa opzione è particolarmente utile per le librerie, se vuoi escludere le regole del profilo per classi e metodi che fanno parte di altre dipendenze dell'app di esempio o della libreria stessa. I filtri possono includere ed escludere pacchetti e classi specifici. Quando specifichi solo le esclusioni, vengono escluse solo le regole del profilo di riferimento corrispondenti e tutto il resto viene incluso.
La specifica dei filtri può essere una delle seguenti:
- Nome del pacchetto che termina con doppi caratteri jolly per corrispondere al pacchetto specificato e a tutti i sottopacchetti. Ad esempio,
com.example.**
corrisponde acom.example.method
ecom.example.method.bar
. - Nome del pacchetto che termina con un carattere jolly per corrispondere solo al pacchetto specificato. Ad esempio,
com.example.*
corrisponde acom.example.method
, ma non acom.example.method.bar
. - Nomi di classi corrispondenti a una classe specifica, ad esempio
com.example.MyClass
.
Gli esempi riportati di seguito mostrano come includere ed escludere pacchetti specifici:
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.**' } }
Personalizza le regole di filtro per le diverse varianti come segue:
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.**' } } } }
Puoi anche filtrare le regole utilizzando l'argomento filterPredicate
in
BaselineProfileRule.collect()
, ma ti consigliamo di utilizzare il plug-in Gradle per
filtrare perché offre un modo più semplice per filtrare i sottopacchetti e un unico
luogo per configurare l'intero modulo.
Personalizzare i tipi di build del benchmark e del profilo di baseline
Il plug-in Gradle Baseline Profile crea tipi di build aggiuntivi per generare i profili ed eseguire i benchmark. Questi tipi di build hanno il prefisso
benchmark
e nonMinified
. Ad esempio, per il tipo di build release
, il plug-in crea i tipi di build benchmarkRelease
e nonMinifiedRelease
.
Questi tipi di build vengono configurati automaticamente per il caso d'uso specifico e generalmente non richiedono alcuna personalizzazione. Tuttavia, in alcuni casi potrebbe essere utile applicare alcune opzioni personalizzate, ad esempio per applicare una configurazione di firma diversa.
Puoi personalizzare i tipi di build generati automaticamente utilizzando un sottoinsieme di proprietà del tipo di build. Le proprietà non utilizzabili vengono sostituite. L'esempio seguente mostra come personalizzare i tipi di compilazione aggiuntivi e le proprietà da sostituire:
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 } } }
Note aggiuntive
Quando crei i profili di riferimento, tieni presente quanto segue:
I profili di riferimento compilati devono avere dimensioni inferiori a 1,5 MB. Questo non si applica al formato di testo nei file di origine, che in genere sono molto più grandi prima della compilazione. Verifica le dimensioni del profilo di riferimento binario individuandolo nell'elemento dell'output in
assets/dexopt/baseline.prof
per APK oBUNDLE-METADATA/com.android.tools.build.profiles/baseline.prof
per AAB.Regole generali che compilano troppa parte dell'applicazione possono rallentare l'avvio a causa dell'aumento dell'accesso al disco. Se stai appena iniziando a utilizzare i profili di riferimento, non preoccuparti. Tuttavia, a seconda dell'app e delle dimensioni e del numero di percorsi, l'aggiunta di molti percorsi può comportare prestazioni suboptimali. Testa il rendimento della tua app provando diversi profili e verifica che il rendimento non peggiori dopo le aggiunte.