สร้างและวัดโปรไฟล์พื้นฐานด้วยตนเอง

เราขอแนะนำอย่างยิ่งให้ใช้การสร้างกฎโปรไฟล์โดยอัตโนมัติโดยใช้ไลบรารี 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 คุณ รวบรวมกฎได้โดยตรงโดยทำดังนี้

  1. ติดตั้งแอปเวอร์ชันที่เผยแพร่ในอุปกรณ์ทดสอบ ประเภทบิลด์ของแอปต้องไม่ใช่บิลด์ที่เพิ่มประสิทธิภาพด้วย R8 และต้องไม่ใช่บิลด์ที่แก้ไขข้อบกพร่องได้เพื่อบันทึกโปรไฟล์ ที่ระบบบิลด์ใช้ได้
  2. ปิดใช้การติดตั้งโปรไฟล์และปิดแอป

    หาก APK มีทรัพยากร Dependency ในไลบรารี Profile Installer ของ Jetpack ไลบรารีจะเริ่มต้นโปรไฟล์ในการเปิด APK ครั้งแรก ซึ่งอาจรบกวน กระบวนการสร้างโปรไฟล์ ดังนั้นให้ปิดใช้ด้วยคำสั่งต่อไปนี้

    adb shell am broadcast -a androidx.profileinstaller.action.SKIP_FILE WRITE_SKIP_FILE $PACKAGE_NAME/androidx.profileinstaller.ProfileInstallReceiver
  3. รีเซ็ตการคอมไพล์แอปและล้างโปรไฟล์

    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

  4. เรียกใช้แอปและไปยังเส้นทางของผู้ใช้ที่สําคัญด้วยตนเองซึ่งคุณต้องการรวบรวมโปรไฟล์

  5. รออย่างน้อย 5 วินาทีเพื่อให้โปรไฟล์เสถียร

  6. ดำเนินการบันทึกและรอให้การบันทึกเสร็จสมบูรณ์ หาก 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

  7. แปลงโปรไฟล์ไบนารีที่สร้างขึ้นเป็นข้อความ

    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

  8. ใช้ 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 แต่ในกรณีส่วนใหญ่ คุณควร เปิดใช้โหมดเข้มงวดไว้

แผนที่การปกปิดเป็นข้อมูลที่ไม่บังคับ เมื่อระบุแล้ว แผนที่จะช่วยแมปสัญลักษณ์ที่ปกปิดไปยังเวอร์ชันที่มนุษย์อ่านได้เพื่อให้ใช้งานได้ง่าย