เครื่องมือวิเคราะห์ APK เวอร์ชันบรรทัดคำสั่งจะให้ข้อมูลเชิงลึกทันทีเกี่ยวกับ ส่วนประกอบของ APK ของคุณหลังจากกระบวนการสร้างเสร็จสมบูรณ์และช่วยให้คุณ เปรียบเทียบความแตกต่างระหว่าง APK 2 รายการ การใช้เครื่องมือวิเคราะห์ APK จะช่วยลด เวลาที่ใช้ในการแก้ไขข้อบกพร่องเกี่ยวกับไฟล์และทรัพยากร DEX ภายในแอป และ ลดขนาดของ APK ของคุณ
apkanalyzer
รวมอยู่ใน
แพ็กเกจเครื่องมือบรรทัดคำสั่ง Android SDK ที่
android_sdk/cmdline-tools/version/bin/apkanalyzer
หรือคุณสามารถเข้าถึงเครื่องมือวิเคราะห์ APK ภายใน
Android Studio ตามที่อธิบายไว้ใน
วิเคราะห์บิลด์ด้วยตัววิเคราะห์ APK
วากยสัมพันธ์
ไวยากรณ์ของ apkanalyzer
คือ
apkanalyzer [global-options] subject verb [options] apk-file [apk-file2]
subject
คือสิ่งที่คุณต้องการค้นหาและสามารถใช้เป็น APK ทั้งหมด
หรือส่วนหนึ่งของ APK หัวเรื่องอาจเป็นอะไรก็ได้ต่อไปนี้
apk
: วิเคราะห์แอตทริบิวต์ของไฟล์ APK เช่น รหัสแอปพลิเคชัน รหัสเวอร์ชัน และชื่อเวอร์ชันfiles
: วิเคราะห์ไฟล์ภายในไฟล์ APKmanifest
: วิเคราะห์เนื้อหาของไฟล์ Manifest ภายในไฟล์ APKdex
: วิเคราะห์ไฟล์ DEX ภายในไฟล์ APKresources
: ดูแหล่งข้อมูลเกี่ยวกับข้อความ รูปภาพ และสตริง
verb
คือสิ่งที่คุณต้องการรู้เกี่ยวกับหัวข้อนั้นๆ วิชา
คำกริยา และตัวเลือกต่างๆ ซึ่งมีอธิบายไว้ในส่วนต่อไปนี้ซึ่งเกี่ยวกับคำสั่ง
คุณต้องระบุไฟล์ APK ของทุกคำสั่ง เฉพาะ
คำสั่ง apk compare
ต้องการให้คุณระบุ APK ที่สอง
คุณย่อตัวเลือกทั้งหมดให้สั้นลงได้ตราบใดที่ตัวเลือกดังกล่าวไม่ชัดเจน ตัวอย่างเช่น
ตัวเลือกส่วนกลาง --human-readable
สามารถย่อให้เหลือ
-h
ตัวอย่างต่อไปนี้วิเคราะห์ apk
(เรื่อง)
เพื่อรับ file-size
(กริยา) แล้วพิมพ์ขนาดไฟล์เป็น
รูปแบบที่มนุษย์อ่านได้ (-h
ตัวเลือก):
apkanalyzer -h apk file-size myapk.apk
คำสั่ง
คำอธิบายคำสั่งต่อไปนี้จัดเรียงตามหัวเรื่องและแสดงรายการ ชุดค่าผสมของกริยาและตัวเลือกที่มีสำหรับแต่ละวิชา:
|
คำอธิบาย |
---|---|
apk summary apk-file
|
พิมพ์รหัสแอปพลิเคชัน รหัสเวอร์ชัน และชื่อเวอร์ชัน
ตัวอย่างเอาต์พุต: com.myapp 5 1.1-beta |
apk file-size apk-file
|
พิมพ์ขนาดไฟล์ทั้งหมดของ APK |
apk download-size apk-file
|
พิมพ์ขนาดการดาวน์โหลดโดยประมาณของ APK |
apk features [--not-required] apk-file
|
ฟีเจอร์การพิมพ์ที่ APK ที่เรียกใช้
การกรอง Play Store
เพิ่มตัวเลือก --not-required
เพื่อรวมฟีเจอร์ที่ทำเครื่องหมายว่าไม่จำเป็นในเอาต์พุต
ตัวอย่างเอาต์พุต: android.hardware.type.watch android.hardware.microphone implied: requested android.permission.RECORD_AUDIO permission |
apk compare [options] apk-file
apk-file2
|
เปรียบเทียบขนาดของ apk-file และ
apk-file2
คุณใส่ตัวเลือกต่อไปนี้ได้
ตัวอย่างเอาต์พุต (ขนาดเดิม / ขนาดใหม่ / ความแตกต่างของขนาด / เส้นทาง): 39086736 48855615 9768879 / 10678448 11039232 360784 /classes.dex 18968956 18968956 0 /lib/ 110576 110100 -476 /AndroidManifest.xml ... |
ดูระบบไฟล์ APK | คำอธิบาย |
files list apk-file
|
แสดงไฟล์ทั้งหมดใน APK
ตัวอย่างเอาต์พุต: / /classes2.dex /classes.dex /assets/ /assets/asset.data /AndroidManifest.xml /resources.arsc /res/ ... |
files cat --file path apk-file
|
พิมพ์เนื้อหาไฟล์ คุณต้องระบุเส้นทางภายใน APK โดยใช้
ตัวเลือก --file path เช่น --file
/AndroidManifest.xml
|
ดูข้อมูลในไฟล์ Manifest | คำอธิบาย |
manifest print apk-file
|
พิมพ์ไฟล์ Manifest ของ APK ในรูปแบบ XML |
manifest application-id apk-file
|
พิมพ์ค่ารหัสแอปพลิเคชัน |
manifest version-name apk-file
|
พิมพ์ค่าชื่อเวอร์ชัน |
manifest version-code apk-file
|
พิมพ์ค่ารหัสเวอร์ชัน |
manifest min-sdk apk-file
| พิมพ์เวอร์ชัน SDK ขั้นต่ำ |
manifest target-sdk apk-file
|
พิมพ์เวอร์ชัน SDK เป้าหมาย |
manifest permissions apk-file
|
พิมพ์รายการสิทธิ์ |
manifest debuggable apk-file
|
พิมพ์ว่าแอปแก้ไขข้อบกพร่องได้หรือไม่ |
เข้าถึงข้อมูลไฟล์ DEX | คำอธิบาย |
dex list apk-file
|
พิมพ์รายการไฟล์ DEX ใน APK |
dex references [--files path] [--files path2]
apk-file
|
พิมพ์จำนวนการอ้างอิงเมธอดในไฟล์ DEX ที่ระบุ
ค่าเริ่มต้นคือไฟล์ DEX ทั้งหมด เพิ่มตัวเลือก --files ไปยัง
ให้ระบุไฟล์ที่ต้องการรวมไว้ด้วย
ตัวอย่างเอาต์พุต: classes.dex 59598 classes2.dex 8042 |
dex packages [option1 option2 ...] apk-file
|
พิมพ์แผนผังคลาสจาก DEX ในเอาต์พุต P
C , M และ F หมายถึงแพ็กเกจ
คลาส เมธอด และฟิลด์ตามลำดับ และ x
k , r และ d ระบุว่าลบ เก็บไว้
โหนดที่อ้างอิงและกำหนดโหนดตามลำดับ
เพิ่มตัวเลือกต่อไปนี้เพื่อปรับแต่งผลลัพธ์
ตัวอย่างเอาต์พุต (ประเภท/สถานะ/วิธีการที่กำหนดโดย/เมธอดที่มีการอ้างอิง ขนาด/ไบต์/ชื่อ): P d 1 1 85 g P d 1 1 85 g.a C d 1 1 85 g.a.a M d 1 1 45 g.a.a java.lang.Object get() C r 0 1 40 byte[] M r 0 1 40 byte[] java.lang.Object clone() |
dex code --class class [--method method]
|
พิมพ์ไบต์โค้ดของคลาสหรือเมธอดในรูปแบบ smali ชื่อชั้นเรียน
แล้วพิมพ์ชื่อคลาสที่มีคุณสมบัติครบถ้วนเพื่อคลายการคอมไพล์ เพิ่ม
--method เพื่อระบุวิธีการถอดรหัส
รูปแบบ
สำหรับวิธีการแยกคอมไพล์คือ |
ดูทรัพยากรที่เก็บไว้ใน res/ และ resource.arsc | คำอธิบาย |
resources packages
|
พิมพ์รายการแพ็กเกจที่กำหนดไว้ในตารางทรัพยากร |
resources configs --type type [--package package] apk-file
|
พิมพ์รายการการกำหนดค่าสำหรับ type ที่ระบุ
type เป็นประเภททรัพยากร เช่น string
รวม --package
หากคุณต้องการระบุชื่อแพ็กเกจของตารางทรัพยากร
ระบบจะใช้แพ็กเกจแรกที่กำหนดไว้
|
resources value --config config --name name
--type type [--package package] apk-file
|
พิมพ์ค่าของทรัพยากรที่ระบุโดย config
name และ type
ตัวเลือก type คือประเภทของทรัพยากร เช่น
string
รวม |
resources names --config config --type type
[--package package] apk-file
|
พิมพ์รายการชื่อทรัพยากรสำหรับการกำหนดค่าและประเภท
ตัวเลือก type คือประเภทของทรัพยากร เช่น
string
รวม --package
หากคุณต้องการระบุชื่อแพ็กเกจของตารางทรัพยากร
ระบบจะใช้แพ็กเกจแรกที่กำหนดไว้
|
resources xml --file path apk-file
|
พิมพ์ไฟล์ XML ไบนารีที่มนุษย์อ่านได้
ใส่
file เพื่อระบุเส้นทางไปยังไฟล์
|