เราขอแนะนำอย่างยิ่งให้ใช้การสร้างกฎโปรไฟล์โดยอัตโนมัติโดยใช้ไลบรารี Macrobenchmark Jetpack เพื่อลด ความพยายามด้วยตนเองและเพิ่มความสามารถในการปรับขนาดทั่วไป อย่างไรก็ตาม คุณสามารถ สร้างและวัดกฎโปรไฟล์ในแอปด้วยตนเองได้
กำหนดกฎโปรไฟล์ด้วยตนเอง
คุณกำหนดกฎโปรไฟล์ได้ด้วยตนเองในแอปหรือโมดูลไลบรารีโดยการสร้าง
ไฟล์ชื่อ baseline-prof.txt
ซึ่งอยู่ในไดเรกทอรี src/main
นี่คือโฟลเดอร์เดียวกับที่มีไฟล์ AndroidManifest.xml
ไฟล์จะระบุกฎ 1 ข้อต่อบรรทัด กฎแต่ละข้อแสดงรูปแบบสำหรับ วิธีการหรือคลาสที่ตรงกันในแอปหรือไลบรารีที่ต้องเพิ่มประสิทธิภาพ
ไวยากรณ์ของกฎเหล่านี้เป็นซูเปอร์เซ็ตของโปรไฟล์ ART ที่มนุษย์อ่านได้
รูปแบบ (HRF) เมื่อใช้ adb shell profman --dump-classes-and-methods
ไวยากรณ์จะคล้ายกับไวยากรณ์สำหรับตัวอธิบายและลายเซ็น แต่จะอนุญาตให้ใช้
อักขระไวด์การ์ดเพื่อลดความซับซ้อนของกระบวนการเขียนกฎ
ตัวอย่างต่อไปนี้แสดงกฎ Baseline Profile บางส่วนที่รวมอยู่ในไลบรารี 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 |
คู่ | ค่าจุดลอยตัวแบบความแม่นยำสองเท่า |
F |
float | ค่าจุดลอยตัวแบบความแม่นยำเดียว |
I |
Int | จำนวนเต็ม |
J |
ยาว | จำนวนเต็มแบบยาว |
S |
วิดีโอสั้น | Shorts ที่ลงนาม |
V |
เป็นโมฆะ | ยกเลิก |
Z |
บูลีน | จริงหรือเท็จ |
L (ชื่อชั้นเรียน) |
ข้อมูลอ้างอิง | อินสแตนซ์ของชื่อคลาส |
นอกจากนี้ ไลบรารียังกำหนดกฎที่รวมอยู่ในอาร์ติแฟกต์ AAR ได้ด้วย เมื่อคุณสร้าง APK เพื่อรวมอาร์ติแฟกต์เหล่านี้ ระบบจะผสานกฎเข้าด้วยกัน ในลักษณะเดียวกับการผสานไฟล์ Manifest และคอมไพล์เป็น โปรไฟล์ ART แบบไบนารีขนาดกะทัดรัดที่เฉพาะเจาะจงสำหรับ APK
ART จะใช้ประโยชน์จากโปรไฟล์นี้เมื่อใช้ APK ในอุปกรณ์เพื่อคอมไพล์ AOT
ชุดย่อยที่เฉพาะเจาะจงของแอปในเวลาที่ติดตั้งบน Android 9 (API ระดับ 28)
หรือ Android 7 (API ระดับ 24) เมื่อใช้
ProfileInstaller
รวบรวมโปรไฟล์พื้นฐานด้วยตนเอง
คุณสร้าง Baseline Profile ได้ด้วยตนเองโดยไม่ต้องตั้งค่าไลบรารี Macrobenchmark และสร้างการทำงานอัตโนมัติของ UI สำหรับเส้นทางของผู้ใช้ที่สำคัญ แม้ว่าเราจะแนะนำให้ใช้ Macrobenchmark แต่ก็อาจไม่สามารถทำได้เสมอไป เช่น หากใช้ระบบบิลด์ที่ไม่ใช่ Gradle คุณจะใช้ปลั๊กอิน Baseline Profile Gradle ไม่ได้ ในกรณีดังกล่าว คุณจะรวบรวมกฎของ Baseline Profile ด้วยตนเองได้ ซึ่งจะง่ายขึ้นมากหากคุณใช้อุปกรณ์หรือโปรแกรมจำลองที่ใช้ API 34 ขึ้นไป แม้ว่าระดับ API ที่ต่ำกว่าจะยังทำได้ แต่ต้องมีสิทธิ์เข้าถึงระดับรูท และคุณต้องใช้โปรแกรมจำลองที่เรียกใช้รูปภาพ AOSP คุณ รวบรวมกฎได้โดยตรงโดยทำดังนี้
- ติดตั้งแอปเวอร์ชันที่เผยแพร่ในอุปกรณ์ทดสอบ ประเภทบิลด์ของแอปต้องไม่ใช่บิลด์ที่เพิ่มประสิทธิภาพด้วย R8 และต้องไม่ใช่บิลด์ที่แก้ไขข้อบกพร่องได้เพื่อบันทึกโปรไฟล์ ที่ระบบบิลด์ใช้ได้
- ปิดใช้การติดตั้งโปรไฟล์และปิดแอป
หาก APK มีทรัพยากร Dependency ในไลบรารี Profile Installer ของ Jetpack ไลบรารีจะเริ่มต้นโปรไฟล์ในการเปิด 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 มีทรัพยากร Dependency ในไลบรารี Jetpack 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/
ซึ่งจะดึงกฎโปรไฟล์ที่สร้างขึ้นและติดตั้งลงในโมดูลแอป ครั้งถัดไปที่คุณสร้างแอป ระบบจะรวม Baseline Profile ไว้ด้วย ยืนยันโดยทำตามขั้นตอนในปัญหาการติดตั้ง
วัดการปรับปรุงแอปด้วยตนเอง
เราขอแนะนำอย่างยิ่งให้คุณวัดการปรับปรุงแอปผ่านการเปรียบเทียบ อย่างไรก็ตาม หากต้องการวัดการปรับปรุงด้วยตนเอง คุณสามารถเริ่มต้นได้โดย วัดการเริ่มต้นแอปที่ยังไม่ได้เพิ่มประสิทธิภาพเพื่อใช้อ้างอิง
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"
จากนั้นให้โหลด Baseline Profile ด้านข้าง
# 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 ช่วยในการคอมไพล์โปรไฟล์ การตรวจสอบ และ การแปลงโปรไฟล์ 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
อาร์กิวเมนต์แรกแสดงเส้นทางไปยัง baseline-prof.txt
HRF
นอกจากนี้ 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
แผนที่การปกปิด
คุณต้องระบุแผนที่การปกปิดแหล่งที่มาก็ต่อเมื่อ HRF ใช้สัญลักษณ์แหล่งที่มา หากสร้าง HRF จากบิลด์รุ่นที่เผยแพร่ซึ่งมีการปกปิดโค้ดอยู่แล้ว และไม่จำเป็นต้องมีการแมป คุณสามารถข้ามตัวเลือกนั้นและคัดลอกเอาต์พุตไปยังโฟลเดอร์ assets
หรือ dexopt
ได้
การติดตั้งโปรไฟล์พื้นฐานแบบเดิม
โดยปกติแล้ว ระบบจะส่งโปรไฟล์พื้นฐานไปยังอุปกรณ์ด้วยวิธีใดวิธีหนึ่งใน 2 วิธีต่อไปนี้
ใช้ install-multiple
กับ DexMetadata
ในอุปกรณ์ที่ใช้ API 28 ขึ้นไป ไคลเอ็นต์ Play จะดาวน์โหลด APK และ เพย์โหลด DexMetadata (DM) สำหรับ APK เวอร์ชันที่กำลังติดตั้ง DM มี ข้อมูลโปรไฟล์ที่ส่งต่อไปยัง Package Manager ในอุปกรณ์
ระบบจะติดตั้ง 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 ส่วนใหญ่ที่มี Baseline Profile ซึ่งอยู่ในแอปประมาณ 77,000 แอปจาก 450,000 แอปใน Play แต่จะอยู่ใน APK ทุกรายการที่ใช้ Compose เนื่องจากไลบรารีสามารถระบุโปรไฟล์ได้โดยไม่ต้องประกาศการขึ้นต่อกันกับ ProfileInstaller การเพิ่มการอ้างอิงในแต่ละ ไลบรารีที่มีโปรไฟล์จะมีผลตั้งแต่ Jetpack เป็นต้นไป
ใช้ install-multiple
กับ profgen หรือ DexMetaData
ในอุปกรณ์ที่ใช้ API 28 ขึ้นไป คุณจะโหลด Baseline Profile ด้านข้างได้โดยไม่ต้องมีไลบรารี 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
การยืนยัน
หากต้องการยืนยันว่าติดตั้งโปรไฟล์อย่างถูกต้องแล้ว คุณสามารถทําตามขั้นตอนจาก วัดผลการปรับปรุงแอปด้วยตนเอง
ทิ้งเนื้อหาของโปรไฟล์ไบนารี
หากต้องการตรวจสอบเนื้อหาของไบนารีเวอร์ชันที่กระชับของ
โปรไฟล์พื้นฐาน ให้ใช้ตัวเลือก 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 แบบต่อเนื่องบางส่วน