เราขอแนะนำอย่างยิ่งให้สร้างกฎโปรไฟล์โดยอัตโนมัติโดยใช้ไลบรารี Macrobenchmark Jetpack เพื่อลด ความพยายามด้วยตนเองและเพิ่มความสามารถในการปรับขนาดทั่วไป อย่างไรก็ตาม คุณสามารถ สร้างและวัดกฎโปรไฟล์ในแอปด้วยตนเองได้
กำหนดกฎโปรไฟล์ด้วยตนเอง
คุณกำหนดกฎโปรไฟล์ได้ด้วยตนเองในแอปหรือโมดูลคลังโดยการสร้าง
ไฟล์ชื่อ 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/**->**(**)**
ประเภทที่รองรับในกฎของโปรไฟล์พื้นฐาน
กฎของโปรไฟล์พื้นฐานรองรับประเภทต่อไปนี้ ดูรายละเอียดเกี่ยวกับประเภทเหล่านี้ได้ที่รูปแบบ 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 สำหรับเส้นทางของผู้ใช้ที่สำคัญ แม้ว่าเราจะแนะนำให้ใช้ Macrobenchmark แต่ก็อาจไม่สามารถทำได้เสมอไป เช่น หากใช้ระบบบิลด์ที่ไม่ใช่ Gradle คุณจะใช้ปลั๊กอิน 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"
จากนั้นให้ไซด์โหลดโปรไฟล์พื้นฐาน
# 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 ด้วย
ฟีเจอร์เหล่านี้พร้อมให้ใช้งานใน Branch 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 มี ข้อมูลโปรไฟล์ที่ส่งต่อไปยัง 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 ส่วนใหญ่ที่มี Baseline Profile ซึ่งอยู่ในแอปประมาณ 77,000 แอปจาก 450,000 แอปใน Play แต่จะอยู่ใน APK ทุกรายการที่ใช้ Compose เนื่องจากไลบรารีสามารถระบุโปรไฟล์ได้โดยไม่ต้องประกาศการขึ้นต่อกันกับ 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
การยืนยัน
หากต้องการยืนยันว่าติดตั้งโปรไฟล์อย่างถูกต้องแล้ว คุณสามารถทําตามขั้นตอนจาก วัดผลการปรับปรุงแอปด้วยตนเอง
ดัมพ์เนื้อหาของโปรไฟล์ไบนารี
หากต้องการตรวจสอบเนื้อหาของไบนารีเวอร์ชันที่กระชับของ
โปรไฟล์พื้นฐาน ให้ใช้ตัวเลือก 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 แบบต่อเนื่องบางส่วน