จะบอกได้อย่างไรว่า APK สำหรับสถาปัตยกรรมมีจุดประสงค์เพื่ออะไร


9

ฉันกำลังเขียนสคริปต์เพื่อทดสอบ apks จำนวนมาก บางตัววิ่งบน x86 และบางตัววิ่งบนแขน มีวิธีที่ฉันสามารถบอกได้ไหมว่า apks มีจุดประสงค์เพื่อสถาปัตยกรรมใด?

ฉันได้ดูผ่านรายงานการ badging aapt aapt dump badging application.apkกับ สำหรับบางรุ่นที่เข้ากันได้กับแขนฉันเห็นnative-code: 'armeabi-v7a'แต่ไม่ใช่สำหรับพวกเขาทั้งหมดและฉันไม่เห็นสิ่งบ่งชี้ว่าสถาปัตยกรรมใดที่ apks ที่เข้ากันได้กับ x86 ทำงาน

ฉันได้ลองใช้ apktool เพื่อแยก apk และตรวจสอบ AndroidManifest.xml ฉันไม่เห็นอะไรเลยที่เกี่ยวข้องกับสถาปัตยกรรมชิปในนั้น

ความคิดใด ๆ

คำตอบ:


17

วิธีหนึ่ง (ค่อนข้างหยาบ) ในการดูสถาปัตยกรรมของไลบรารีดั้งเดิมของ APK ที่สร้างขึ้นเพื่อคลายซิป (เป็นเพียงไฟล์ซิป) และดูที่โฟลเดอร์ libs - หากแอปพลิเคชันมีไลบรารีท้องถิ่นใด ๆ พวกเขาจะถูกแบ่งออกเป็น โฟลเดอร์ย่อยต่อไปนี้ภายใน (กับไลบรารีที่รวบรวมภายในเหล่านี้):

  • armeabi: โค้ดที่คอมไพล์แล้วสำหรับสถาปัตยกรรม ARMv5 รุ่นเก่า (32 บิตการสนับสนุน ARMv5 ถูกลบออกจาก Android NDK ใน r17 )

  • armeabi-v7a: โค้ดที่คอมไพล์แล้วสำหรับสถาปัตยกรรมARMv7 (32 บิต)

  • arm64-v8a: โค้ดที่คอมไพล์แล้วสำหรับสถาปัตยกรรมARMv8 (64 บิต)

  • x86: โค้ดที่คอมไพล์แล้วสำหรับ   สถาปัตยกรรมx86 (32 บิต)

  • x86_64: คอมไพล์รหัส  สถาปัตยกรรม x86-64 (64- บิต)

  • mips: โค้ดที่คอมไพล์แล้วสำหรับ สถาปัตยกรรมMIPS32r1 และใหม่กว่า (32- บิตการสนับสนุน MIPS ถูกลบออกจาก Android NDK ใน r17 )

  • mips64: โค้ดที่คอมไพล์แล้วสำหรับสถาปัตยกรรมMIPS64r6 (32 บิตการสนับสนุน MIPS64 ถูกลบออกจาก Android NDK ใน r17 )

ดูแพ็คเกจแอปพลิเคชัน Androidสำหรับข้อมูลเพิ่มเติมเกี่ยวกับโครงสร้างของ APK และแหล่งที่มาของรายการด้านบน รายการที่สมบูรณ์มากขึ้น (รวมถึง MIPS64) พร้อมด้วยข้อมูลบางอย่างเกี่ยวกับสถาปัตยกรรมเฉพาะสามารถพบได้ในเวอร์ชันที่เก็บถาวรของหน้าหน้าDeveloper Developer ABI Managementซึ่งถ่ายเมื่อวันที่ 18 เมษายน 2016

น่าสนใจว่าการกำหนดเป้าหมาย ABI เดียว (ที่แอพมีไลบรารีดั้งเดิมที่ออกแบบมาสำหรับสถาปัตยกรรมหนึ่ง) ไม่ได้แปลว่าแอปจะไม่ทำงานบนอุปกรณ์ที่ใช้สถาปัตยกรรมอื่น ตัวอย่างเช่น ARMv8-a เข้ากันได้กับ ARM และ ARMv7-a และอุปกรณ์ x86 Android ของ Intel มีเลเยอร์การแปลที่เป็นกรรมสิทธิ์ซึ่งอนุญาตให้โค้ด ARM ทำงานบนอุปกรณ์ x86 (อนุญาตให้แอป ARM เท่านั้นทำงานบนแพลตฟอร์ม x86) รายชื่อของ ABIs ที่อุปกรณ์ Android สามารถดำเนินการสามารถพบได้ในro.product.cpu.abilistทรัพย์สินซึ่งสามารถบรรลุในเปลือก (เช่นผ่านทางสถานี app บนอุปกรณ์หรือมากกว่าadbใช้adb shell) โดยใช้คำสั่ง:getpropgetprop ro.product.cpu.abilist

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