เราขอแนะนําอย่างยิ่งให้สร้างกฎโปรไฟล์โดยอัตโนมัติโดยใช้คลัง Macrobenchmark ของ Jetpack เพื่อลดความพยายามที่ต้องทำด้วยตนเองและเพิ่มความยืดหยุ่นทั่วไป อย่างไรก็ตาม คุณสามารถสร้างและวัดกฎโปรไฟล์ในแอปด้วยตนเองได้
กำหนดกฎโปรไฟล์ด้วยตนเอง
คุณสามารถกำหนดกฎโปรไฟล์ด้วยตนเองในแอปหรือโมดูลไลบรารีได้โดยการสร้างไฟล์ชื่อ baseline-prof.txt
ในไดเรกทอรี src/main
ซึ่งเป็นโฟลเดอร์เดียวกับที่มีไฟล์ AndroidManifest.xml
ไฟล์จะระบุกฎ 1 รายการต่อบรรทัด กฎแต่ละข้อแสดงถึงรูปแบบการจับคู่เมธอดหรือคลาสในแอปหรือไลบรารีที่ต้องเพิ่มประสิทธิภาพ
ไวยากรณ์ของกฎเหล่านี้เป็นชุดที่ใหญ่กว่ารูปแบบโปรไฟล์ ART ที่มนุษย์อ่านได้ (HRF) เมื่อใช้ adb shell profman --dump-classes-and-methods
ไวยากรณ์นี้คล้ายกับไวยากรณ์สำหรับข้อบ่งชี้และลายเซ็น แต่ใช้ไวลด์การ์ดเพื่อลดความซับซ้อนของขั้นตอนการเขียนกฎได้
ตัวอย่างต่อไปนี้แสดงกฎของโปรไฟล์พื้นฐานบางส่วนที่รวมอยู่ในคลัง Compose ของ Jetpack
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 ตัวอย่างนี้ โปรดทราบว่าเครื่องมือสํารวจคอมไพเลอร์รองรับเฉพาะรูปแบบโปรไฟล์ ART ที่มนุษย์อ่านได้ (HRF) จึงไม่รองรับไวลด์การ์ด
ไวยากรณ์ของกฎ
กฎเหล่านี้มี 2 รูปแบบเพื่อกำหนดเป้าหมายไปยังเมธอดหรือคลาส
[FLAGS][CLASS_DESCRIPTOR]->[METHOD_SIGNATURE]
กฎระดับชั้นใช้รูปแบบต่อไปนี้
[CLASS_DESCRIPTOR]
ดูคำอธิบายโดยละเอียดในตารางต่อไปนี้
วากยสัมพันธ์ | คำอธิบาย |
---|---|
FLAGS |
แสดงอักขระ H , S และ P อย่างน้อย 1 ตัวเพื่อระบุว่าต้องแจ้งว่าวิธีการนี้เป็น Hot , Startup หรือ Post Startup เกี่ยวกับประเภทการเริ่มต้นหรือไม่ เมธอดที่มี Flag H บ่งบอกว่าเป็นเมธอด "ร้อน" ซึ่งหมายความว่ามีการเรียกใช้หลายครั้งตลอดอายุของแอป เมธอดที่มี Flag S บ่งบอกว่าเป็นเมธอดที่เรียกใช้ระหว่างการเริ่มต้น เมธอดที่มี Flag 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 |
คู่ | ค่าจุดลอยตัวแบบละเอียด |
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
รวบรวมโปรไฟล์พื้นฐานด้วยตนเอง
คุณสามารถสร้างโปรไฟล์พื้นฐานด้วยตนเองได้โดยไม่ต้องตั้งค่าไลบรารี Macrobenchmark และสร้างการทำงานอัตโนมัติของ UI ในเส้นทางของผู้ใช้ที่สําคัญ แม้ว่าเราจะแนะนำให้ใช้การเปรียบเทียบประสิทธิภาพแบบมาโคร แต่คุณอาจใช้ไม่ได้เสมอไป เช่น หากใช้ระบบบิลด์ที่ไม่ใช่ Gradle คุณจะใช้ปลั๊กอิน Gradle ของโปรไฟล์พื้นฐานไม่ได้ ในกรณีเช่นนี้ คุณสามารถรวบรวมกฎของโปรไฟล์พื้นฐานด้วยตนเองได้ ซึ่งจะง่ายขึ้นมากหากคุณใช้อุปกรณ์หรือโปรแกรมจำลองที่ใช้ API ระดับ 34 ขึ้นไป แม้ว่าจะยังเป็นไปได้ด้วย API ระดับต่ำกว่า แต่จะต้องมีสิทธิ์เข้าถึงระดับรูท และต้องใช้โปรแกรมจำลองที่ใช้ภาพ AOSP คุณสามารถรวบรวมกฎได้โดยตรงโดยทำดังนี้
- ติดตั้งแอปเวอร์ชันที่เผยแพร่ในอุปกรณ์ทดสอบ ประเภทบิลด์ของแอปต้องได้รับการเพิ่มประสิทธิภาพ R8 และแก้ไขข้อบกพร่องไม่ได้เพื่อให้โปรไฟล์ถูกต้อง
- ตรวจสอบว่าไม่ได้คอมไพล์โปรไฟล์แล้ว
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
หาก APK ของคุณใช้ไลบรารี Profile Installer ของ Jetpack ไลบรารีจะเริ่มต้นโปรไฟล์เมื่อเปิด APK เป็นครั้งแรก ซึ่งอาจรบกวนกระบวนการสร้างโปรไฟล์ ดังนั้นให้ปิดใช้ด้วยคำสั่งต่อไปนี้
adb shell am broadcast -a androidx.profileinstaller.action.SKIP_FILE $PACKAGE_NAME/androidx.profileinstaller.ProfileInstallReceiver
- เรียกใช้แอปและไปยังส่วนต่างๆ ของเส้นทางของผู้ใช้ที่สําคัญซึ่งคุณต้องการรวบรวมโปรไฟล์ด้วยตนเอง
- แจ้งให้ ART ถ่ายโอนโปรไฟล์ หาก APK ของคุณมีทรัพยากร Dependency ของไลบรารีเครื่องมือติดตั้งโปรไฟล์ Jetpack ให้ใช้ไลบรารีดังกล่าวเพื่อถ่ายโอนโปรไฟล์ ดังนี้
หากไม่ได้ใช้โปรแกรมติดตั้งโปรไฟล์ ให้ถ่ายโอนโปรไฟล์ด้วยตนเองในโปรแกรมจำลองโดยใช้คำสั่งต่อไปนี้adb shell am broadcast -a androidx.profileinstaller.action.SAVE_FILE $PACKAGE_NAME/androidx.profileinstaller.ProfileInstallReceiver adb shell am force-stop $PACKAGE_NAME
adb root adb shell killall -s SIGUSR1 $PACKAGE_NAME adb shell am force-stop $PACKAGE_NAME
- รออย่างน้อย 5 วินาทีเพื่อให้การสร้างโปรไฟล์เสร็จสมบูรณ์
- แปลงโปรไฟล์ฐานสองที่สร้างขึ้นเป็นข้อความ
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
ทํา Conversion
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
อาร์กิวเมนต์แรกแสดงเส้นทางไปยัง 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
การติดตั้งโปรไฟล์พื้นฐานแบบดั้งเดิม
โดยทั่วไปแล้ว โปรไฟล์พื้นฐานจะส่งไปยังอุปกรณ์ด้วยวิธีใดวิธีหนึ่งต่อไปนี้
ใช้ 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
ในอุปกรณ์
โหลดโปรไฟล์พื้นฐานจากภายนอก
ส่วนนี้จะอธิบายวิธีติดตั้งโปรไฟล์พื้นฐานจาก 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 เนื่องจากไลบรารีสามารถระบุโปรไฟล์ได้โดยไม่ต้องประกาศการพึ่งพา ProfileInstaller การเพิ่มทรัพยากรในไลบรารีแต่ละรายการที่มีโปรไฟล์จะมีผลตั้งแต่ 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
การยืนยัน
หากต้องการตรวจสอบว่าติดตั้งโปรไฟล์อย่างถูกต้อง ให้ทําตามขั้นตอนจากหัวข้อวัดการปรับปรุงแอปด้วยตนเอง
แสดงเนื้อหาของโปรไฟล์ไบนารี
หากต้องการสํารวจเนื้อหาของโปรไฟล์พื้นฐานเวอร์ชันไบนารีแบบกะทัดรัด ให้ใช้ตัวเลือก 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}
- การทำงานขณะล็อกบางส่วนที่ค้าง