In meinem aktuellen Projekt verwende ich mehrere .so-Dateien. Diese befinden sich im Ordner armeabi und armeabi-v7a. Leider ist eine der .so-Dateien 6 MB groß und ich muss die Dateigröße reduzieren. Anstatt eine fette APK-Datei zu haben, möchte ich nur die armeabi-Dateien verwenden und den armeabi-v7a-Ordner entfernen.
Gemäß der NDK-Dokumentation ist der armeabi-v7a-Code ein erweiterter armeabi-Code, der zusätzliche CPU-Anweisungen enthalten kann. Dies alles geht über mein Fachwissen hinaus, aber ich frage mich, warum man sowohl armeabi-v7a als auch armeabi-Code haben möchte. Es muss einen guten Grund geben, beides zu haben, oder?
Auf meinen Testgeräten scheint dies alles gut zu funktionieren. Diese haben ARM v7-CPUs. Ist es sicher anzunehmen, dass jetzt alles funktioniert?
quelle
armeabi is deprecated in NDK r16. Removed in NDK r17. No hard float.
Antworten:
Hängt davon ab, was Ihr nativer Code tut, aber v7a unterstützt Hardware-Gleitkommaoperationen, was einen großen Unterschied macht. armeabi funktioniert auf allen Geräten einwandfrei, ist jedoch viel langsamer und nutzt die CPU-Funktionen neuerer Geräte nicht aus. Nehmen Sie einige Benchmarks für Ihre spezielle Anwendung, aber das Entfernen der armeabi-v7a-Binärdateien ist im Allgemeinen keine gute Idee. Wenn Sie die Größe reduzieren müssen, möchten Sie möglicherweise zwei separate Apks für ältere (armeabi) und neuere (armeabi-v7a) Geräte.
quelle
EABI = Embedded Application Binary Interface. Es sind solche Spezifikationen, denen eine ausführbare Datei entsprechen muss, um in einer bestimmten Ausführungsumgebung ausgeführt zu werden. Außerdem werden verschiedene Aspekte der Kompilierung und Verknüpfung angegeben, die für die Interaktion zwischen Toolchains erforderlich sind, die für die ARM-Architektur verwendet werden. Wenn wir in diesem Zusammenhang über armeabi sprechen, sprechen wir über ARM-Architektur und GNU / Linux OS. Android folgt dem Little-Endian ARM GNU / Linux ABI.
Die armeabi-Anwendung wird auf ARMv5 (z. B. ARM9) und ARMv6 (z. B. ARM11) ausgeführt. Sie können Gleitkomma-Hardware verwenden, wenn Sie Ihre Anwendung mit geeigneten GCC-Optionen wie -mfpu = vfpv3 -mfloat-abi = softfp erstellen, die den Compiler anweisen, Gleitkomma-Anweisungen für VFP-Hardware zu generieren, und die Soft-Float-Aufrufkonventionen aktivieren. armeabi unterstützt keine Hard-Float-Aufrufkonventionen (dies bedeutet, dass FP-Register nicht verwendet werden, um Argumente für eine Funktion zu enthalten), aber FP-Operationen in HW werden weiterhin unterstützt.
Die Anwendung armeabi-v7a kann auf Cortex A # -Geräten wie Cortex A8, A9 und A15 ausgeführt werden. Es unterstützt Multi-Core-Prozessoren und -mfloat-abi = hard . Wenn Sie also Ihre Anwendung mit -mfloat-abi = hard erstellen , sind viele Ihrer Funktionsaufrufe schneller.
quelle
The armeabi-v7a ABI uses the -mfloat-abi=softfp switch
. Was meinst du mit unterstützt -mfloat-abi = hard ?Das Gegenteil ist eine viel bessere Strategie. Wenn Sie
minSdkVersion
14 Jahre alt sind und Ihre Apk in den Play Store hochladen müssen, werden Sie feststellen, dass Sie die gleiche Anzahl von Geräten unterstützen, unabhängig davon, ob Sie diese unterstützenarmeabi
oder nicht. Daher gibt es keine Geräte mit Android 4 oder höher, die überhaupt davon profitieren würdenarmeabi
.Dies ist wahrscheinlich der Grund, warum das Android NDK
armeabi
gemäß Revision r17b nicht einmal mehr unterstützt. [ Quelle ]quelle