Dlaczego warto używać kodu armeabi-v7a zamiast kodu armeabi?


141

W moim obecnym projekcie korzystam z wielu plików .so. Znajdują się one w folderze armeabi i armeabi-v7a. Niestety jeden z plików .so ma 6 MB i muszę zmniejszyć rozmiar pliku. Zamiast mieć gruby plik APK, chciałbym użyć tylko plików armeabi i usunąć folder armeabi-v7a.

Zgodnie z dokumentacją NDK, kod armeabi-v7a jest rozszerzonym kodem armeabi, który może zawierać dodatkowe instrukcje procesora. To wszystko wykracza poza moje doświadczenie, ale zastanawiam się, dlaczego chciałoby się mieć zarówno kod armeabi-v7a, jak i armeabi. Musi być dobry powód, aby mieć jedno i drugie, prawda?

Na moich urządzeniach testowych wszystko wydaje się działać dobrze. Te mają procesory ARM v7. Czy można bezpiecznie założyć, że teraz wszystko działa?


2
Możesz teraz przeczytać tego posta na blogu. Jest dokładna i aktualna: androidbycode.wordpress.com/tag/armeabi-v7a
IgorGanapolsky

2
A teraz doktor mówi:armeabi is deprecated in NDK r16. Removed in NDK r17. No hard float.
Amir Rezazadeh

1
Dla tych, którzy przyjdą później, spójrz tutaj .
Amir Rezazadeh

Odpowiedzi:


163

Zależy od tego, co robi twój kod natywny, ale v7a obsługuje sprzętowe operacje zmiennoprzecinkowe, co robi ogromną różnicę. armeabi będzie działał dobrze na wszystkich urządzeniach, ale będzie znacznie wolniejszy i nie będzie wykorzystywać możliwości procesora nowszych urządzeń. Wykonaj testy porównawcze dla swojej aplikacji, ale usuwanie plików binarnych armeabi-v7a na ogół nie jest dobrym pomysłem. Jeśli chcesz zmniejszyć rozmiar, możesz mieć dwa oddzielne apki dla starszych (armeabi) i nowszych (armeabi-v7a) urządzeń.


1
Gdzie mogę znaleźć różnicę między obydwoma ABI? Bardzo mi zależy na zrozumieniu prawdziwych różnic ...
webshaker


1
masz jakiś pomysł na eleganckie rozwiązanie umożliwiające uzyskanie Google Play, aby umożliwić przesyłanie tych dwóch różnych plików APK? Nie ma sposobu, aby odróżnić w manifeście, że są różne, więc Google Play chce po prostu zamienić jedno na drugie (mają różne kody wersji)
Dean Wild

11
@DeanWild Google dodało teraz obsługę kierowania na różne architektury procesorów w Sklepie Play Wiele funkcji APK: developer.android.com/guide/google/play/publishing/ ...
Charles Harley

1
@IgorGanapolsky, dziękuję za zwrócenie uwagi. To jest teraz poprawny link: developer.android.com/google/play/publishing/ ...
Charles Harley

60

EABI = wbudowany interfejs binarny aplikacji. To są takie specyfikacje, z którymi musi być zgodny plik wykonywalny, aby mógł zostać wykonany w określonym środowisku wykonawczym. Określa również różne aspekty kompilacji i łączenia wymagane do współdziałania między łańcuchami narzędzi używanymi w architekturze ARM. W tym kontekście, gdy mówimy o armeabi , mówimy o architekturze ARM i systemie operacyjnym GNU / Linux. Android jest zgodny z little-endian ARM GNU / Linux ABI.

Aplikacja armeabi będzie działać na ARMv5 (np. ARM9) i ARMv6 (np. ARM11). Możesz użyć sprzętu zmiennoprzecinkowego, jeśli budujesz swoją aplikację przy użyciu odpowiednich opcji GCC, takich jak -mfpu = vfpv3 -mfloat-abi = softfp, który mówi kompilatorowi, aby generował instrukcje zmiennoprzecinkowe dla sprzętu VFP i włącza konwencje wywoływania soft-float. armeabi nie obsługuje sztywnych konwencji wywoływania typu float (oznacza to, że rejestry FP nie są używane do przechowywania argumentów funkcji), ale operacje FP w HW są nadal obsługiwane.

Aplikacja armeabi-v7a będzie działać na urządzeniach Cortex A #, takich jak Cortex A8, A9 i A15. Obsługuje procesory wielordzeniowe i obsługuje -mfloat-abi = hard . Tak więc, jeśli zbudujesz swoją aplikację przy użyciu -mfloat-abi = hard , wiele wywołań funkcji będzie szybszych.


1
Według developer.android.com/ndk/guides/abis.html : The armeabi-v7a ABI uses the -mfloat-abi=softfp switch. Więc co masz na myśli mówiąc support -mfloat-abi = hard ?
IgorGanapolsky

8

Zamiast mieć gruby plik APK, chciałbym użyć tylko plików armeabi i usunąć folder armeabi-v7a.

Wręcz przeciwnie, jest znacznie lepsza strategia. Jeśli musisz mieć minSdkVersion14 i przesłać swój apk do sklepu Play, zauważysz, że będziesz obsługiwać tę samą liczbę urządzeń, niezależnie od tego, czy obsługujesz, armeabiczy nie. Dlatego nie ma urządzeń z Androidem 4 lub nowszym, które w ogóle by skorzystały armeabi.

Prawdopodobnie dlatego Android NDK nie obsługuje armeabijuż nawet wersji r17b. [ źródło ]

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.