Come dire a quale architettura è destinato un APK?


9

Sto scrivendo una sceneggiatura per testare una grande quantità di apk. Alcuni corrono su x86 e altri corrono a braccetto. C'è un modo in cui posso dire quali apk sono destinati a quale architettura?

Ho esaminato il rapporto su aapt badging with aapt dump badging application.apk. Per alcune delle versioni compatibili con arm vedo native-code: 'armeabi-v7a'ma non per tutte, e non vedo alcuna indicazione su quale architettura eseguano gli apk compatibili x86.

Ho anche provato ad usare apktool per spezzare l'apk ed esaminare AndroidManifest.xml. Non vedo nulla di pertinente all'architettura del chip.

Qualche idea?

Risposte:


17

Un modo (piuttosto rozzo) per vedere per quale architettura sono costruite le librerie native di un APK è decomprimerlo (è solo un file zip) e dare un'occhiata alla cartella libs - se l'applicazione contiene librerie native, saranno suddivise in le seguenti sottocartelle all'interno (con le librerie compilate all'interno di queste):

Vedi il pacchetto di applicazioni Android per ulteriori informazioni sulla struttura di un APK e sulla fonte dell'elenco precedente. Un elenco più completo (incluso MIPS64), insieme ad alcune informazioni su aspetti specifici dell'architettura, è disponibile in una versione archiviata della pagina Gestione ABI degli sviluppatori Android , acquisita il 18 aprile 2016.

È interessante notare che il targeting di una singola ABI (in cui un'app include librerie native progettate per un'architettura) non significa necessariamente che l'app non funzionerà su dispositivi che utilizzano altre architetture. ARMv8-a, ad esempio, è retrocompatibile con ARM e ARMv7-a e i dispositivi Android x86 di Intel contengono un livello di traduzione proprietario che consente l'esecuzione del codice ARM su dispositivi x86 (consentendo l'esecuzione solo di app ARM su piattaforme x86). Un elenco dei ABI che un dispositivo Android può eseguire possono essere trovate nella ro.product.cpu.abiliststruttura, che può essere raggiunto in un guscio (ad esempio tramite un'applicazione di terminale sul dispositivo, o sopra ADB utilizzando adb shell) utilizzando il getpropcomando: getprop ro.product.cpu.abilist.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.