Temel Profil oluşturmayı yapılandırma

Baseline Profile Gradle eklentisi, Temel Profiller oluşturmayı ve sürdürmeyi kolaylaştırır. Aşağıdaki görevleri yapmanıza yardımcı olur:

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

Eklenti gereksinimleri

Temel Profiller oluşturmak için Gradle Yönetilen Cihazlar Kullanın

Temel Profilinizi oluşturmak amacıyla Gradle Yönetilen Cihazı (GMD) kullanmak için profil üretici modülünün build.gradle.kts yapılandırmasına (büyük olasılıkla :baselineprofile test modülü) aşağıdaki örnekte gösterildiği gibi bir cihaz ekleyin:

Kotlin

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

Modern

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

GMD'yi, Baseline Profile Graadle eklenti yapılandırmasına aşağıdaki şekilde ekleyerek Temel Profil oluşturmak için kullanın:

Kotlin

baselineProfile {
    managedDevices += "pixel6Api31"
}

Modern

baselineProfile {
    managedDevices = ['pixel6Api31']
}

Temel Profiller oluşturmak için GMD kullanırken useConnectedDevices değerini false olarak ayarlayın:

Kotlin

baselineProfile {
    ...
    useConnectedDevices = false
}

Modern

baselineProfile {
    ...
    useConnectedDevices false
}

Farklı varyantlar için Temel Profiller oluşturun

Temel Profilleri varyant veya tür başına ya da tüm varyantlardan yararlanmak için tek bir dosya olarak oluşturabilirsiniz. Bu davranışı, aşağıdaki örnekte gösterildiği gibi birleştirme ayarıyla kontrol edin.

Kotlin

baselineProfile {
    mergeIntoMain = true
}

Modern

baselineProfile {
    mergeIntoMain true
}

Tüm varyantlar için oluşturulan profilleri tek bir profilde birleştirmek üzere mergeIntoMain değerini true olarak ayarlayın. Bu ayar true olduğunda, varyant başına Referans Profiller oluşturulamaz. Bu nedenle, generateBaselineProfile adlı tek bir Gradle görevi vardır. Profilin çıktısı src/main/generated/baselineProfiles adresindedir.

Birleştirmeyi devre dışı bırakmak ve varyant başına tek bir profile sahip olmak için mergeIntoMain öğesini false olarak ayarlayın. Bu durumda, varyanta özel birden fazla Gradle görevi vardır. Örneğin, ücretsiz ve ücretli gibi iki sürüm ve bir sürüm derleme türü olduğunda görevler şu şekildedir:

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

Varyant başına birleştirme davranışını belirtmek için aşağıdaki kodu kullanın:

Kotlin

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

Modern

baselineProfile {
    variants {
        freeRelease {
            mergeIntoMain true
        }
    }
}

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

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

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

Temel Profilleri, generateBaselineProfile görevini manuel olarak kullanmak yerine her sürüm oluşturulduğunda otomatik olarak oluşturulacak şekilde yapılandırabilirsiniz. Otomatik oluşturmada, en güncel profil sürüm derlemesine dahil edilir.

Sürüm derlemelerinde otomatik oluşturma özelliğini etkinleştirmek için automaticGenerationDuringBuild işaretini kullanın:

Kotlin

baselineProfile {
    automaticGenerationDuringBuild = true
}

Modern

baselineProfile {
    automaticGenerationDuringBuild true
}

automaticGenerationDuringBuild işaretinin true olarak ayarlanması, her sürüm derlemesi için yeni bir Temel Profil oluşturulmasını tetikler. Bu, ./gradlew:app:assembleRelease gibi bir derleme sürümü derleme görevi çalıştırıldığında :app:generateReleaseBaselineProfile politikasını da tetikler, Temel Profil enstrümantasyon testlerini başlatır ve çalıştırılacağı Temel Profil derlemesini oluşturur. Otomatik oluşturma, kullanıcıların en iyi performans avantajını elde etmesine yardımcı olur. Bununla birlikte, iki kez oluşturma ve araç testleri sayesinde derleme süresini de uzatır.

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

Kotlin

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

Modern

baselineProfile {
    variants {
        freeRelease {
            automaticGenerationDuringBuild true
        }
    }
}

Yukarıdaki örnekte generateFreeReleaseBaselineProfile görevi assembleFreeRelease başlatılırken çalışır. Bu, örneğin kullanıcı, derleme sırasında her zaman profili oluşturan dağıtım derlemesi için release ve dahili test için releaseWithoutProfile derlemesine sahip olmak istediğinde işe yarar.

Temel Profilleri kaynaklarda depola

Temel Profilleri, saveInSrc işaretini kullanarak kaynak dizinde depolayabilirsiniz:

  • true: Temel Profil, src/<variant>/generated/baselineProfiles içinde depolanır. Bu, kaynaklarınızla en son oluşturulan profili kaydetmenize olanak tanır.
  • false: Temel Profil, derleme dizinindeki ara dosyalarda depolanır. Bu şekilde, kodunuzu kaydederken en son oluşturulan profili kaydetmezsiniz.

Kotlin

baselineProfile {
    saveInSrc = true
}

Modern

baselineProfile {
    saveInSrc true
}

Bu davranışı her varyant için de belirtebilirsiniz:

Kotlin

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

Modern

baselineProfile {
    variants {
        freeRelease {
            saveInSrc true
        }
    }
}

Profil kurallarını filtrele

Baseline Profile Gradle eklentisi, oluşturulan Temel Profil kurallarını filtrelemenizi sağlar. Bu, özellikle örnek uygulamanın veya kitaplığın kendisinin diğer bağımlılıklarının parçası olan sınıflar ve yöntemler için profil kurallarını hariç tutmak istiyorsanız kitaplıklar için faydalıdır. Filtreler, belirli paketleri ve sınıfları dahil edebilir ve hariç tutabilir. Yalnızca hariç tutmayı belirttiğinizde, yalnızca eşleşen Temel Profil kuralları hariç tutulur ve diğer her şey dahil edilir.

Filtre spesifikasyonu aşağıdakilerden herhangi biri olabilir:

  • Belirtilen paket ve tüm alt paketleri eşleştirmek için çift joker karakterle biten paket adı. Örneğin com.example.**, com.example.method ve com.example.method.bar ile eşleşir.
  • Yalnızca belirtilen paketi eşleştirmek için joker karakterle biten paket adı. Örneğin com.example.*, com.example.method ile eşleşir ancak com.example.method.bar ile eşleşmez.
  • Belirli bir sınıfla eşleşecek 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.**")
    }
}

Modern

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

Modern

// 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 alt paketleri filtrelemek için daha basit bir yöntem ve modülün tamamını yapılandırmak için tek bir yer sağladığından filtreleme yapmak için Gradle eklentisini kullanmanızı öneririz.

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

Baseline Profile Gradle eklentisi, profilleri oluşturmak ve karşılaştırmaları çalıştırmak için ek derleme türleri oluşturur. Bu derleme türlerinin önünde benchmark ve nonMinified bulunur. Örneğin, eklenti release derleme türü için benchmarkRelease ve nonMinifiedRelease derleme türlerini oluşturur. Bu derleme türleri belirli kullanım alanı için otomatik olarak yapılandırılır ve genellikle herhangi bir özelleştirme gerektirmez. Ancak farklı bir imzalama yapılandırması uygulamak gibi bazı özel seçenekler uygulamak yine de faydalı olabilecek bazı durumlar vardır.

Derleme türü mülklerin bir alt kümesini kullanarak otomatik olarak oluşturulan derleme türlerini özelleştirebilirsiniz. Kullanılabilir olmayan mülkler geçersiz kılınır. Aşağıdaki örnekte ek derleme türlerinin nasıl özelleştirileceği ve hangi özelliklerin geçersiz kılındığı gösterilmektedir:

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

Modern

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 şunlardır:

  • Derlenen Referans Profiller 1,5 MB'tan küçük olmalıdır. Bu durum, genellikle derlemeden önce çok daha büyük olan kaynak dosyalarınızdaki metin biçimi için geçerli değildir. İkili program Temel Profilinizin boyutunu, APK için assets/dexopt/baseline.prof veya AAB için BUNDLE-METADATA/com.android.tools.build.profiles/baseline.prof altındaki çıkış yapısında bularak doğrulayın.

  • Uygulamanın çok fazla miktarda derleyen genel kuralları, artan disk erişimi nedeniyle başlatmayı yavaşlatabilir. Temel Profiller'i kullanmaya yeni başlıyorsanız bu konuda endişelenmeyin. Ancak, uygulamanıza ve yolculukların boyutuna ve sayısına bağlı olarak çok sayıda yolculuk eklemek performansı yetersiz bırakabilir. Farklı profiller deneyerek ve eklemelerden sonra performansın gerilemediğini doğrulayarak uygulamanızın performansını test edin.

Codelab uygulamaları

Performansı ölçmek için makro karşılaştırmayı ayrıntılı olarak inceleyin.
Bir Android uygulaması için özelleştirilmiş bir Temel Profil oluşturun ve bu profilin etkinliğini doğrulayın.