กําหนดค่าการสร้างโปรไฟล์พื้นฐาน

ปลั๊กอิน Baseline Profile Gradle ทำให้สร้างและดูแลรักษาได้ง่ายขึ้น โปรไฟล์พื้นฐาน ซึ่งจะช่วยคุณ ทำงานต่อไปนี้

หน้านี้อธิบายวิธีใช้ปลั๊กอิน Baseline Profile Gradle เพื่อปรับแต่ง การสร้างโปรไฟล์พื้นฐานของคุณ

ข้อกำหนดของปลั๊กอิน

ใช้อุปกรณ์ที่มีการจัดการจาก Gradle เพื่อสร้างโปรไฟล์พื้นฐาน

วิธีใช้อุปกรณ์ที่มีการจัดการของ Gradle (GMD) สร้างโปรไฟล์พื้นฐาน ให้เพิ่มโปรไฟล์ในการกำหนดค่า build.gradle.kts โมดูลผู้ผลิตโปรไฟล์ ซึ่งน่าจะเป็นโมดูลทดสอบ :baselineprofile ที่แสดงในตัวอย่างต่อไปนี้

Kotlin

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

ดึงดูด

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

ใช้ GMD เพื่อสร้างโปรไฟล์พื้นฐานโดยการเพิ่มโปรไฟล์ดังกล่าวลงในโปรไฟล์พื้นฐาน กำหนดค่าปลั๊กอิน Gradle ดังนี้

Kotlin

baselineProfile {
    managedDevices += "pixel6Api31"
}

ดึงดูด

baselineProfile {
    managedDevices = ['pixel6Api31']
}

เมื่อคุณใช้ GMD เพื่อสร้างโปรไฟล์พื้นฐาน ให้ตั้งค่า useConnectedDevices เป็น false:

Kotlin

baselineProfile {
    ...
    useConnectedDevices = false
}

ดึงดูด

baselineProfile {
    ...
    useConnectedDevices false
}

สร้างโปรไฟล์พื้นฐานสำหรับตัวแปรต่างๆ

คุณสร้างโปรไฟล์พื้นฐานต่อตัวแปร ต่อเวอร์ชัน หรือเป็นไฟล์เดียวได้ เพื่อใช้กับตัวแปรทั้งหมด ควบคุมลักษณะการทำงานนี้ผ่านการตั้งค่าการผสาน เช่น ที่แสดงในตัวอย่างต่อไปนี้

Kotlin

baselineProfile {
    mergeIntoMain = true
}

ดึงดูด

baselineProfile {
    mergeIntoMain true
}

หากต้องการรวมโปรไฟล์ที่สร้างขึ้นสำหรับตัวแปรทั้งหมดให้เป็นโปรไฟล์เดียว ให้ตั้งค่า mergeIntoMain ไปยัง true สร้างเกณฑ์พื้นฐานต่อตัวแปรไม่ได้ โปรไฟล์เมื่อการตั้งค่านี้คือ true จึงมีงาน Gradle เดียวที่ชื่อ generateBaselineProfile โปรไฟล์จะแสดงผลที่ src/main/generated/baselineProfiles

หากต้องการปิดใช้การผสานรวมและมี 1 โปรไฟล์ต่อตัวแปร ให้ตั้งค่า mergeIntoMain เป็น false ในกรณีนี้มีงาน Gradle เฉพาะตัวแปรอยู่หลายรายการ สำหรับ เช่น เมื่อมี 2 เวอร์ชัน เช่น ฟรีและแบบชำระเงิน และอีกเวอร์ชัน ประเภทบิลด์ที่เผยแพร่ งานมีดังนี้

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

หากต้องการระบุลักษณะการผสานรวมของแต่ละตัวแปร ให้ใช้โค้ดต่อไปนี้

Kotlin

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

ดึงดูด

baselineProfile {
    variants {
        freeRelease {
            mergeIntoMain true
        }
    }
}

ในตัวอย่างก่อนหน้านี้ ตัวแปรที่มีการตั้งค่า Flag เป็น true ทั้งหมดคือ และผสานรวมโปรไฟล์เป็น src/main/generated/baselineProfiles ตัวแปรที่ตั้งค่า Flag เป็น false ไว้ในโฟลเดอร์ src/<variant>/generated/baselineProfiles

ตามค่าเริ่มต้น mergeIntoMain ได้รับการตั้งค่าเป็น true สำหรับไลบรารี และ false สำหรับแอป

สร้างโปรไฟล์พื้นฐานโดยอัตโนมัติเมื่อประกอบรุ่นใหม่

คุณสามารถกําหนดค่าโปรไฟล์พื้นฐานให้สร้างโดยอัตโนมัติสําหรับทุกรุ่นได้ แทนที่จะใช้งาน generateBaselineProfile ด้วยตนเอง ด้วย การสร้างอัตโนมัติ โดยโปรไฟล์ที่อัปเดตล่าสุดจะรวมอยู่ในบิลด์ที่เผยแพร่

หากต้องการเปิดใช้การสร้างอัตโนมัติสำหรับบิลด์ที่เผยแพร่ ให้ใช้ แฟล็ก automaticGenerationDuringBuild รายการ:

Kotlin

baselineProfile {
    automaticGenerationDuringBuild = true
}

ดึงดูด

baselineProfile {
    automaticGenerationDuringBuild true
}

การตั้งค่าแฟล็ก automaticGenerationDuringBuild เป็น true จะทริกเกอร์ สร้างโปรไฟล์พื้นฐานใหม่สำหรับการประกอบการเผยแพร่แต่ละครั้ง ซึ่งหมายความว่า กำลังเรียกใช้งานบิลด์ที่ประกอบขึ้นจากการเผยแพร่ เช่น ./gradlew:app:assembleRelease จะทริกเกอร์ :app:generateReleaseBaselineProfile ด้วย และเริ่มต้นโปรไฟล์พื้นฐาน การทดสอบการวัดคุม และสร้างโปรไฟล์พื้นฐานที่จะนำไปใช้ แม้ว่าการสร้างอัตโนมัติจะช่วยให้ผู้ใช้ได้รับประโยชน์ด้านประสิทธิภาพที่ดีที่สุด ยังเพิ่มเวลาบิลด์เนื่องจากมีโครงสร้างคู่และเครื่องมือ การทดสอบ

คุณยังระบุลักษณะการทำงานนี้สำหรับแต่ละตัวแปรได้ด้วย ดังที่แสดงใน ตัวอย่าง:

Kotlin

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

ดึงดูด

baselineProfile {
    variants {
        freeRelease {
            automaticGenerationDuringBuild true
        }
    }
}

ในตัวอย่างก่อนหน้านี้ งาน generateFreeReleaseBaselineProfile จะเรียกใช้ เมื่อเริ่มต้น assembleFreeRelease วิธีนี้จะช่วยเมื่อผู้ใช้ต้องการ ตัวอย่างเช่น release สำหรับบิลด์การเผยแพร่ที่สร้างโปรไฟล์เสมอ เมื่อสร้าง และบิลด์ releaseWithoutProfile สำหรับการทดสอบภายใน

จัดเก็บโปรไฟล์พื้นฐานไว้ในแหล่งที่มา

คุณจัดเก็บโปรไฟล์พื้นฐานในไดเรกทอรีต้นทางผ่าน saveInSrc ได้ ธง:

  • true: โปรไฟล์พื้นฐานจัดเก็บไว้ใน src/<variant>/generated/baselineProfiles วิธีนี้ช่วยให้คุณคอมมิต สร้างโปรไฟล์ใหม่พร้อมกับแหล่งที่มาของคุณ
  • false: โปรไฟล์พื้นฐานจัดเก็บไว้ในไฟล์ระดับกลางของบิลด์ ไดเรกทอรี วิธีนี้ทำให้คุณไม่ต้องบันทึกโค้ดล่าสุดเมื่อยืนยันรหัส โปรไฟล์ที่สร้างขึ้น

Kotlin

baselineProfile {
    saveInSrc = true
}

ดึงดูด

baselineProfile {
    saveInSrc true
}

คุณยังระบุลักษณะการทำงานนี้ตามตัวแปรได้ด้วย

Kotlin

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

ดึงดูด

baselineProfile {
    variants {
        freeRelease {
            saveInSrc true
        }
    }
}

กรองกฎโปรไฟล์

ปลั๊กอิน Gradle โปรไฟล์พื้นฐานให้คุณกรองกฎของโปรไฟล์พื้นฐานได้ ที่สร้างขึ้น ซึ่งมีประโยชน์อย่างยิ่งสำหรับไลบรารี หากคุณต้องการยกเว้น กฎโปรไฟล์สำหรับคลาสและเมธอดที่เป็นส่วนหนึ่งของทรัพยากร Dependency อื่นๆ ของ แอปตัวอย่างหรือไลบรารี ตัวกรองสามารถรวมและยกเว้น แพ็กเกจและชั้นเรียนต่างๆ เมื่อคุณระบุการยกเว้นเท่านั้น ระบบจะจับคู่เฉพาะเกณฑ์พื้นฐาน ระบบจะยกเว้นกฎโปรไฟล์และรวมทุกอย่างด้วย

ข้อกำหนดตัวกรองสามารถเป็นอย่างใดอย่างหนึ่งต่อไปนี้

  • ชื่อแพ็กเกจที่ลงท้ายด้วยไวลด์การ์ดคู่เพื่อให้ตรงกับแพ็กเกจที่ระบุและ แพ็กเกจย่อยทั้งหมด ตัวอย่างเช่น com.example.** ตรงกับ com.example.method และ com.example.method.bar
  • ชื่อแพ็กเกจที่ลงท้ายด้วยไวลด์การ์ดเพื่อให้ตรงกับแพ็กเกจที่ระบุเท่านั้น สำหรับ ตัวอย่างเช่น com.example.* ตรงกับ com.example.method แต่ไม่ตรงกัน com.example.method.bar
  • ชื่อชั้นเรียนที่ตรงกับชั้นเรียนที่ระบุ เช่น com.example.MyClass

ตัวอย่างต่อไปนี้แสดงวิธีรวมและยกเว้นแพ็กเกจที่เฉพาะเจาะจง

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

ดึงดูด

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

ปรับแต่งกฎตัวกรองสำหรับตัวแปรต่างๆ ดังนี้

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

ดึงดูด

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

คุณยังกรองกฎโดยใช้อาร์กิวเมนต์ filterPredicate ใน BaselineProfileRule.collect() ได้ด้วย แต่เราขอแนะนำให้ใช้ Gradle เนื่องจากเป็นวิธีที่ง่ายกว่าในการกรองแพ็กเกจย่อยและ ที่เดียวเพื่อกำหนดค่าโมดูลทั้งหมด

ปรับแต่งเกณฑ์การเปรียบเทียบและประเภทบิลด์ของโปรไฟล์พื้นฐาน

ปลั๊กอิน Baseline Profile Gradle สร้างประเภทบิลด์เพิ่มเติมเพื่อสร้าง โปรไฟล์และทำการเปรียบเทียบ ประเภทบิลด์เหล่านี้ขึ้นต้นด้วย benchmark และ nonMinified ตัวอย่างเช่น สำหรับบิลด์ release ประเภท ปลั๊กอินจะสร้างประเภทบิลด์ benchmarkRelease และ nonMinifiedRelease ประเภทบิลด์เหล่านี้ได้รับการกําหนดค่าโดยอัตโนมัติสําหรับ Use Case ที่เฉพาะเจาะจง และ ไม่จำเป็นต้องมีการปรับแต่งใดๆ แต่ในบางกรณี การใช้ตัวเลือกที่กำหนดเองอาจมีประโยชน์อยู่บ้าง เช่น การใช้ การกำหนดค่าการลงชื่อต่างกัน

คุณปรับแต่งประเภทบิลด์ที่สร้างขึ้นโดยอัตโนมัติได้โดยใช้ชุดย่อยของ พร็อพเพอร์ตี้ประเภทบิลด์ พร็อพเพอร์ตี้ที่ใช้งานไม่ได้จะถูกลบล้าง ตัวอย่างต่อไปนี้แสดงวิธีปรับแต่งประเภทบิลด์เพิ่มเติมและ พร็อพเพอร์ตี้ใดถูกลบล้าง

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

ดึงดูด

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

หมายเหตุเพิ่มเติม

สิ่งที่ควรทราบเมื่อสร้างโปรไฟล์พื้นฐานมีดังนี้

  • โปรไฟล์พื้นฐานที่คอมไพล์แล้วต้องมีขนาดเล็กกว่า 1.5 MB การดำเนินการนี้จะไม่ กับรูปแบบข้อความในไฟล์ต้นฉบับของคุณ ซึ่งมัก ใหญ่กว่าเดิมก่อนการคอมไพล์ ยืนยันขนาดของเลขฐานสอง ด้วยการค้นหาโปรไฟล์ในอาร์ติแฟกต์เอาต์พุตภายใต้ assets/dexopt/baseline.profสำหรับ APK หรือ BUNDLE-METADATA/com.android.tools.build.profiles/baseline.prof สำหรับ AAB

  • กฎกว้างๆ ที่คอมไพล์แอปพลิเคชันมากเกินไปอาจทำให้การเริ่มต้นทำงานช้าลง เนื่องจากการเข้าถึงดิสก์เพิ่มขึ้น หากเพิ่งเริ่มใช้เกณฑ์พื้นฐาน โปรไฟล์ โปรดอย่ากังวล อย่างไรก็ตาม ขึ้นอยู่กับแอปและ ขนาดและจำนวนเส้นทาง การเพิ่มเส้นทาง จำนวนมากอาจทําให้ ประสิทธิภาพต่ำกว่าที่ควรจะเป็น ทดสอบประสิทธิภาพของแอปโดยลอง และตรวจสอบว่าประสิทธิภาพไม่ถดถอยหลังจาก การเพิ่ม

Codelab

เจาะลึกการเปรียบเทียบมาโครเพื่อวัดประสิทธิภาพ
สร้างโปรไฟล์พื้นฐานที่กำหนดเองซึ่งปรับแต่งให้เหมาะกับแอป Android และยืนยันประสิทธิภาพของแอป