เราขอแนะนำอย่างยิ่งให้สร้างกฎโปรไฟล์โดยอัตโนมัติโดยใช้ไลบรารี Jetpack Macrobenchmark เพื่อลดการทำงานด้วยตนเองและเพิ่มความสามารถในการปรับขนาดโดยทั่วไป อย่างไรก็ตาม คุณสามารถสร้างและวัดกฎโปรไฟล์ในแอปด้วยตนเองได้
กำหนดกฎโปรไฟล์ด้วยตนเอง
คุณสามารถกำหนดกฎโปรไฟล์ด้วยตนเองในแอปหรือโมดูลไลบรารีได้โดยสร้างไฟล์ชื่อ baseline-prof.txt ซึ่งอยู่ในไดเรกทอรี src/main ซึ่งเป็นโฟลเดอร์เดียวกับที่มีไฟล์ AndroidManifest.xml
ไฟล์จะระบุ 1 กฎต่อบรรทัด กฎแต่ละข้อแสดงถึงรูปแบบสำหรับเมธอดหรือคลาสที่ตรงกันในแอปหรือไลบรารีที่ต้องเพิ่มประสิทธิภาพ
ไวยากรณ์สำหรับกฎเหล่านี้เป็นซูเปอร์เซ็ตของรูปแบบโปรไฟล์ ART ที่มนุษย์อ่านได้ (HRF) เมื่อใช้ adb shell profman --dump-classes-and-methods ไวยากรณ์จะคล้ายกับไวยากรณ์สำหรับข้อบ่งชี้และลายเซ็น แต่จะอนุญาตให้ใช้อักขระไวลด์การ์ดเพื่อลดความซับซ้อนของกระบวนการเขียนกฎ
ตัวอย่างต่อไปนี้แสดงกฎโปรไฟล์พื้นฐานบางส่วนที่รวมอยู่ในไลบรารี Jetpack Compose
HSPLandroidx/compose/runtime/ComposerImpl;->updateValue(Ljava/lang/Object;)V
HSPLandroidx/compose/runtime/ComposerImpl;->updatedNodeCount(I)I
HLandroidx/compose/runtime/ComposerImpl;->validateNodeExpected()V
PLandroidx/compose/runtime/CompositionImpl;->applyChanges()V
HLandroidx/compose/runtime/ComposerKt;->findLocation(Ljava/util/List;I)I
Landroidx/compose/runtime/ComposerImpl;
คุณลองแก้ไขกฎโปรไฟล์ได้ในโปรเจ็กต์ Compiler Explorer ตัวอย่างนี้ โปรดทราบว่า Compiler Explorer รองรับเฉพาะรูปแบบโปรไฟล์ ART ที่มนุษย์อ่านได้ (HRF) เท่านั้น จึงไม่รองรับไวลด์การ์ด
ไวยากรณ์ของกฎ
กฎเหล่านี้ใช้รูปแบบใดรูปแบบหนึ่งจาก 2 รูปแบบเพื่อกำหนดเป้าหมายเมธอดหรือคลาส ดังนี้
[FLAGS][CLASS_DESCRIPTOR]->[METHOD_SIGNATURE]
กฎคลาสจะใช้รูปแบบต่อไปนี้
[CLASS_DESCRIPTOR]
ดูคำอธิบายโดยละเอียดได้ในตารางต่อไปนี้
| ไวยากรณ์ | คำอธิบาย |
|---|---|
FLAGS |
แสดงอักขระ H, S และ P อย่างน้อย 1 ตัวเพื่อระบุว่าต้องแจ้งว่าเมธอดนี้เป็น Hot, Startup หรือ Post Startup เกี่ยวกับประเภทการเริ่มต้นระบบหรือไม่ เมธอดที่มีแฟล็ก H บ่งบอกว่าเป็นเมธอด "ยอดนิยม" ซึ่งหมายความว่ามีการเรียกใช้เมธอดหลายครั้งตลอดอายุการใช้งานของแอป เมธอดที่มีแฟล็ก S บ่งบอกว่าเป็นเมธอดที่เรียกใช้เมธอดระหว่างการเริ่มต้นระบบ เมธอดที่มีแฟล็ก P บ่งบอกว่าเป็นเมธอดที่เรียกใช้หลังจากเริ่มต้นระบบ คลาสที่อยู่ในไฟล์นี้บ่งบอกว่ามีการใช้งานระหว่างการเริ่มต้นระบบ และต้องจัดสรรไว้ล่วงหน้าในฮีปเพื่อหลีกเลี่ยงค่าใช้จ่ายในการโหลดคลาส คอมไพเลอร์ ART ใช้กลยุทธ์การเพิ่มประสิทธิภาพที่หลากหลาย เช่น การคอมไพล์ AOT ของเมธอดเหล่านี้และการเพิ่มประสิทธิภาพเลย์เอาต์ในไฟล์ AOT ที่สร้างขึ้น |
CLASS_DESCRIPTOR |
ข้อบ่งชี้สำหรับคลาสของเมธอดที่กำหนดเป้าหมาย เช่น androidx.compose.runtime.SlotTable มีข้อบ่งชี้เป็น Landroidx/compose/runtime/SlotTable; ระบบจะใส่ L ไว้ข้างหน้าตามรูปแบบ Dalvik Executable (DEX) |
METHOD_SIGNATURE |
ซิกเนเจอร์ของเมธอด ซึ่งรวมถึงชื่อ ประเภทพารามิเตอร์ และประเภทการแสดงผลของเมธอด ตัวอย่างเช่น// LayoutNode.kt fun isPlaced():Boolean { // ...} ใน LayoutNode มีลายเซ็น isPlaced()Z |
รูปแบบเหล่านี้สามารถมีไวลด์การ์ดเพื่อให้กฎเดียวครอบคลุมเมธอดหรือคลาสหลายรายการ หากต้องการความช่วยเหลือแบบมีคำแนะนำเมื่อเขียนด้วยไวยากรณ์ของกฎใน Android Studio โปรดดูปลั๊กอิน Android Baseline Profiles
ตัวอย่างของกฎไวลด์การ์ดอาจมีลักษณะดังนี้
HSPLandroidx/compose/ui/layout/**->**(**)**
ประเภทที่รองรับในกฎโปรไฟล์พื้นฐาน
กฎ Baseline Profile รองรับประเภทต่อไปนี้ ดูรายละเอียดเกี่ยวกับประเภทเหล่านี้ได้ที่รูปแบบ Dalvik Executable (DEX)
| ตัวละคร | ประเภท | คำอธิบาย |
|---|---|---|
B |
ไบต์ | ไบต์ที่มีเครื่องหมาย |
C |
char | Code Point ของอักขระ Unicode ที่เข้ารหัสใน UTF-16 |
D |
คู่ | ค่าจุดลอยตัวที่มีความแม่นยำแบบ Double |
F |
float | ค่าจุดลอยตัวความแม่นยำเดี่ยว |
I |
Int | จำนวนเต็ม |
J |
ยาว | จำนวนเต็มแบบยาว |
S |
วิดีโอสั้น | Shorts ที่ลงชื่อเข้าใช้ |
V |
void | เป็นโมฆะ |
Z |
บูลีน | จริงหรือเท็จ |
L (ชื่อชั้นเรียน) |
การอ้างอิง | อินสแตนซ์ของชื่อคลาส |
นอกจากนี้ ไลบรารียังกำหนดกฎที่แพ็กเกจในอาร์ติแฟกต์ AAR ได้ด้วย เมื่อคุณสร้าง APK เพื่อรวมอาร์ติแฟกต์เหล่านี้ ระบบจะผสานกฎเข้าด้วยกัน ซึ่งคล้ายกับวิธีการผสานไฟล์ Manifest และคอมไพล์เป็นโปรไฟล์ ART แบบไบนารีขนาดกะทัดรัดซึ่งเจาะจงสำหรับ APK
ART จะใช้ประโยชน์จากโปรไฟล์นี้เมื่อใช้ APK ในอุปกรณ์เพื่อคอมไพล์ AOT ของแอปบางส่วนที่เฉพาะเจาะจง ณ เวลาติดตั้งใน Android 9 (ระดับ API 28) หรือ Android 7 (ระดับ API 24) เมื่อใช้ ProfileInstaller
รวบรวมโปรไฟล์พื้นฐานด้วยตนเอง
คุณสามารถสร้างโปรไฟล์พื้นฐานด้วยตนเองโดยไม่ต้องตั้งค่าไลบรารี Macrobenchmark และสร้างการทำงานอัตโนมัติของ UI สำหรับเส้นทางของผู้ใช้ที่สำคัญ แม้ว่าเราจะแนะนำให้ใช้ Macrobenchmark แต่ก็อาจทำไม่ได้เสมอไป เช่น หากใช้ระบบบิลด์ที่ไม่ใช่ Gradle คุณจะใช้ปลั๊กอิน Gradle ของโปรไฟล์พื้นฐานไม่ได้ ในกรณีเช่นนี้ คุณสามารถรวบรวมกฎโปรไฟล์พื้นฐานด้วยตนเองได้ ซึ่งจะทำได้ง่ายขึ้นมากหากคุณใช้อุปกรณ์หรือโปรแกรมจำลองที่ใช้ API 34 ขึ้นไป แม้ว่าจะยังคงทำได้ด้วยระดับ API ที่ต่ำกว่า แต่ก็ต้องมีสิทธิ์เข้าถึงระดับรูท และคุณต้องใช้โปรแกรมจำลองที่เรียกใช้รูปภาพ AOSP คุณสามารถรวบรวมกฎได้โดยตรงโดยทำดังนี้
- ติดตั้งแอปเวอร์ชันที่เผยแพร่ในอุปกรณ์ทดสอบ ประเภทบิลด์ของแอปต้องไม่ได้รับการเพิ่มประสิทธิภาพด้วย R8 และต้องไม่แก้ไขข้อบกพร่องได้เพื่อบันทึกโปรไฟล์ที่ระบบบิลด์ใช้ได้
- ปิดใช้การติดตั้งโปรไฟล์และปิดแอป
หาก APK ของคุณขึ้นอยู่กับไลบรารี Jetpack Profile Installer ไลบรารีจะบูตสแตรปโปรไฟล์ในการเปิด APK ครั้งแรก ซึ่งอาจรบกวนกระบวนการสร้างโปรไฟล์ ดังนั้นให้ปิดใช้ด้วยคำสั่งต่อไปนี้
adb shell am broadcast -a androidx.profileinstaller.action.SKIP_FILE WRITE_SKIP_FILE $PACKAGE_NAME/androidx.profileinstaller.ProfileInstallReceiver
รีเซ็ตการคอมไพล์แอปและล้างโปรไฟล์ทั้งหมด
API 34 ขึ้นไป
adb shell cmd package compile -f -m verify $PACKAGE_NAME adb shell pm art clear-app-profiles $PACKAGE_NAME
API ระดับ 33 และต่ำกว่า
adb root adb shell cmd package compile --reset $PACKAGE_NAME
เรียกใช้แอปและไปยังเส้นทางของผู้ใช้ที่สําคัญซึ่งคุณต้องการรวบรวมโปรไฟล์ด้วยตนเอง
รออย่างน้อย 5 วินาทีเพื่อให้โปรไฟล์เสถียร
ดำเนินการบันทึกและรอให้การบันทึกเสร็จสมบูรณ์ หาก APK ของคุณขึ้นอยู่กับไลบรารี Jetpack Profile Installer ให้ใช้ไลบรารีดังกล่าวเพื่อดัมป์โปรไฟล์ ดังนี้
หากไม่ได้ใช้ Profile Installer ให้ดัมพ์โปรไฟล์ด้วยตนเองในโปรแกรมจำลองโดยใช้คำสั่งต่อไปนี้adb shell am broadcast -a androidx.profileinstaller.action.SAVE_PROFILE $PACKAGE_NAME/androidx.profileinstaller.ProfileInstallReceiver sleep 1 # wait 1 second adb shell am force-stop $PACKAGE_NAME
adb root adb shell killall -s SIGUSR1 $PACKAGE_NAME sleep 1 # wait 1 second adb shell am force-stop $PACKAGE_NAME
แปลงโปรไฟล์ไบนารีที่สร้างขึ้นเป็นข้อความโดยทำดังนี้
API 34 ขึ้นไป
adb shell pm dump-profiles --dump-classes-and-methods $PACKAGE_NAME
API ระดับ 33 และต่ำกว่า
ตรวจสอบว่ามีการสร้างโปรไฟล์อ้างอิงหรือโปรไฟล์ปัจจุบันแล้วหรือยัง โปรไฟล์อ้างอิงจะอยู่ในตำแหน่งต่อไปนี้
/data/misc/profiles/ref/$$PACKAGE_NAME/primary.prof
โปรไฟล์ปัจจุบันอยู่ในตำแหน่งต่อไปนี้
/data/misc/profiles/cur/0/$PACKAGE_NAME/primary.prof
ระบุตำแหน่งของ APK โดยทำดังนี้
adb root adb shell pm path $PACKAGE_NAME
ดำเนินการแปลง:
adb root adb shell profman --dump-classes-and-methods --profile-file=$PROFILE_PATH --apk=$APK_PATH > /data/misc/profman/$PACKAGE_NAME-primary.prof.txt
ใช้
adbเพื่อดึงข้อมูลโปรไฟล์ที่ดัมพ์จากอุปกรณ์adb pull /data/misc/profman/$PACKAGE_NAME-primary.prof.txt PATH_TO_APP_MODULE/src/main/
ซึ่งจะดึงกฎโปรไฟล์ที่สร้างขึ้นและติดตั้งลงในโมดูลแอป ครั้งถัดไปที่คุณสร้างแอป ระบบจะรวมโปรไฟล์พื้นฐานไว้ด้วย ตรวจสอบปัญหานี้โดยทำตามขั้นตอนในปัญหาเกี่ยวกับการติดตั้ง
วัดการปรับปรุงแอปด้วยตนเอง
เราขอแนะนำอย่างยิ่งให้คุณวัดการปรับปรุงแอปผ่านการเปรียบเทียบ อย่างไรก็ตาม หากต้องการวัดการปรับปรุงด้วยตนเอง คุณสามารถเริ่มต้นด้วยการวัดการเริ่มต้นแอปที่ไม่ได้เพิ่มประสิทธิภาพเพื่อใช้เป็นข้อมูลอ้างอิง
PACKAGE_NAME=com.example.app# Force Stop App adb shell am force-stop $PACKAGE_NAME # Reset compiled state adb shell cmd package compile --reset $PACKAGE_NAME# Measure App startup # This corresponds to `Time to initial display` metric. adb shell am start-activity -W -n $PACKAGE_NAME/.ExampleActivity \ | grep "TotalTime"
ถัดไป ให้ไซด์โหลดโปรไฟล์พื้นฐาน
# Unzip the Release APK first. unzip release.apk# Create a ZIP archive. # The name should match the name of the APK. # Copy `baseline.prof{m}` and rename it `primary.prof{m}`. cp assets/dexopt/baseline.prof primary.prof cp assets/dexopt/baseline.profm primary.profm# Create an archive. zip -r release.dm primary.prof primary.profm# Confirm that release.dm only contains the two profile files: unzip -l release.dm # Archive: release.dm # Length Date Time Name # --------- ---------- ----- ---- # 3885 1980-12-31 17:01 primary.prof # 1024 1980-12-31 17:01 primary.profm # --------- ------- # 2 files# Install APK + Profile together. adb install-multiple release.apk release.dm
หากต้องการยืนยันว่าแพ็กเกจได้รับการเพิ่มประสิทธิภาพเมื่อติดตั้งแล้ว ให้เรียกใช้คำสั่งต่อไปนี้
# Check dexopt state.
adb shell dumpsys package dexopt | grep -A 1 $PACKAGE_NAMEเอาต์พุตต้องระบุว่าคอมไพล์แพ็กเกจแล้ว ดังนี้
[com.example.app]
path: /data/app/~~YvNxUxuP2e5xA6EGtM5i9A==/com.example.app-zQ0tkJN8tDrEZXTlrDUSBg==/base.apk
arm64: [status=speed-profile] [reason=install-dm]
ตอนนี้คุณสามารถวัดประสิทธิภาพการเริ่มต้นแอปได้เหมือนเดิม แต่ไม่ต้องรีเซ็ตสถานะที่คอมไพล์แล้ว ตรวจสอบว่าคุณไม่ได้รีเซ็ตสถานะที่คอมไพล์แล้วสำหรับแพ็กเกจ
# Force stop app adb shell am force-stop $PACKAGE_NAME# Measure app startup adb shell am start-activity -W -n $PACKAGE_NAME/.ExampleActivity \ | grep "TotalTime"
โปรไฟล์พื้นฐานและ profgen
ส่วนนี้จะอธิบายสิ่งที่เครื่องมือ profgen ทำเมื่อสร้างเวอร์ชันไบนารีแบบกะทัดรัดของ Baseline Profile
Profgen-cli ช่วยในการคอมไพล์โปรไฟล์ การตรวจสอบภายใน และการทำ Transpile โปรไฟล์ ART เพื่อให้ติดตั้งในอุปกรณ์ที่ทำงานด้วยระบบ Android ได้ ไม่ว่าจะเป็น SDK เวอร์ชันเป้าหมายใดก็ตาม
Profgen-cli เป็น CLI ที่คอมไพล์ HRF ของโปรไฟล์พื้นฐานเป็นรูปแบบที่คอมไพล์แล้ว นอกจากนี้ CLI ยังมาพร้อมกับที่เก็บ cmdline-tools ซึ่งเป็นส่วนหนึ่งของ Android SDK ด้วย
ฟีเจอร์เหล่านี้พร้อมใช้งานในสาขา studio-main
➜ ../cmdline-tools/latest/bin
apkanalyzer
avdmanager
lint
profgen
retrace
screenshot2
sdkmanager
สร้างโปรไฟล์ไบนารีแบบกะทัดรัดด้วย Profgen-cli
คำสั่งที่ใช้ได้กับ Profgen-cli ได้แก่ bin, validate และ dumpProfile หากต้องการดูคำสั่งที่ใช้ได้ ให้ใช้ profgen --help ดังนี้
➜ profgen --help
Usage: profgen options_list
Subcommands:
bin - Generate Binary Profile
validate - Validate Profile
dumpProfile - Dump a binary profile to a HRF
Options:
--help, -h -> Usage info
ใช้คำสั่ง bin เพื่อสร้างโปรไฟล์ไบนารีแบบกะทัดรัด ตัวอย่างการเรียกใช้มีดังนี้
profgen bin ./baseline-prof.txt \
--apk ./release.apk \
--map ./obfuscation-map.txt \
--profile-format v0_1_0_p \
--output ./baseline.prof \
หากต้องการดูตัวเลือกที่ใช้ได้ ให้ใช้ profgen bin options_list ดังนี้
Usage: profgen bin options_list
Arguments:
profile -> File path to Human Readable profile { String }
Options:
--apk, -a -> File path to apk (always required) { String }
--output, -o -> File path to generated binary profile (always required)
--map, -m -> File path to name obfuscation map { String }
--output-meta, -om -> File path to generated metadata output { String }
--profile-format, -pf [V0_1_0_P] -> The ART profile format version
{ Value should be one of [
v0_1_5_s, v0_1_0_p, v0_0_9_omr1, v0_0_5_o, v0_0_1_n
]
}
--help, -h -> Usage info
อาร์กิวเมนต์แรกแสดงเส้นทางไปยัง HRF ของ baseline-prof.txt
นอกจากนี้ Profgen-cli ยังต้องใช้เส้นทางไปยังบิลด์ที่เผยแพร่ของ APK และการแมปการสร้างความสับสนที่ใช้เพื่อสร้างความสับสนให้กับ APK เมื่อใช้ R8 หรือ Proguard วิธีนี้ช่วยให้ profgen สามารถแปลสัญลักษณ์ต้นทางใน HRF เป็นชื่อที่สร้างความสับสนที่เกี่ยวข้องเมื่อสร้างโปรไฟล์ที่คอมไพล์แล้ว
เนื่องจากรูปแบบโปรไฟล์ ART ไม่สามารถส่งต่อหรือเข้ากันได้แบบย้อนหลัง ให้ระบุรูปแบบโปรไฟล์เพื่อให้ profgen จัดแพ็กเกจข้อมูลเมตาของโปรไฟล์ (profm) ที่คุณสามารถใช้เพื่อแปลงรูปแบบโปรไฟล์ ART หนึ่งเป็นอีกรูปแบบหนึ่งได้เมื่อจำเป็น
รูปแบบโปรไฟล์และเวอร์ชันแพลตฟอร์ม
ตัวเลือกต่อไปนี้จะใช้ได้เมื่อเลือกรูปแบบโปรไฟล์
| รูปแบบโปรไฟล์ | เวอร์ชันของแพลตฟอร์ม | ระดับ API |
|---|---|---|
| v0_1_5_s | Android S ขึ้นไป | 31+ |
| v0_1_0_p | Android P, Q และ R | 28-30 |
| v0_0_9_omr1 | Android O MR1 | 27 |
| v0_0_5_o | Android O | 26 |
| v0_0_1_n | Android N | 24-25 |
คัดลอกไฟล์เอาต์พุต baseline.prof และ baseline.profm ไปยังโฟลเดอร์ assets หรือ dexopt ใน APK
แผนที่การปรับให้ยากต่อการอ่าน (Obfuscation)
คุณต้องระบุแผนที่การสร้างความสับสนก็ต่อเมื่อ HRF ใช้สัญลักษณ์ต้นทางเท่านั้น หาก HRF สร้างขึ้นจากบิลด์ที่เผยแพร่ซึ่งมีการสร้างความสับสนอยู่แล้วและไม่จำเป็นต้องมีการแมป คุณสามารถข้ามตัวเลือกนั้นและคัดลอกเอาต์พุตไปยังโฟลเดอร์ assets หรือ dexopt ได้
การติดตั้งโปรไฟล์พื้นฐานแบบดั้งเดิม
โดยปกติแล้ว ระบบจะส่ง Baseline Profile ไปยังอุปกรณ์ด้วยวิธีใดวิธีหนึ่งจาก 2 วิธี
ใช้ install-multiple กับ DexMetadata
ในอุปกรณ์ที่ใช้ API 28 ขึ้นไป ไคลเอ็นต์ Play จะดาวน์โหลด APK และเพย์โหลด DexMetadata (DM) สำหรับเวอร์ชัน APK ที่กำลังติดตั้ง DM มีข้อมูลโปรไฟล์ที่ส่งไปยังเครื่องมือจัดการแพ็กเกจในอุปกรณ์
APK และ DM จะได้รับการติดตั้งเป็นส่วนหนึ่งของเซสชันการติดตั้งเดียวโดยใช้คำสั่งต่อไปนี้
adb install-multiple base.apk base.dm
Jetpack ProfileInstaller
ในอุปกรณ์ที่ใช้ระดับ API 29 ขึ้นไป ไลบรารี Jetpack ProfileInstaller จะมีกลไกทางเลือกในการติดตั้งโปรไฟล์ที่รวมอยู่ใน assetsหรือ dexopt หลังจากติดตั้ง APK ในอุปกรณ์แล้ว ProfileInstaller จะถูกเรียกใช้โดย ProfileInstallReceiver หรือโดยแอปโดยตรง
ไลบรารี ProfileInstaller จะแปลงโปรไฟล์ตามเวอร์ชัน SDK ของอุปกรณ์เป้าหมาย และคัดลอกโปรไฟล์ไปยังไดเรกทอรี cur ในอุปกรณ์ (ไดเรกทอรีสำหรับการทดลองใช้เฉพาะแพ็กเกจสำหรับโปรไฟล์ ART ในอุปกรณ์)
เมื่ออุปกรณ์ไม่มีการใช้งาน โปรไฟล์จะถูกเลือกโดยกระบวนการที่เรียกว่า bg-dexopt ในอุปกรณ์
ไซด์โหลดโปรไฟล์พื้นฐาน
ส่วนนี้จะอธิบายวิธีติดตั้ง Baseline Profile ที่มี APK
ประกาศด้วย androidx.profileinstaller
ในอุปกรณ์ที่ใช้ API 24 ขึ้นไป คุณสามารถประกาศคำสั่งเพื่อติดตั้งโปรไฟล์ได้ดังนี้
# Broadcast the install profile command - moves binary profile from assets
# to a location where ART uses it for the next compile.
# When successful, the following command prints "1":
adb shell am broadcast \
-a androidx.profileinstaller.action.INSTALL_PROFILE \
<pkg>/androidx.profileinstaller.ProfileInstallReceiver
# Kill the process
am force-stop <pkg>
# Compile the package based on profile
adb shell cmd package compile -f -m speed-profile <pkg>
ProfileInstaller ไม่ปรากฏใน APK ส่วนใหญ่ที่มีโปรไฟล์พื้นฐาน ซึ่งมีอยู่ในแอปประมาณ 7.7 หมื่นแอปจาก 4.5 แสนแอปใน Play แม้ว่าจะปรากฏใน APK ทุกรายการที่ใช้ Compose อย่างมีประสิทธิภาพก็ตาม เนื่องจากไลบรารีสามารถจัดทำโปรไฟล์ได้โดยไม่ต้องประกาศทรัพยากร Dependency ใน ProfileInstaller การเพิ่มทรัพยากร Dependency ในแต่ละไลบรารีที่มีโปรไฟล์จะมีผลตั้งแต่ Jetpack เป็นต้นไป
ใช้ install-multiple กับ profgen หรือ DexMetaData
ในอุปกรณ์ที่ใช้ API 28 ขึ้นไป คุณสามารถไซด์โหลดโปรไฟล์พื้นฐานได้โดยไม่ต้องมีไลบรารี ProfileInstaller ในแอป
โดยใช้ Profgen-cli ดังนี้
profgen extractProfile \
--apk app-release.apk \
--output-dex-metadata app-release.dm \
--profile-format V0_1_5_S # Select based on device and the preceding table.
# Install APK and the profile together
adb install-multiple appname-release.apk appname-release.dm
หากต้องการรองรับ APK แยก ให้เรียกใช้ขั้นตอนการแยกโปรไฟล์ก่อนหน้า 1 ครั้งต่อ APK เมื่อติดตั้ง ให้ส่ง APK แต่ละรายการและไฟล์ .dm ที่เกี่ยวข้อง โดยตรวจสอบว่าชื่อ APK และ .dm ตรงกัน
adb install-multiple appname-base.apk appname-base.dm \
appname-split1.apk appname-split1.dm
การยืนยัน
หากต้องการยืนยันว่าติดตั้งโปรไฟล์อย่างถูกต้องแล้ว คุณสามารถใช้ขั้นตอนจากวัดการปรับปรุงแอปด้วยตนเอง
ดัมพ์เนื้อหาของโปรไฟล์ไบนารี
หากต้องการตรวจสอบเนื้อหาของ Baseline Profile เวอร์ชันไบนารีแบบกะทัดรัด ให้ใช้ตัวเลือก Profgen-cli dumpProfile ดังนี้
Usage: profgen dumpProfile options_list
Options:
--profile, -p -> File path to the binary profile (always required)
--apk, -a -> File path to apk (always required) { String }
--map, -m -> File path to name obfuscation map { String }
--strict, -s [true] -> Strict mode
--output, -o -> File path for the HRF (always required) { String }
--help, -h -> Usage info
dumpProfile ต้องใช้ APK เนื่องจากรูปแบบไบนารีแบบกะทัดรัดจะจัดเก็บเฉพาะออฟเซ็ต DEX เท่านั้น จึงต้องใช้ APK เพื่อสร้างชื่อคลาสและเมธอดใหม่
โหมดเข้มงวดจะเปิดใช้โดยค่าเริ่มต้น และจะตรวจสอบความเข้ากันได้ของโปรไฟล์กับไฟล์ DEX ใน APK หากคุณพยายามแก้ไขข้อบกพร่องของโปรไฟล์ที่สร้างโดยเครื่องมืออื่น คุณอาจพบความล้มเหลวด้านความเข้ากันได้ซึ่งทำให้คุณไม่สามารถดัมพ์เพื่อตรวจสอบได้ ในกรณีดังกล่าว คุณสามารถปิดใช้โหมดเข้มงวดด้วย --strict false อย่างไรก็ตาม ในกรณีส่วนใหญ่ คุณควรเปิดใช้โหมดเข้มงวดไว้
แผนที่การสร้างความสับสนเป็นตัวเลือกที่ไม่บังคับ แต่หากระบุไว้จะช่วยแมปสัญลักษณ์ที่สร้างความสับสนใหม่เป็นเวอร์ชันที่มนุษย์อ่านได้เพื่อให้ใช้งานง่าย
แนะนำสำหรับคุณ
- หมายเหตุ: ข้อความลิงก์จะแสดงเมื่อ JavaScript ปิดอยู่
- แนวทางปฏิบัติแนะนำสำหรับประสิทธิภาพของ SQLite
- โปรไฟล์พื้นฐาน {:#baseline-profiles}
- Wake Lock แบบต่อเนื่องบางส่วน