Temel Profil oluşturmayı yapılandırma

Baseline Profile Gradle eklentisi, oluşturma ve yönetme işini kolaylaştırır. Temel Profiller. Hedeflerinize ulaşmanız için gerçekleştirebilirsiniz:

Bu sayfada, özelleştirerek Baseline Profile Gradle eklentisinin nasıl kullanılacağı açıklanmaktadır. Temel Profillerinizin oluşturulması.

Eklenti gereksinimleri

Temel Profiller oluşturmak için Gradle Tarafından Yönetilen Cihazlar kullanma

Gradle Yönetilen Cihazı (GMD) kullanmak için: Temel Profilinizi oluşturun, build.gradle.kts yapılandırmasına bir tane ekleyin profil üretici modülünün (muhtemelen :baselineprofile test modülü) aşağıdaki örnekte gösterilmektedir:

Kotlin

android {
   testOptions.managedDevices.devices {
       create<com.android.build.api.dsl.ManagedVirtualDevice>("pixel6Api31") {
           device = "Pixel 6"
           apiLevel = 31
           systemImageSource = "aosp"
       }
   }
}

Eski

android {
   testOptions.managedDevices.devices {
       pixel6Api31(ManagedVirtualDevice) {
           device 'Pixel 6'
           apiLevel = 31
           systemImageSource 'aosp'
       }
   }
}

Temel Profil'e ekleyerek Temel Profiller oluşturmak için GMD'yi kullanın. Gradle eklentisi yapılandırması aşağıdaki gibi build.gradle.kts :baselineprofile test modülü:

Kotlin

baselineProfile {
    managedDevices += "pixel6Api31"
}

Eski

baselineProfile {
    managedDevices = ['pixel6Api31']
}

Temel Profiller oluşturmak için GMD kullandığınızda useConnectedDevices öğesini şuna ayarlayın: :baselineprofile test modülünüzde false:

Kotlin

baselineProfile {
    ...
    useConnectedDevices = false
}

Groovy

baselineProfile {
    ...
    useConnectedDevices false
}

Farklı varyantlar için temel profiller oluşturun

Temel profilleri varyant, tür başına veya tek dosya olarak oluşturabilirsiniz. tüm varyantlar için geçerlidir. Bu davranışı, uygulama veya kitaplık modülünün build.gradle.kts bölümünde aşağıdaki örnekte gösterildiği gibi birleştirme ayarı üzerinden kontrol edebilirsiniz.

Kotlin

baselineProfile {
    mergeIntoMain = true
}

Groovy

baselineProfile {
    mergeIntoMain true
}

Tüm varyantlar için oluşturulan profilleri tek bir profilde birleştirmek üzere mergeIntoMain - true. Varyant başına Referans Değer oluşturulamaz Profiller bu ayar true olduğunda, dolayısıyla adlı tek bir Gradle görevi vardır generateBaselineProfile. Profilin çıkışı şudur: src/main/generated/baselineProfiles

Birleştirmeyi devre dışı bırakmak ve varyant başına bir profiliniz olması için mergeIntoMain değerini şu değere ayarlayın: false. Bu durumda varyanta özel birden fazla Gradle görevi vardır. Örneğin, Örneğin, ücretsiz ve ücretli olmak üzere iki tat seçeneği olduğunda, sürüm derleme türü olarak, görevler şunlardır:

* `generateFreeReleaseBaselineProfile`
* `generatePaidReleaseBaselineProfile`
* `generateReleaseBaselineProfile`

Her varyant için birleştirme davranışını belirtmek üzere aşağıdaki kodu kullanın:

Kotlin

baselineProfile {
    variants {
        freeRelease {
            mergeIntoMain = true
        }
    }
}

Eski

baselineProfile {
    variants {
        freeRelease {
            mergeIntoMain true
        }
    }
}

Yukarıdaki örnekte, işaretin true olarak ayarlandığı varyantların tümü src/main/generated/baselineProfiles ile birleştirilirken, işaretin false olarak ayarlandığı varyantlar klasörde tutulur src/<variant>/generated/baselineProfiles.

Varsayılan olarak mergeIntoMain, kitaplıklar için true ve uygulamalar için false olarak ayarlanır.

Yeni bir sürüm derlenirken Temel Profilleri otomatik olarak oluştur

Temel Profilleri her sürümde otomatik olarak oluşturulacak şekilde yapılandırabilirsiniz derlemesini kullanmak için generateBaselineProfile görevini manuel olarak kullanabilirsiniz. Entegre otomatik oluşturma işlemiyle birlikte, en güncel profil sürüm derlemesine dahil edilir.

Sürüm derlemeleri için otomatik oluşturmayı etkinleştirmek üzere automaticGenerationDuringBuild işaretini kullanın:

Kotlin

baselineProfile {
    automaticGenerationDuringBuild = true
}

Eski

baselineProfile {
    automaticGenerationDuringBuild true
}

automaticGenerationDuringBuild işaretinin true olarak ayarlanması, Her sürüm derlemesi için yeni bir Temel Profil oluşturma. Bunun anlamı, ./gradlew:app:assembleRelease gibi bir derleme sürümü derleme görevi çalıştırmak :app:generateReleaseBaselineProfile öğesini de tetikler ve Temel Profili başlatır araçları test eder ve bunların üzerinde çalışacakları Temel Profil yapısını oluşturur. Otomatik oluşturma, kullanıcıların en iyi performans avantajını elde etmesine yardımcı olsa da nedeniyle derleme süresini uzatır. testler.

Bu davranışı varyant başına da belirtebilirsiniz. Aşağıdaki örnekte gösterildiği gibi:

Kotlin

baselineProfile {
    variants {
        freeRelease {
            automaticGenerationDuringBuild = true
        }
    }
}

Eski

baselineProfile {
    variants {
        freeRelease {
            automaticGenerationDuringBuild true
        }
    }
}

Önceki örnekte, assembleFreeRelease başlatılırken generateFreeReleaseBaselineProfile görevi çalışır. Bu, kullanıcının istediği zaman örnek, dağıtım için her zaman profil oluşturan bir release ve dahili test için bir releaseWithoutProfile derlemesi olarak kabul edilir.

Temel Profilleri kaynaklarda depolayın

Temel Profilleri kaynak dizinde saveInSrc aracılığıyla depolayabilirsiniz uygulama veya kitaplık modülünün build.gradle.kts öğesinde işaretini kaldırın:

  • true: Temel Profil şurada depolanır: src/<variant>/generated/baselineProfiles. Bu sayede, oluşturulan en son profili kaynaklarınızla birlikte gönderebilirsiniz.
  • false: Temel Profil, derlemedeki ara dosyalarda depolanır dizin. Böylece, kodunuzu uygulamaya koyarken en son oluşturulmuş bir profildir.

Kotlin

baselineProfile {
    saveInSrc = true
}

Eski

baselineProfile {
    saveInSrc true
}

Bu davranışı varyant başına da belirtebilirsiniz:

Kotlin

baselineProfile {
    variants {
        freeRelease {
            saveInSrc = true
        }
    }
}

Eski

baselineProfile {
    variants {
        freeRelease {
            saveInSrc true
        }
    }
}

Profil kurallarını filtrele

Temel Profil Gradle eklentisi, oluşturulan temel profil kurallarını filtrelemenize olanak tanır. Bu, özellikle hariç tutmak istediğiniz kitaplıklar için diğer bağımlılıklarının parçası olan sınıf ve yöntemler için örnek uygulama veya kitaplığın kendisidir. Filtreler belirli verileri içerebilir veya hariç tutabilir ve sınıfları kullanıyor. Yalnızca hariç tutmaları belirttiğinizde yalnızca Referans Değerle eşleşir Profil kuralları hariç tutulur ve diğer her şey dahil edilir.

Filtre özellikleri aşağıdakilerden herhangi biri olabilir:

  • Belirtilen paketle eşleşecek çift joker karakterlerle biten paket adı ve tüm alt paketleri içerir. Örneğin, com.example.** şununla eşleşir: com.example.method ve com.example.method.bar.
  • Yalnızca belirtilen paketle eşleşmesi için joker karakterle biten paket adı. Örneğin, örnek, com.example.* com.example.method ile eşleşiyor ancak eşleşmiyor com.example.method.bar.
  • Belirli bir sınıfla eşleşen sınıf adları (ör. com.example.MyClass).

Aşağıdaki örneklerde, belirli paketlerin nasıl dahil edileceği ve hariç tutulacağı gösterilmektedir:

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.**")
    }
}

Eski

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.**'
    }
}

Farklı varyantlar için filtre kurallarını aşağıdaki gibi özelleştirin:

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.**")
            }
        }
    }
}

Eski

// 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.**'
            }
        }
    }
}

Kuralları BaselineProfileRule.collect() içinde filterPredicate bağımsız değişkenini kullanarak da filtreleyebilirsiniz ancak Gradle kullanmanızı öneririz alt paketleri filtrelemenin daha basit bir yolunu sağladığından ve tek bir yerden kontrol etmenize yardımcı olur.

Karşılaştırma ve Temel Profil oluşturma türlerini özelleştirme

Baseline Profile Gradle eklentisi, yeni reklam oluşturmak için ek derleme türleri karşılaştırmak için kullanabilirsiniz. Bu derleme türlerinin önünde benchmark ve nonMinified. Örneğin, release derleme türü için eklentisi benchmarkRelease ve nonMinifiedRelease derleme türlerini oluşturur. Bu derleme türleri belirli kullanım alanına göre otomatik olarak yapılandırılır ve ve genellikle herhangi bir özelleştirme gerektirmez. Ancak bazı durumlarda bazı özel seçenekler uygulamak (örneğin bir yapılandırmalısınız.

Otomatik olarak oluşturulan derleme türlerini, derleme türü özellikleri; kullanılamayan mülkler geçersiz kılınır. Aşağıdaki örnekte ek derleme türlerinin ve geçersiz kılınan özellikler:

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
        }
    }
}

Eski

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       
        }
    }
}

Ek notlar

Temel Profil oluştururken dikkat etmeniz gereken bazı ek noktalar vardır:

  • Derlenmiş referans profilleri 1,5 MB'tan küçük olmalıdır. Bu iletişim kaynak dosyalarınızdaki metin biçimine uygulanır. Bu, daha büyük oldu. İkili Referans Değerinizin boyutunu doğrulayın Profili aşağıdaki çıktı yapısında bulun ve APK için assets/dexopt/baseline.prof veya AAB için BUNDLE-METADATA/com.android.tools.build.profiles/baseline.prof.

  • Uygulamanın çok fazla kısmını derleyen geniş kapsamlı kurallar, başlangıcı yavaşlatabilir nedeniyle kaybolabilir. Referans Değer ile yeni başlıyorsanız Profiller, bunu düşünmeyin. Ancak uygulamanıza ve daha fazla yolculuk eklemek, olduğunu görebiliriz. Uygulamanızın performansını test etmek için farklı ve performansın geri dönmediğini doğrulayarak eklemeleri gerekir.

Codelab'ler

Performansı ölçmek için makro karşılaştırmayı ayrıntılı şekilde inceleyin.
Android uygulaması için özelleştirilmiş özel bir temel profil oluşturup bu profilin etkinliğini doğrulayın.