Wie zielen Sie auf verschiedene Android-Architekturen ab?

7

Ich verwende derzeit die OpenCV (OpenCV4Android) -Bibliothek, die das NDK nicht verwendet (es gibt keinen C- oder C ++ - Code). Es gibt jedoch .so-Dateien für armeabi, armeabi-v7a, mips und x86. Wenn ich all diese in das Projekt einbeziehe, beträgt die App-Größe 30 MB, wenn ich nur 1 einschließe, beträgt die App-Größe nur 9 MB. Wenn ich versuche, die App auf einem Gerät auszuführen, auf dem die .so-Datei dieses Geräts nicht enthalten ist, stürzt es ab, wenn ich jedoch die .so-Datei verwende, funktioniert sie.

Daher möchte ich mehrere APKs auf verschiedenen Gerätearchitekturen veröffentlichen, um die Dateigrößen zu reduzieren. Von dem, was ich gesehen habe, kann dies nur in der Application.mk-Datei getan werden, aber meine Bibliothek hat keine. Gibt es eine andere Möglichkeit, verschiedene Android-Architekturen zu verwenden?

    
AggieDev 22.01.2015, 23:04
quelle

3 Antworten

13
  

Ich verwende derzeit die OpenCV (OpenCV4Android) -Bibliothek, die das NDK nicht verwendet (es gibt keinen C- oder C ++ - Code). Es gibt jedoch .so-Dateien für armeabi, armeabi-v7a, mips und x86.

Wie gesagt, wenn es .so Dateien gibt, benutzt es das NDK.

  

Wenn ich versuche, die App auf einem Gerät auszuführen, auf dem die .so-Datei dieses Geräts nicht enthalten ist, stürzt es ab. Wenn ich dagegen die .so-Datei habe, funktioniert sie.

Das hängt vom Gerät ab. Viele x86-Geräte haben libhoudini , mit denen ARM NDK-Binärdateien ausgeführt werden können, allerdings langsamer als mit nativen x86-Binärdateien. In ähnlicher Weise kann ein armeabi-v7 -Gerät armeabi NDK-Binärdateien ausführen, wenn auch möglicherweise langsamer, insbesondere wenn Gleitkommaverarbeitung verwendet wird.

  

Daher möchte ich mehrere APKs auf verschiedenen Gerätearchitekturen veröffentlichen, um die Dateigrößen zu reduzieren. Von dem, was ich gesehen habe, kann dies nur in der Application.mk-Datei getan werden, aber meine Bibliothek hat keine.

Die Application.mk -Datei steuert nur, was kompiliert wird, nicht was verteilt wird.

  

Gibt es eine andere Möglichkeit, verschiedene Android-Architekturen zu verwenden?

Verwenden Sie Gradle für Android, möglicherweise in Verbindung mit Android Studio, und die abi Teilung :

%Vor%

Die abi Schließung in der splits Schließung:

  • entscheidet sich für unterschiedliche APK-Dateien pro CPU-Architektur

  • erstellt eine Whitelist der gewünschten Architekturen

  • fordert außerdem ein "universelles APK" an, das alle Architekturen für die Verwendung mit Vertriebskanälen enthält, die keine separaten APKs nach Architektur unterstützen

Das Ergebnis Ihres Builds sind separate APKs nach CPU-Architektur und die universelle.

    
CommonsWare 22.01.2015 23:39
quelle
9

Jede apk für die Anwendung sollte einen eindeutigen Versionscode haben, der von android:versionCode angegeben wird. Einige x86-Geräte können ARMv7-Binärdateien ausführen. Um zu vermeiden, dass ARMv7 apk in x86-Geräten (und ähnlichen Szenarien für andere Architekturen) heruntergeladen / verwendet wird, sollten Sie die Versionscodes bestellen . Ordnen Sie z. B. die Versionscodes so an, dass das x86-APK einen höheren Versionscode als ARMv7 hat. Mehr zur Versionierung in diesem link .

Ein build.gradle sample zum Erstellen eindeutiger versionscodierter APKs für jede Architektur Ihrer Wahl wird von ph0b unter github geteilt . Kopieren Sie das gleiche unten.

%Vor%

Vorschlag: Android mehrere apk-Unterstützung Dokumentation empfiehlt zu Verwenden Sie nicht mehrere APKs , wenn die APK-Größe weniger als 50 MB beträgt.

  

Sie sollten im Allgemeinen mehrere APKs verwenden, um verschiedene Geräte zu unterstützen   Konfigurationen nur dann, wenn Ihr APK zu groß (größer als 50 MB) ist   zu den alternativen Ressourcen, die für unterschiedliche Geräte benötigt werden   Konfigurationen. Verwenden eines einzelnen APK zur Unterstützung verschiedener Konfigurationen   ist immer die beste Praxis, weil es den Weg für die Anwendung macht   Updates einfach und klar für die Benutzer (und macht auch Ihr Leben einfacher   durch Vermeidung von Entwicklungs - und Publishing - Komplexität).

    
Kiran 23.01.2015 09:55
quelle
3

Ich empfehle nicht, dieses Muster zu verwenden, um Ihre Build-Nummer zu erstellen. ARCH - BUILD, denn wenn du eines Tages zu einer APK zurückkehren willst, musst du deinen versionCode sehr erhöhen. Stattdessen können Sie diesem Muster folgen:  BUILD - ARCH

%Vor%

Beispiel für Build 74 Die Build-Nummer wird sein:     7402 - armeabi-v7a     7408 - x86

    
sonique 26.04.2016 23:44
quelle

Tags und Links