web-dev-qa-db-ger.com

Wie erstelle ich Android Apps, die sowohl die 32-Bit- als auch die 64-Bit-Architektur unterstützen?

Ich habe gerade einen Newsletter von Google Play erhalten und gelesen erwähnt, dass der Store ab dem nächsten Jahr zusätzlich zu neuen Apps und App-Updates mit nativen Bibliotheken 64-Bit-Versionen bereitstellen muss ihre 32-Bit-Versionen ".

Für diejenigen, die es noch nicht gelesen haben, heißt es:

64-Bit-Unterstützungsanforderung im Jahr 2019

Die Plattformunterstützung für 64-Bit-Architekturen wurde in Android 5.0 eingeführt. Heute bieten über 40% der online verfügbaren Android= Geräte 64-Bit-Unterstützung, bleiben jedoch erhalten 32-Bit-Kompatibilität: Für Apps, die native Bibliotheken verwenden, bietet der 64-Bit-Code in der Regel eine deutlich bessere Leistung mit zusätzlichen Registern und neuen Anweisungen.

In Erwartung zukünftiger Android Geräte, die nur 64-Bit-Code unterstützen, erfordert die Play Console, dass neue Apps und App-Updates mit nativen Bibliotheken zusätzlich zu ihren 32-Bit-Versionen 64-Bit-Versionen bereitstellen Dies kann innerhalb einer einzelnen APK oder als eine der mehreren veröffentlichten APKs erfolgen.

Die 32-Bit-Unterstützung wird nicht entfernt. Google Play unterstützt weiterhin 32-Bit-Apps und -Geräte. Apps, die keinen nativen Code enthalten, sind nicht betroffen.

Diese Änderung tritt im August 2019 in Kraft. Wir geben heute eine Vorankündigung, damit Entwickler, die 64-Bit noch nicht unterstützen, genügend Zeit haben, die Umstellung zu planen. Seien Sie gespannt auf einen zukünftigen Beitrag, in dem wir uns eingehend mit den Leistungsvorteilen nativer 64-Bit-Bibliotheken für Android befassen und im Handbuch zu CPUs und Architekturen des NDK weitere Informationen finden.

Welche praktischen Änderungen müssen wir gegebenenfalls vornehmen, um diese neue Anforderung perfekt zu erfüllen?

21
JorgeAmVF

Laut einer offiziellen E-Mail des Google Play-Teams ist folgende Aktion erforderlich:

Wenn Sie dies noch nicht getan haben, empfehlen wir Ihnen, die Arbeit für die 64-Bit-Anforderung so bald wie möglich aufzunehmen. Viele Apps sind vollständig in nicht nativem Code geschrieben (z. B. die Programmiersprache Java oder Kotlin) und erfordern keine Codeänderungen.

Bitte beachten Sie, dass wir an unseren Richtlinien zur 32-Bit-Unterstützung keine Änderungen vornehmen. Google Play wird weiterhin Apps mit nativem 32-Bit-Code für 32-Bit-Geräte bereitstellen. Die Anforderung bedeutet, dass diese Apps auch eine 64-Bit-Version benötigen.

Um Ihnen bei der Umstellung zu helfen, haben wir eine Dokumentation erstellt , mit der Sie prüfen können, ob Ihre App bereits 64-Bit unterstützt und wie Sie 64-Bit-kompatibel werden .

Im Folgenden finden Sie auch eine allgemeine Zeitleiste.

Die verlinkte Dokumentation erklärt also:

Wenn Ihre App nur Code verwendet, der in der Programmiersprache Java oder Kotlin geschrieben wurde, einschließlich Bibliotheken oder SDKs, ist Ihre App bereits für 64-Bit-Geräte bereit. Wenn Ihre App nativen Code verwendet oder Sie sich nicht sicher sind, müssen Sie Ihre App bewerten und Maßnahmen ergreifen.

[...]

Die einfachste Möglichkeit, nach 64-Bit-Bibliotheken zu suchen, besteht darin, die Struktur Ihrer APK-Datei zu überprüfen. Nach der Erstellung wird das APK mit allen für die App erforderlichen nativen Bibliotheken gepackt. Native Bibliotheken werden basierend auf der ABI in verschiedenen Ordnern gespeichert. Es ist nicht erforderlich, jede 64-Bit-Architektur zu unterstützen. Sie müssen jedoch für jede von Ihnen unterstützte native 32-Bit-Architektur die entsprechende 64-Bit-Architektur einbeziehen.

Für die Architektur ARM befinden sich die 32-Bit-Bibliotheken in armeabi-v7a. Das 64-Bit-Äquivalent ist arm64-v8a.

Suchen Sie für die x86-Architektur nach x86 für 32-Bit und nach x86_64 für 64-Bit.

Stellen Sie zunächst sicher, dass sich in beiden Ordnern native Bibliotheken befinden. [...]

Um 64-Bit-Bibliotheken zu erstellen, müssen Sie im Grunde die folgenden Anweisungen befolgen:

Die meisten Android Studio-Projekte verwenden Gradle als zugrunde liegendes Build-System. Daher gilt dieser Abschnitt für beide Fälle. Das Aktivieren von Builds für Ihren nativen Code ist so einfach wie das Hinzufügen von arm64-v8a und/oder x86_64 zur Einstellung ndk.abiFilters in der Datei build.gradle Ihrer App, je nachdem, welche Architektur (en) Sie unterstützen möchten:

// Your app's build.gradle
apply plugin: 'com.Android.app'

Android {
   compileSdkVersion 27
   defaultConfig {
       appId "com.google.example.64bit"
       minSdkVersion 15
       targetSdkVersion 28
       versionCode 1
       versionName "1.0"
       ndk.abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
// ...

Zum Schluss noch ein kurzer Hinweis:

Die 64-Bit-Version Ihrer App sollte dieselbe Qualität und dieselben Funktionen bieten wie die 32-Bit-Version.

Übrigens dieses offizielle Video spricht ein wenig darüber.

16
JorgeAmVF

Wenn Sie keinen nativen Code (NDK) haben, dh Sie schreiben nur Java/Dex-Code, müssen Sie nichts tun.

Wenn Sie systemeigenen Code (oder Bibliotheken) haben, müssen Sie deren 64-Bit-Versionen bereitstellen.

8
Nick Fortescue

Gemäß der Dokumentation hier sollte eine Unterstützung für 64-Bit bereitgestellt werden, wenn Ihre App nativen Code oder eine externe Bibliothek verwendet, z. B. Realm (in der folgenden Abbildung), die auf nativem Code basiert. Wenn eine der externen Bibliotheken in Ihrer App, die C/C++ (native) verwendet, sowohl eine 32-Bit- als auch eine 64-Bit-Architektur unterstützen soll, sollten Sie sich an den Bibliotheksbesitzer wenden. In Android Studio können wir prüfen, ob Versionen für beide Architekturen verfügbar sind, indem wir Build> Analyze APK und das folgende Fenster aufrufen erscheint:

Android Studio tab showing avaiable architectures

Wenn Sie NDK verwenden und systemeigenen Code erstellen, sollten Sie beide Architekturen unterstützen, indem Sie sie in den Gradle eintragen als:

defaultConfig {  
   ndk.abiFilters = 'armeabi-v7a' 'arm64-v8a' 'x86' 'x86_64'
   }
4
Irfan Ul Haq

Wenn Ihr Android APK keine 64-Bit-Unterstützung enthält, müssen Sie sich keine Sorgen machen. Gehen Sie zu Build -> Analyze APK in Android= Studio. You are APK-Struktur anzeigen Wenn Sie unter lib armeabi-v7a - Bibliotheken anzeigen und keine arm64-v8a - oder x86_64 - Bibliotheken haben, unterstützt Ihr APK 64-Bit nicht die Architektur.

Gehen Sie einfach zur App-Ebene build.gradle Und fügen Sie abiFilters in NDK unter defaultConfig wie folgt hinzu:

ndk {
    abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'
}
3
sagarchavan
  • Option 1 - lib von APK entfernen.
    • Schritt 1 - konvertiere die APK nach Zip und finde den lib Ordner; Wenn Sie einen lib-Ordner haben, sehen Sie sich die Bibliotheksabhängigkeit an.
    • Schritt 2 - Entfernen Sie die Abhängigkeit von Build Gradle.
  • Option 2 - Laden Sie die 64-Bit- und 32-Bit-JAR-Datei herunter und fügen Sie sie in Ihrem lib-Ordner in der App hinzu und erstellen Sie sie.
1

Nativer Code: bezieht sich auf ein ausführbares Programm, das direkt mit den CPU-Anweisungen des Computers kompiliert wurde, auf dem es ausgeführt wird.

Nicht-nativer Code: bezieht sich auf ein ausführbares Programm, das gemäß den CPU-Anweisungen der ursprünglichen Tandemarchitektur der späten 1970er und 1980er Jahre kompiliert wurde. Wenn ein solches Programm ausgeführt wird, kann es nicht direkt auf der CPU des Computers ausgeführt werden, auf dem es ausgeführt wird. Das NonStop-Betriebssystem enthält einen Interpreter für diese ursprüngliche Tandemarchitektur, mit dem dieser nicht native Code ausgeführt wird.

Wenn Ihre App nur Code verwendet, der in der Programmiersprache Java= Kotlin) geschrieben wurde, einschließlich Bibliotheken oder SDKs, ist Ihre App bereits für 64-Bit-Geräte bereit. Wenn Ihre App systemeigenen Code verwendet, oder Wenn Sie sich nicht sicher sind, müssen Sie Ihre App bewerten und Maßnahmen ergreifen.

Verwendet Ihre App systemeigenen Code?

Als Erstes müssen Sie überprüfen, ob Ihre App nativen Code verwendet. Ihre App verwendet systemeigenen Code, wenn:

  • verwendet einen beliebigen C/C++ (nativen) Code in Ihrer App.
  • links zu nativen Bibliotheken von Drittanbietern.
  • wird von einem Drittanbieter-App-Builder erstellt, der native Bibliotheken verwendet.

Weitere Informationen finden Sie unter in den Dokumenten .

1

Hinzufügen

ndk {
    abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'
} 

in dem build.Gradle Datei unter DefaultConfig. Beachten Sie, dass die 64-Bit-Anforderung für den Push-to-Play-Store erfüllt ist.

0