เราขอแนะนำอย่างยิ่งให้สร้างกฎโปรไฟล์โดยอัตโนมัติโดยใช้ไลบรารี 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 แสดงว่าเป็นเมธอด "Hot" ซึ่งหมายความว่ามีการเรียกใช้หลายครั้งในระหว่างอายุการใช้งานของแอป เมธอดที่มีแฟล็ก 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
ตัวอย่างกฎไวลด์การ์ดอาจมีลักษณะดังนี้
HSPLandroidx/compose/ui/layout/**->**(**)**
ประเภทที่รองรับในกฎโปรไฟล์พื้นฐาน
กฎโปรไฟล์พื้นฐานรองรับประเภทต่อไปนี้ ดูรายละเอียดเกี่ยวกับประเภทเหล่านี้ได้ที่ รูปแบบ Dalvik Executable (DEX)
| อักขระ | ประเภท | คำอธิบาย |
|---|---|---|
B |
ไบต์ | ไบต์แบบมีเครื่องหมาย |
C |
char | Code Point ของอักขระ Unicode ที่เข้ารหัสใน UTF-16 |
D |
คู่ | ค่าจุดลอยตัวแบบความแม่นยำ 2 เท่า |
F |
float | ค่าจุดลอยตัวแบบความแม่นยำเดียว |
I |
Int | จำนวนเต็ม |
J |
ยาว | จำนวนเต็มยาว |
S |
วิดีโอสั้น | วิดีโอสั้นแบบมีเครื่องหมาย |
V |
void | 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 มีทรัพยากร Dependency กับไลบรารี 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 ทำเมื่อสร้างโปรไฟล์พื้นฐานเวอร์ชันไบนารีขนาดกะทัดรัด
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
อาร์กิวเมนต์แรกแสดงถึงเส้นทางไปยัง 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
แผนที่การทำให้สับสน
คุณต้องระบุแผนที่การทำให้สับสนก็ต่อเมื่อ 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 ในอุปกรณ์
โหลดโปรไฟล์พื้นฐานแบบข้าง
ส่วนนี้จะอธิบายวิธีติดตั้งโปรไฟล์พื้นฐานเมื่อมี 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 ส่วนใหญ่ที่มีโปรไฟล์พื้นฐาน ซึ่งคิดเป็นประมาณ 77,000 จาก 450,000 แอปใน 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
การยืนยัน
หากต้องการยืนยันว่าติดตั้งโปรไฟล์อย่างถูกต้องแล้ว ให้ทำตามขั้นตอนจาก วัดการปรับปรุงแอปด้วยตนเอง
ดัมพ์เนื้อหาของโปรไฟล์ไบนารี
หากต้องการตรวจสอบเนื้อหาของโปรไฟล์พื้นฐานเวอร์ชันไบนารีขนาดกะทัดรัด ให้ใช้ตัวเลือก dumpProfile ของ Profgen-cli โดยใช้คำสั่งต่อไปนี้
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 เท่านั้น จึงต้องใช้เพื่อสร้างชื่อคลาสและเมธอดใหม่
โหมดเข้มงวดจะเปิดใช้โดยค่าเริ่มต้น และจะตรวจสอบความเข้ากันได้ของโปรไฟล์กับไฟล์ DEX ใน APK หากคุณพยายามแก้ไขข้อบกพร่องของโปรไฟล์ที่สร้างขึ้นโดยเครื่องมืออื่น คุณอาจพบข้อผิดพลาดด้านความเข้ากันได้ซึ่งจะป้องกันไม่ให้คุณดัมพ์เพื่อตรวจสอบ ในกรณีดังกล่าว คุณสามารถปิดใช้โหมดเข้มงวดด้วย --strict false อย่างไรก็ตาม ในกรณีส่วนใหญ่ คุณควรเปิดใช้โหมดเข้มงวดไว้
แผนที่การทำให้สับสนเป็นตัวเลือก เมื่อระบุไว้ แผนที่จะช่วยในการแมปสัญลักษณ์ที่ทำให้สับสนกลับเป็นเวอร์ชันที่มนุษย์อ่านได้เพื่อให้ใช้งานง่าย
แนะนำสำหรับคุณ
- หมายเหตุ: ข้อความลิงก์จะแสดงเมื่อ JavaScript ปิดอยู่
- แนวทางปฏิบัติแนะนำสำหรับประสิทธิภาพของ SQLite
- โปรไฟล์พื้นฐาน {:#baseline-profiles}
- Wake Lock แบบต่อเนื่องบางส่วน