เหตุใด Android จึงเก็บไฟล์ APK ของแอพที่ติดตั้งไว้


31

Android เก็บไฟล์ APK ของแอพผู้ใช้ที่ติดตั้งไว้ใน/data/appไดเรกทอรีและแอประบบใน/system/appไดเรกทอรี

หมายความว่า Android แตกไฟล์ dex ออกจากไฟล์ APK ทุกครั้งที่เปิดแอปหรือไม่ ถ้าไม่ฉันสามารถลบไฟล์ APK อย่างปลอดภัยและยังคงรันแอพได้หรือไม่

คำตอบ:


43

APK ของ Android มักจะมีสิ่งเหล่านี้

assets/
lib/
META-INF/
res/
AndroidManifest.xml
classes.dex

เมื่อทำการติดตั้งไฟล์ APK จะถูกคัดลอกไปยัง/data/appและclasses.dexจะถูกแยกและ "ปรับให้เหมาะสม" โดยเรียกใช้dex2oatบน (บน Android 5+ lib/จะถูกแตกด้วย) ส่งผลให้เกิดการเพิ่มประสิทธิภาพถูกเก็บไว้ใน/data/dalvik-cache/เพื่อให้แอปจะต้องมีการปรับให้เหมาะสมเพียงครั้งเดียวต่อการติดตั้งหรือปรับปรุง ทุกอย่างอื่นถูกเก็บไว้ใน APK ดังนั้นคำตอบแรกชัดเจนมาก: ต้องมีสิ่งที่ต้องการassetsและresแอพนี้ต้องการและพวกเขาอยู่ใน APK ไฟล์ APK ถูกเก็บไว้เพื่อการสนับสนุน หากคุณลบ APK แอปจะไม่เริ่มต้นแน่นอน (แอป: สินทรัพย์ของฉันอยู่ที่ไหน)

ประการที่สอง Google Play เพิ่มการสนับสนุนสำหรับ "เดลต้า Update" มากนานที่ผ่านมา ในขั้นตอนการปรับปรุงเดลต้าความแตกต่างระหว่างแพคเกจเก่าและแพคเกจใหม่จะถูกคำนวณ จากนั้น GP จะดาวน์โหลด "Delta" และใช้การเปลี่ยนแปลงกับ APK ดั้งเดิมเพื่อให้ได้ผลลัพธ์ APK ที่อัปเดตซึ่งจะช่วยลดขนาดการดาวน์โหลด

APK มีการลงชื่อเสมอ สิ่งนี้สามารถป้องกันการดัดแปลงที่เป็นอันตรายในแพ็คเกจ แน่นอนว่าคุณไม่ต้องการติดตั้งแอพที่ถูกดัดแปลงโดยไม่รู้ว่ามีการเปลี่ยนแปลงอะไรหรือไม่ว่าไวรัสจะถูกฉีด META-INF/ภายในเอพีเคทำงานเพื่อจุดประสงค์นี้ การเปลี่ยนแปลงที่ไม่เป็นทางการจะส่งผลให้ไม่มีการจับคู่ลายเซ็นและระบบ Android จะปฏิเสธที่จะติดตั้งแอพที่ถูกดัดแปลง

นอกจากนี้เมื่อคุณอัปเดต Android OS ไฟล์ dex ทั้งหมดจะถูก "ปรับให้เหมาะสม" อีกครั้งเพื่อให้คุณไม่จำเป็นต้องติดตั้งใหม่ทีละไฟล์ ตามที่กล่าวไว้ข้างต้นการปรับให้เหมาะสมต้องการclasses.dexไฟล์จากแพ็คเกจดั้งเดิม


5
โปรดทราบว่าความสามารถในการอัปเดตเดลต้าของ Google Play Store นั้นขึ้นอยู่กับการมี APK เพื่อคำนวณเดลต้าระหว่างเวอร์ชันที่ติดตั้งและที่อัปเดตและการแพตช์ที่ตามมา นอกจากนี้ยังมีการบีบอัด APK เพื่อประหยัดพื้นที่ (ใครจำได้ว่าเจ้า Olde ZipAlign?)
Tamoghna Chowdhury

@Toghogh Space ไม่ใช่ปัญหาจริง ๆ มิฉะนั้น Android 5+ จะไม่ถูกแยกออกlib/จาก APK, iOS จะไม่แยกทุกอย่างออกจาก IPA เป็นเพียงการตรวจสอบความสมบูรณ์ขั้นพื้นฐาน
iBug

ไฟล์บีบอัดสามารถทำงานได้ดี - การประหยัดพื้นที่เกี่ยวข้องกับทรัพยากรที่บีบอัดเช่นไฟล์ XML ที่ผ่านการแยกย่อยซึ่งไม่ได้แยกออกมา นอกจากนี้เกี่ยวกับ ZipAlign - การเข้าถึงทรัพยากรสามารถทำได้เร็วขึ้นในไฟล์บีบอัดที่ได้รับการปรับให้เหมาะสม
Tamoghna Chowdhury

1
ดังนั้นไฟล์สินทรัพย์เช่นไฟล์ html และ js จึงไม่ถูกคัดลอกจาก apk ไปยังตำแหน่งเฉพาะในระบบไฟล์ android?
user1788736

1
@ user1788736 ใช่ พวกเขาอยู่ใน APK
iBug
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.