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 gibidir:

Kotlin

baselineProfile {
    managedDevices += "pixel6Api31"
}

Eski

baselineProfile {
    managedDevices = ['pixel6Api31']
}

Temel Profiller oluşturmak için GMD kullandığınızda useConnectedDevices öğesini şuna ayarlayın: false:

Kotlin

baselineProfile {
    ...
    useConnectedDevices = false
}

Eski

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ışı, aşağıdaki gibi birleştirme ayarıyla kontrol edin: aşağıdaki örnekte gösterilmiştir.

Kotlin

baselineProfile {
    mergeIntoMain = true
}

Eski

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, uygulamalar için ise false olarak ayarlanmıştı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 derlemelerinde otomatik oluşturmayı etkinleştirmek için automaticGenerationDuringBuild işareti:

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.

Aşağıda gösterildiği gibi bu davranışı varyant başına da belirtebilirsiniz. örnek:

Kotlin

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

Eski

baselineProfile {
    variants {
        freeRelease {
            automaticGenerationDuringBuild true
        }
    }
}

Yukarıdaki örnekte generateFreeReleaseBaselineProfile görevi, assembleFreeRelease başlatılırken. 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 işaretle:

  • true: Temel Profil şurada depolanır: src/<variant>/generated/baselineProfiles. Bu, projeyle ilgili en güncel kaynaklarınızla oluşturulmuş profildir.
  • 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

Baseline Profile Gradle eklentisi sayesinde Temel Profil kurallarını filtreleyebilirsiniz elde edilir. 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ı (örneğin, 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 {
            ...
        }
        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")
        }
        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:

  • Derlenen Temel Profiller 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, performansa sahip olmayabilir. 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.