ปลั๊กอิน Baseline Profile Gradle ทำให้สร้างและดูแลรักษาได้ง่ายขึ้น โปรไฟล์พื้นฐาน ซึ่งจะช่วยคุณ ทำงานต่อไปนี้
- สร้างโปรไฟล์พื้นฐานใหม่สำหรับแอป
- สร้างโปรไฟล์พื้นฐานใหม่สำหรับคลังของคุณ
- ปรับแต่งการสร้างโปรไฟล์พื้นฐาน
หน้านี้จะอธิบายวิธีใช้ปลั๊กอิน Gradle ของโปรไฟล์พื้นฐานเพื่อปรับแต่งการสร้างโปรไฟล์พื้นฐาน
ข้อกำหนดของปลั๊กอิน
- AGP 8.0 ขึ้นไป
- ขึ้นอยู่กับ ปลั๊กอิน 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 ใน build.gradle.kts
ของ
โมดูลทดสอบ :baselineprofile
:
Kotlin
baselineProfile { managedDevices += "pixel6Api31" }
ดึงดูด
baselineProfile { managedDevices = ['pixel6Api31'] }
เมื่อใช้ GMD เพื่อสร้างโปรไฟล์พื้นฐาน ให้ตั้งค่า useConnectedDevices
เป็น false
ในโมดูลการทดสอบ :baselineprofile
Kotlin
baselineProfile { ... useConnectedDevices = false }
ดึงดูด
baselineProfile { ... useConnectedDevices false }
สร้างโปรไฟล์พื้นฐานสําหรับตัวแปรต่างๆ
คุณสามารถสร้างโปรไฟล์พื้นฐานต่อตัวแปร ต่อรุ่น หรือเป็นไฟล์เดียวเพื่อใช้กับตัวแปรทั้งหมด ควบคุมลักษณะการทำงานนี้ผ่านการตั้งค่าการผสาน เช่น
ที่แสดงในตัวอย่างต่อไปนี้ใน build.gradle.kts
ของ
แอปพลิเคชันหรือโมดูลไลบรารี
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 } } }
Groovy
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 }
Groovy
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
ได้
ใน build.gradle.kts
ของแอปพลิเคชันหรือโมดูลไลบรารี:
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 { ... } 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 } } }
ดึงดูด
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กฎกว้างๆ ที่คอมไพล์แอปพลิเคชันมากเกินไปอาจทำให้การเริ่มต้นทำงานช้าลง เนื่องจากการเข้าถึงดิสก์เพิ่มขึ้น หากเพิ่งเริ่มใช้เกณฑ์พื้นฐาน โปรไฟล์ โปรดอย่ากังวล อย่างไรก็ตาม ขึ้นอยู่กับแอปและ ขนาดและจำนวนเส้นทาง การเพิ่มเส้นทาง จำนวนมากอาจทําให้ ประสิทธิภาพต่ำกว่าที่ควรจะเป็น ทดสอบประสิทธิภาพของแอปโดยลอง และตรวจสอบว่าประสิทธิภาพไม่ถดถอยหลังจาก การเพิ่ม