Perché usare il codice armeabi-v7a sul codice armeabi?


141

Nel mio progetto attuale utilizzo più file .so. Questi si trovano nella cartella armeabi e armeabi-v7a. Sfortunatamente uno dei file .so è un 6 MB e devo ridurre le dimensioni del file. Invece di avere un grosso file APK, vorrei usare solo i file armeabi e rimuovere la cartella armeabi-v7a.

Secondo la documentazione NDK, il codice armeabi-v7a è un codice armeabi esteso che può contenere istruzioni aggiuntive sulla CPU. Tutto ciò va oltre la mia esperienza, ma mi chiedo perché si vorrebbe avere sia il codice armeabi-v7a che il codice armeabi. Ci deve essere una buona ragione per avere entrambi, giusto?

Sui miei dispositivi di test tutto sembra funzionare bene. Questi hanno CPU ARM v7. È sicuro supporre che tutto funzioni ora?


2
Potresti voler leggere questo post sul blog ora. È completo e aggiornato: androidbycode.wordpress.com/tag/armeabi-v7a
IgorGanapolsky

2
E ora il documento dice:armeabi is deprecated in NDK r16. Removed in NDK r17. No hard float.
Amir Rezazadeh,

1
Per quelli che verranno dopo, dai un'occhiata qui .
Amir Rezazadeh,

Risposte:


163

Dipende da ciò che fa il tuo codice nativo, ma v7a supporta le operazioni hardware in virgola mobile, il che fa una grande differenza. armeabi funzionerà perfettamente su tutti i dispositivi, ma sarà molto più lento e non sfrutterà le funzionalità della CPU dei dispositivi più recenti. Prendi alcuni benchmark per la tua particolare applicazione, ma rimuovere i binari armeabi-v7a non è generalmente una buona idea. Se devi ridurre le dimensioni, potresti voler avere due apk separati per i dispositivi più vecchi (armeabi) e più recenti (armeabi-v7a).


1
Dove posso trovare la differenza tra entrambi ABI? Sono molto interessato a capire le differenze reali ...
webshaker,


1
hai qualche idea su una soluzione elegante per ottenere Google Play per permetterti di caricare questi due diversi APK? Non c'è modo di differenziare nel manifest che sono diversi, quindi Google Play vuole solo sostituire uno con l'altro (hanno codici di versione diversi)
Dean Wild,

11
@DeanWild Google ha ora aggiunto il supporto per il targeting di diverse architetture CPU nella funzione APK multiplo del Play Store: developer.android.com/guide/google/play/publishing/…
Charles Harley,

1
@IgorGanapolsky, grazie per averlo sottolineato. Questo è ora il link corretto: developer.android.com/google/play/publishing/…
Charles Harley

60

EABI = Interfaccia binaria dell'applicazione integrata. Sono tali specifiche a cui un eseguibile deve conformarsi per eseguire in un ambiente di esecuzione specifico. Specifica inoltre vari aspetti della compilazione e del collegamento necessari per l'interoperabilità tra le toolchain utilizzate per l'architettura ARM. In questo contesto, quando parliamo di armeabi , parliamo di architettura ARM e sistema operativo GNU / Linux. Android segue l'ABI ARM GNU / Linux little endian.

l'applicazione armeabi verrà eseguita su ARMv5 (ad esempio ARM9) e ARMv6 (ad esempio ARM11). È possibile utilizzare l'hardware in virgola mobile se si sviluppa l'applicazione utilizzando le opzioni GCC appropriate come -mfpu = vfpv3 -mfloat-abi = softfp che indica al compilatore di generare istruzioni in virgola mobile per l'hardware VFP e abilita le convenzioni di chiamata soft-float. armeabi non supporta le convenzioni di chiamata su float (significa che i registri FP non sono usati per contenere argomenti per una funzione), ma le operazioni FP in HW sono ancora supportate.

L'applicazione armeabi-v7a verrà eseguita su dispositivi Cortex A # come Cortex A8, A9 e A15. Supporta processori multi-core e supporta -mfloat-abi = hard . Quindi, se compili la tua applicazione usando -mfloat-abi = hard , molte delle tue chiamate di funzione saranno più veloci.


1
Secondo developer.android.com/ndk/guides/abis.html : The armeabi-v7a ABI uses the -mfloat-abi=softfp switch. Quindi cosa intendi con -mfloat-abi = hard ?
IgorGanapolsky

8

Invece di avere un grosso file APK, vorrei usare solo i file armeabi e rimuovere la cartella armeabi-v7a.

Il contrario è una strategia molto migliore. Se devi minSdkVersion14 e caricare il tuo apk sul Play Store, noterai che supporterai lo stesso numero di dispositivi, che tu lo supporti armeabio meno. Pertanto, non ci sono dispositivi con Android 4 o superiore che ne trarrebbero beneficio armeabi.

Questo è probabilmente il motivo per cui NDK per Android non supporta nemmeno armeabipiù come da revisione r17b. [ fonte ]

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.