Android Studio มีตัววิเคราะห์ APK ที่ให้ข้อมูลเชิงลึกในทันทีเกี่ยวกับ
องค์ประกอบของ APK หรือ Android App Bundle หลังจากกระบวนการบิลด์เสร็จสมบูรณ์
การใช้ตัววิเคราะห์ APK จะช่วยลดเวลาที่คุณใช้ในการแก้ไขข้อบกพร่องของไฟล์ DEX
และทรัพยากรภายในแอป รวมถึงช่วยลดขนาด APK ตัววิเคราะห์ APK
ยังพร้อมใช้งานจากบรรทัดคำสั่งด้วย
apkanalyzer
ตัววิเคราะห์ APK ช่วยให้คุณทำสิ่งต่อไปนี้ได้
- ดูขนาดสัมบูรณ์และขนาดสัมพัทธ์ของไฟล์ในแอป เช่น ไฟล์ DEX และไฟล์ทรัพยากร Android
- ทําความเข้าใจองค์ประกอบของไฟล์ DEX
- ดูไฟล์เวอร์ชันสุดท้ายในแอปได้อย่างรวดเร็ว เช่น ไฟล์
AndroidManifest.xml
- เปรียบเทียบ APK หรือ App Bundle 2 รายการแบบเคียงข้างกัน
คุณเข้าถึง APK Analyzer ได้ 3 วิธีเมื่อเปิดโปรเจ็กต์
- ลาก APK หรือ App Bundle ไปยังหน้าต่างเอดิเตอร์ของ Android Studio
- เปลี่ยนไปใช้มุมมองโปรเจ็กต์ในหน้าต่างโปรเจ็กต์ จากนั้น
ดับเบิลคลิก APK ในไดเรกทอรี
build/output/apks/
เริ่มต้น - เลือกสร้าง > วิเคราะห์ APK ในแถบเมนู แล้วเลือก APK หรือ App Bundle
ดูข้อมูลไฟล์และขนาด
APK คือไฟล์ที่ใช้รูปแบบไฟล์ ZIP APK Analyzer จะแสดงแต่ละ ไฟล์หรือโฟลเดอร์เป็นเอนทิตีที่คุณขยายเพื่อไปยังโฟลเดอร์ได้ ลำดับชั้นของเอนทิตีจะแสดงโครงสร้างของไฟล์ และโฟลเดอร์ในไฟล์ APK
APK Analyzer จะแสดงค่าขนาดไฟล์ที่บีบอัด (หรือ "ขนาดไฟล์ดิบ") และขนาดไฟล์ดาวน์โหลดสำหรับแต่ละเอนทิตี ดังที่แสดงในรูปที่ 1 ขนาดไฟล์ดิบ แสดงสัดส่วนของเอนทิตีต่อขนาด APK ทั้งหมด ขนาดการดาวน์โหลดแสดงถึงขนาดที่บีบอัดแล้วโดยประมาณของเอนทิตีตามที่ Google Play จะส่ง % ของขนาดการดาวน์โหลดทั้งหมดระบุ เปอร์เซ็นต์ของขนาดการดาวน์โหลดทั้งหมดของ APK ที่เอนทิตีแสดง

ดู AndroidManifest.xml
หากโปรเจ็กต์มีไฟล์ AndroidManifest.xml
หลายไฟล์ เช่น สำหรับ
Product Flavor หรือมีไลบรารีที่ให้ไฟล์ Manifest ด้วย ระบบจะ
ผสานรวมไฟล์เหล่านั้นเป็นไฟล์เดียวในแอป ไฟล์ Manifest นี้
มักจะเป็นไฟล์ไบนารีภายใน APK หรือ App Bundle แต่เมื่อ
เลือกใน APK Analyzer ระบบจะสร้างรูปแบบ XML ของเอนทิตีนี้ขึ้นใหม่และ
แสดง
ซึ่งจะช่วยให้คุณเข้าใจการเปลี่ยนแปลงที่อาจเกิดขึ้นกับแอปในระหว่างการสร้าง
เช่น คุณจะดูได้ว่าระบบผสานรวมAndroidManifest.xml
ไฟล์จากไลบรารีที่แอปพลิเคชันของคุณขึ้นอยู่กับไฟล์นั้น
เข้ากับAndroidManifest.xml
ไฟล์สุดท้ายอย่างไร
นอกจากนี้ โปรแกรมดูนี้ยังมีความสามารถในการตรวจสอบโค้ดบางอย่างด้วย คำเตือนหรือ ข้อผิดพลาดจะปรากฏที่มุมขวาบน รูปที่ 2 แสดงข้อผิดพลาดที่รายงาน สำหรับไฟล์ Manifest ที่เลือก

ดูไฟล์ DEX
โปรแกรมดูไฟล์ DEX ของ APK Analyzer ช่วยให้คุณเข้าถึงข้อมูลพื้นฐานในไฟล์ DEX ของแอปได้ทันที โปรแกรมดูจะแสดงจำนวนคลาส แพ็กเกจ การอ้างอิงทั้งหมด และการประกาศ ซึ่งจะช่วยในการตัดสินใจว่าจะใช้ Multidex หรือวิธีนำการอ้างอิงออกเพื่อให้มีจำนวนต่ำกว่าขีดจำกัด DEX 64K
รูปที่ 3 แสดงแอปขนาดกลางที่มีขนาดต่ำกว่าขีดจำกัด DEX 64K แต่ละแพ็กเกจ คลาส และเมธอดภายในไฟล์ DEX จะมีจำนวนที่แสดงอยู่ในคอลัมน์เมธอดที่กำหนดและเมธอดที่อ้างอิง
คอลัมน์วิธีการอ้างอิงจะนับวิธีการทั้งหมดที่ไฟล์ DEX อ้างอิง โดยปกติแล้วจะรวมถึงเมธอดที่กำหนดไว้ในโค้ด ไลบรารีการอ้างอิง และเมธอดที่กำหนดไว้ในแพ็กเกจ Java และ Android มาตรฐานที่โค้ดใช้ ซึ่งเป็นวิธีการที่นับรวมในขีดจำกัดของวิธีการ 64K ในแต่ละ DEX file
คอลัมน์วิธีการที่กำหนดจะนับเฉพาะวิธีการที่กำหนดไว้ใน ไฟล์ DEX ไฟล์ใดไฟล์หนึ่ง ดังนั้นตัวเลขนี้จึงเป็นส่วนย่อยของวิธีการที่อ้างอิง

กรองมุมมองแผนผังไฟล์ DEX
เหนือรายการคลาสเล็กน้อย เครื่องมือวิเคราะห์ APK จะมีตัวกรองสำหรับ ดูเนื้อหาของไฟล์ DEX ที่เลือก ดังที่แสดงในรูปที่ 4

BuildConfig
หากต้องการใช้ตัวกรองเพื่อแสดงเมธอดและฟิลด์ทั้งหมดภายในคลาส ให้ทำดังนี้
- เลือกไฟล์
classes.dex
ในรายการไฟล์ - ในรายการชั้นเรียน ให้ไปที่ชั้นเรียนแล้วเลือก
- ขยายชั้นเรียนที่คุณเลือก
- สลับแสดงช่อง
เพื่อแสดงหรือซ่อนช่องของคลาส
- สลับแสดงวิธีการ
เพื่อแสดงหรือซ่อนวิธีการของคลาส
สลับแสดงเมธอดหรือฟิลด์ที่อ้างอิงทั้งหมด
เพื่อแสดงหรือซ่อนแพ็กเกจ คลาส เมธอด และฟิลด์ที่อ้างอิง
ในมุมมองแบบต้นไม้ โหนดที่แสดงเป็นตัวเอียงคือการอ้างอิงที่ไม่มีคำจำกัดความในไฟล์ DEX ที่เลือก ไฟล์ DEX สามารถอ้างอิงเมธอดและ ฟิลด์ที่กำหนดไว้ในไฟล์อื่นได้ เช่น
System.out.println()
เป็นการอ้างอิงถึงเมธอดprintln()
ใน เฟรมเวิร์ก Android
โหลดการแมป ProGuard
ไอคอนการแมป ProGuard จะอยู่ข้างไอคอนการกรอง ไอคอน ProGuard
จะเป็นสีเทาจนกว่าคุณจะโหลดชุดไฟล์การแมป ProGuard ที่เพิ่ม
ฟังก์ชันการทำงานให้กับโปรแกรมดู DEX เช่น การยกเลิกการปิดบังชื่อ (mapping.txt
)
การแสดงโหนดที่ถูกนำออก (usage.txt
) และการระบุโหนด
ที่นำออกไม่ได้ (seeds.txt
)
ไฟล์การแมป ProGuard ที่คุณนําเข้าต้องมาจากบิลด์เดียวกันกับที่ สร้างไฟล์ DEX ที่เปิดใช้การลดขนาดโค้ด

หากต้องการโหลดไฟล์การแมป ProGuard ให้ทำดังนี้
- คลิกโหลดการแมป Proguard...
ไปที่โฟลเดอร์โปรเจ็กต์ที่มีไฟล์การแมป แล้วโหลดไฟล์ทั้งหมด ไฟล์ชุดใดก็ได้ หรือโฟลเดอร์ที่มีไฟล์
โดยปกติแล้วไฟล์การแมปจะอยู่ใน
project/app/build/outputs/mappings/release/
ตัวเลือกไฟล์จะใช้โฟลเดอร์รุ่นเป็นค่าเริ่มต้นหากตรวจพบโครงสร้างโปรเจ็กต์นี้ก่อนอื่น ตัวเลือกไฟล์จะตรวจสอบชื่อไฟล์ที่ตรงกับ
mapping.txt
seeds.txt
และusage.txt
ทุกประการ จากนั้น ตัวเลือกไฟล์จะตรวจสอบชื่อไฟล์ ที่มีข้อความmapping
,usage
หรือseeds
อยู่ที่ใดที่หนึ่งและลงท้ายด้วย.txt
เช่นrelease-seeds-1.10.15.txt
จะถือว่าตรงกัน
รายการต่อไปนี้อธิบายไฟล์การแมป
seeds.txt
: โหนดที่การกำหนดค่า ProGuard ป้องกันไม่ให้ถูกนำออก ระหว่างการลดขนาดจะแสดงเป็นตัวหนาmapping.txt
: เปิดใช้เลิกซ่อนชื่อเพื่อให้คุณกู้คืนชื่อเดิมของโหนดที่ R8 ซ่อนไว้ได้ เช่น คุณสามารถกู้คืนชื่อโหนดที่ผ่านการปกปิด อย่าง
a
,b
,c
เป็นMyClass
,MainActivity
และmyMethod()
ได้usage.txt
: เปิดใช้แสดงโหนดที่นำออกเพื่อให้คุณแสดงคลาส เมธอด และฟิลด์ที่ R8 นำออก ระหว่างการลดขนาดได้ โดยโหนดที่กู้คืนจะแสดงเป็น ขีดทับ
ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้ R8 เพื่อสร้างความสับสนและลดขนาดโค้ดได้ที่ ลดขนาด สร้างความสับสน และเพิ่มประสิทธิภาพแอป
แสดงไบต์โค้ด ค้นหาการใช้งาน และสร้างกฎ Keep
โหนดในมุมมองรายการคลาสมีเมนูบริบทที่มีตัวเลือกต่อไปนี้ ซึ่งช่วยให้คุณดูไบต์โค้ด ค้นหาการใช้งาน และแสดงกล่องโต้ตอบที่แสดงกฎ ProGuard เพื่อคัดลอกและวางสำหรับโหนดที่เลือก คลิกขวาที่โหนดใดก็ได้ในมุมมองรายการชั้นเรียนเพื่อแสดงเมนูตามบริบท
แสดงไบต์โค้ด: แยกคอมไพล์คลาส เมธอด หรือฟิลด์ที่เลือก และแสดงการแทนไบต์โค้ด Smali ในกล่องโต้ตอบ ดังนี้

init
methodค้นหาการใช้งาน: แสดงส่วนอื่นๆ ของโค้ด DEX
ที่มีการอ้างอิงถึงคลาสหรือเมธอดที่เลือก ดังที่แสดงในรูปที่ 7
หากคุณมี seeds.txt
โหลดอยู่
โหนดที่แสดงเป็นตัวหนาจะบ่งบอกว่าการกำหนดค่า ProGuard ป้องกันไม่ให้ระบบนำโหนดเหล่านั้น
ออกในระหว่างการลดขนาด

MyClass
สร้างกฎ Keep ของ ProGuard: แสดงกฎ ProGuard ที่คุณคัดลอกและวางลงในไฟล์กำหนดค่า ProGuard ของโปรเจ็กต์ได้ ดังที่แสดงในรูปที่ 8 ซึ่งจะช่วยป้องกันไม่ให้ระบบนำแพ็กเกจ คลาส เมธอด หรือฟิลด์ที่ระบุออกในระหว่าง ระยะการย่อโค้ด ดูข้อมูลเพิ่มเติมได้ที่ปรับแต่งโค้ดที่จะเก็บไว้

ดูเอนทิตีโค้ดและทรัพยากร
งานบิลด์ต่างๆ จะเปลี่ยนเอนทิตีสุดท้ายในแอป เช่น กฎการลดขนาดของ ProGuard สามารถเปลี่ยนโค้ดสุดท้ายได้ และทรัพยากรรูปภาพ สามารถลบล้างได้ด้วยทรัพยากรในProduct Flavor
หากต้องการดูไฟล์เวอร์ชันสุดท้ายด้วย APK Analyzer ให้คลิก เอนทิตีเพื่อดูตัวอย่างเอนทิตีข้อความหรือรูปภาพ ดังที่แสดง ในรูปที่ 9

APK Analyzer ยังแสดงไฟล์ข้อความและไบนารีต่างๆ ได้ด้วย
เช่น โปรแกรมดูเอนทิตี resources.arsc
ช่วยให้คุณเห็นค่าเฉพาะการกำหนดค่า เช่น การแปลภาษาสำหรับทรัพยากรสตริง
ในรูปที่ 10 คุณจะเห็นคำแปลของทรัพยากรสตริงแต่ละรายการ

เปรียบเทียบไฟล์
ตัววิเคราะห์ APK สามารถเปรียบเทียบขนาดของเอนทิตีในไฟล์ APK หรือ App Bundle 2 ไฟล์ที่แตกต่างกันได้ ซึ่งจะเป็นประโยชน์เมื่อคุณต้องการทราบสาเหตุที่แอปมีขนาดใหญ่ขึ้นเมื่อเทียบกับรุ่นก่อนหน้า
ก่อนเผยแพร่แอปที่อัปเดตแล้ว ให้ทำดังนี้
- โหลดเวอร์ชันของแอปที่คุณกำลังจะเผยแพร่ลงในตัววิเคราะห์ APK
- ที่มุมขวาบนของเครื่องมือวิเคราะห์ APK ให้คลิก เปรียบเทียบกับ APK ก่อนหน้า...
ในกล่องโต้ตอบการเลือก ให้ค้นหาสิ่งประดิษฐ์ที่เผยแพร่ล่าสุดต่อผู้ใช้ แล้วคลิก OK
กล่องโต้ตอบที่คล้ายกับในรูปที่ 11 จะปรากฏขึ้นเพื่อช่วยคุณประเมินผลกระทบที่การอัปเดตอาจมีต่อผู้ใช้
รูปที่ 11 แสดงความแตกต่างระหว่างบิลด์ดีบักและบิลด์รีลีสของแอปหนึ่งๆ ตัวเลือกการสร้างที่แตกต่างกันจะใช้ระหว่างประเภทการสร้างเหล่านี้ ซึ่ง จะแก้ไขเอนทิตีพื้นฐานแตกต่างกัน
