Bagaimana cara mengetahui arsitektur yang dimaksudkan untuk APK?

9

Saya menulis naskah untuk menguji sejumlah besar apks. Beberapa dijalankan pada x86 dan beberapa dijalankan dengan lengan. Apakah ada cara saya bisa tahu apks mana yang dimaksudkan untuk arsitektur yang mana?

Saya telah membaca laporan tentang aapt badging with aapt dump badging application.apk. Untuk beberapa versi yang kompatibel dengan arm, saya melihat native-code: 'armeabi-v7a'tetapi tidak untuk semuanya, dan saya tidak melihat indikasi arsitektur apa yang dijalankan oleh apks kompatibel x86.

Saya juga telah mencoba menggunakan apktool untuk memecah apk dan memeriksa AndroidManifest.xml. Saya tidak melihat apa pun yang berkaitan dengan arsitektur chip di dalamnya.

Ada ide?

MikeSchem
sumber

Jawaban:

17

Salah satu (agak kasar) cara untuk melihat arsitektur apa pustaka asli APK dibangun adalah dengan unzip (hanya file zip) dan lihat folder libs - jika aplikasi tersebut berisi pustaka asli, mereka akan dipecah menjadi beberapa subfolder berikut di dalam (dengan perpustakaan yang dikompilasi di dalamnya):

Lihat Paket Aplikasi Android untuk informasi lebih lanjut tentang struktur APK, dan sumber daftar di atas. Daftar yang lebih lengkap (termasuk MIPS64), bersama dengan beberapa informasi tentang hal-hal spesifik arsitektur, dapat ditemukan pada versi arsip halaman Manajemen Pengembang ABI Android , yang ditangkap pada 18 April 2016.

Yang cukup menarik, menargetkan satu ABI tunggal (di mana aplikasi menyertakan pustaka asli yang dirancang untuk satu arsitektur) tidak berarti aplikasi tersebut tidak akan berjalan pada perangkat yang menggunakan arsitektur lain. ARMv8-a, misalnya, kompatibel dengan ARM dan ARMv7-a, dan perangkat Android Intel x86 berisi lapisan terjemahan berpemilik yang memungkinkan kode ARM dijalankan pada perangkat x86 (memungkinkan aplikasi khusus ARM berjalan pada platform x86). Sebuah daftar ABI bahwa perangkat Android dapat mengeksekusi dapat ditemukan dalam ro.product.cpu.abilistproperti, yang dapat dicapai di shell (misalnya melalui aplikasi terminal pada perangkat, atau lebih adb menggunakan adb shell) menggunakan getpropperintah: getprop ro.product.cpu.abilist.

Joe
sumber