ไฟล์. dex ใน Android คืออะไร


193

ฉันมีคำถามบางอย่างเกี่ยวกับไฟล์ dex

  • คืออะไรdexแฟ้มใน Android?
  • dex ทำงานอย่างไรกับ Android
  • พวกเขาจะใช้ในการดีบักแอพ Android อย่างไร
  • มันคล้ายกับไฟล์คลาส Java หรือไม่?

ฉันต้องการข้อมูลที่เฉพาะเจาะจงโปรดช่วยในเรื่องนี้และยินดีต้อนรับทุกตัวอย่างจริง!


โปรดดูที่ลิงค์นี้stackoverflow.com/questions/1249973/…
Gensheriff

วิธีเรียกใช้บนอุปกรณ์: stackoverflow.com/questions/10199863/ …
Ciro Santilli 郝海东冠状病病六四事件法轮功

คำตอบ:


226

เกี่ยวกับไฟล์. dex:

หนึ่งในคุณสมบัติที่โดดเด่นที่สุดของDalvik Virtual Machine(workhorse ภายใต้ระบบ Android) คือมันไม่ได้ใช้ Java bytecode รูปแบบดั้งเดิมที่เรียกว่า DEX ถูกนำมาใช้แทนและแม้แต่คำสั่ง bytecode ก็เหมือนกับคำสั่ง Java bytecode

Compiled Android application code file.

โปรแกรม Android จะถูกรวบรวมเป็น.dexไฟล์ (Dalvik Executable) ซึ่งจะถูกบีบอัดเป็น.apkไฟล์เดียวในอุปกรณ์ .dexไฟล์สามารถสร้างขึ้นได้โดยการแปลแอพพลิเคชั่นที่รวบรวมโดยอัตโนมัติซึ่งเขียนด้วยภาษาโปรแกรม Java

รูปแบบไฟล์ Dex:

 1. File Header
 2. String Table
 3. Class List
 4. Field Table
 5. Method Table
 6. Class Definition Table
 7. Field List
 8. Method List
 9. Code Header
10. Local Variable List

Android มีเอกสารเกี่ยวกับDalvik Executable Format( ไฟล์. dex ) คุณสามารถหาข้อมูลเพิ่มเติมได้ที่เอกสารอย่างเป็นทางการ: รูปแบบไฟล์ Dex

.dex ไฟล์คล้ายกับไฟล์คลาส Java แต่ถูกเรียกใช้ภายใต้ Dalkvik Virtual Machine (DVM) สำหรับ Android เวอร์ชันเก่าและรวบรวมในเวลาติดตั้งบนอุปกรณ์เพื่อใช้เป็นรหัสเนทีฟพร้อมกับ ART ในเวอร์ชัน Android ที่ใหม่กว่า

คุณสามารถdecompile. dex โดยใช้dexdumpเครื่องมือที่มีให้ใน android-sdk

นอกจากนี้ยังมีเทคนิควิศวกรรมย้อนกลับเพื่อสร้างjar fileหรือjava class fileจาก.dexไฟล์


ไฟล์ jar ของฉันมี xml อยู่ในโฟลเดอร์ทรัพย์สิน ฉันต้องการให้ส่วนนี้เป็นส่วนหนึ่งของ. doc ความคิดใด ๆ ที่จะนำไปใช้อย่างไร
AndroidGuy

@AndroidGuy - ไฟล์ Jar ไม่มีแพ็คเกจทรัพยากร android (/ asset) ที่คุณต้องใช้ Android Library Package สำหรับสิ่งนี้
user370305

มันทำงานบน ART บน Android Lollipop ได้อย่างไร ไฟล์ใดบ้างที่ใช้ที่นั่นและเส้นทางใด บางคนบอกว่ามันจะใช้พื้นที่มากขึ้น มันจริงหรอ? ถ้าเป็นเช่นนั้นจะเกิดอะไรขึ้น? ฉันหมายความว่ารหัสเนทีฟดูเหมือนจะเล็กกว่าไบต์รหัสเสมอและไฟล์ dex คล้ายกับไบต์รหัสในแง่ของการทำงาน
นักพัฒนา android

สิ่งสำคัญที่ควรทราบคือdexdumpไม่ใช่เครื่องถอดรหัส แต่เป็นเครื่องแยกชิ้นส่วน
Genghiskhan

90
.dex file

ไฟล์รหัสแอปพลิเคชัน Android ที่คอมไพล์แล้ว

โปรแกรม Android ถูกคอมไพล์เป็นไฟล์. doc (Dalvik Executable) ซึ่งจะถูกบีบอัดเป็นไฟล์. apk ไฟล์เดียวบนอุปกรณ์ ไฟล์. dex สามารถสร้างขึ้นโดยอัตโนมัติโดย Android โดยการแปลแอพพลิเคชั่นที่รวบรวมซึ่งเขียนด้วยภาษาโปรแกรม Java


2
ไฟล์ jar ของฉันมี xml อยู่ในโฟลเดอร์ทรัพย์สิน ฉันต้องการให้ส่วนนี้เป็นส่วนหนึ่งของ. doc ความคิดใด ๆ ที่จะนำไปใช้อย่างไร
AndroidGuy

87

dex ไฟล์เป็นไฟล์ที่ถูกเรียกใช้งานบน Dalvik VM

Dalvik VM มีคุณสมบัติหลายประการสำหรับการเพิ่มประสิทธิภาพการตรวจสอบและการตรวจสอบซึ่งหนึ่งในนั้นคือDalvik ปฏิบัติการ (DEX)

ซอร์สโค้ด Java ถูกคอมไพล์โดยคอมไพเลอร์ Java เป็น.classไฟล์ จากนั้นdxเครื่องมือ (dexer) ซึ่งเป็นส่วนหนึ่งของ Android SDK ประมวลผล.classไฟล์เป็นรูปแบบไฟล์ที่เรียกว่าDEXที่มีรหัส Dalvik dxเครื่องมือกำจัดทุกข้อมูลซ้ำซ้อนที่มีอยู่ในชั้นเรียน ในDEXคลาสทั้งหมดของแอปพลิเคชันจะถูกรวมเป็นไฟล์เดียว ตารางต่อไปนี้ให้การเปรียบเทียบระหว่างขนาดรหัสสำหรับไฟล์ JVM jar และไฟล์ที่ประมวลผลโดยdexเครื่องมือ

ตารางเปรียบเทียบขนาดรหัสสำหรับไลบรารีระบบแอปพลิเคชันเว็บเบราว์เซอร์และแอปพลิเคชันวัตถุประสงค์ทั่วไป (แอพนาฬิกาปลุก) ในทุกกรณีเครื่องมือ dex ลดขนาดรหัสได้มากกว่า 50%

ป้อนคำอธิบายรูปภาพที่นี่

ในสภาพแวดล้อม Java มาตรฐานแต่ละคลาสในโค้ด Java ให้ผลลัพธ์หนึ่ง.classไฟล์ ซึ่งหมายความว่าหากไฟล์ซอร์สโค้ด Java มีคลาสพับลิกหนึ่งคลาสและคลาสที่ไม่ระบุชื่อสองคลาสสมมติว่ามีการจัดการเหตุการณ์ดังนั้นคอมไพเลอร์ java จะสร้าง.classไฟล์ทั้งหมดสามไฟล์

ขั้นตอนการคอมไพล์เหมือนกันบนแพลตฟอร์ม Android ทำให้มีหลาย.classไฟล์ แต่หลังจาก.classไฟล์ถูกสร้างขึ้นเครื่องมือ“ dx” จะถูกใช้เพื่อแปลง.classไฟล์ทั้งหมดเป็นไฟล์เดี่ยว.dexหรือไฟล์ Dalvik Executable เป็น.dexไฟล์ที่เรียกใช้งานบน Dalvik VM .dexไฟล์ที่ได้รับการปรับให้เหมาะสมกับการใช้งานหน่วยความจำและการออกแบบที่เป็นแรงผลักดันหลักโดยการแบ่งปันข้อมูล


18
ข้อมูลที่ดี มีเพียงสิ่งเดียวที่ชี้ให้เห็น บางครั้งจะมีไฟล์ dex หลายไฟล์เนื่องจากข้อ จำกัด หมายเลขคำสั่งวิธีการเรียกใช้ ขีด จำกัด นี้เป็นวิธี 65k ในกรณีนั้นรหัสของคุณจะไม่อยู่ในไฟล์เดียว แต่เป็น 2 หรือมากกว่า แต่ทุกอย่างจะยังคงอยู่ นอกจากนี้เนื่องจากการโหลดคลาสแบบไดนามิกยังมีให้คุณสามารถโหลดโค้ด (อีกครั้งในรูปแบบ dexed) จากไฟล์และโค้ดจะอยู่ในไฟล์ dex หลายไฟล์
Igor Čordaš
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.