web-dev-qa-db-fra.com

Comment créer Android des applications prenant en charge les architectures 32 et 64 bits?

Je viens tout juste de recevoir et de lire bulletin d’information de Google Play , mentionnant que, à partir de l’année prochaine, le magasin "demandera aux nouvelles applications et aux mises à jour des applications avec bibliothèques natives de fournir des versions 64 bits en plus de leurs 32 versions binaires ".

Pour ceux qui ne l'ont pas encore lu, on peut lire:

Configuration requise pour la prise en charge 64 bits en 2019

La plate-forme de prise en charge des architectures 64 bits a été introduite dans Android 5.0. Aujourd'hui, plus de 40% des Android mis en ligne disposent d'une prise en charge 64 bits, tout en maintenant Compatibilité 32 bits: pour les applications utilisant des bibliothèques natives, le code 64 bits offre généralement de meilleures performances, avec des registres supplémentaires et de nouvelles instructions.

En prévision des futurs Android ne prenant en charge que le code 64 bits, Play Console exigera que les nouvelles applications et les mises à jour d'applications avec les bibliothèques natives fournissent des versions 64 bits en plus de leurs versions 32 bits. Cela peut être dans un fichier APK unique ou en tant que l'un des fichiers APK publiés.

Nous ne supprimons pas le support 32 bits. Google Play continuera à prendre en charge les applications et les appareils 32 bits. Les applications qui n'incluent pas de code natif ne sont pas affectées.

Ce changement entrera en vigueur en août 2019. Nous fournissons aujourd'hui un préavis afin de laisser suffisamment de temps aux développeurs qui ne prennent pas encore en charge la version 64 bits pour planifier la transition. Restez à l'écoute pour un prochain article dans lequel nous examinerons en détail les avantages des bibliothèques natives 64 bits sur Android en termes de performances, ainsi que le guide sur les processeurs et les architectures du NDK pour plus d'informations.

Quels changements pratiques devrons-nous apporter pour se conformer parfaitement à cette nouvelle exigence, le cas échéant?

21
JorgeAmVF

Selon un e-mail officiel envoyé par l'équipe Google Play, l'action requise est la suivante:

Si vous ne l'avez pas encore fait, nous vous encourageons à commencer à travailler dès que possible sur l'exigence 64 bits. De nombreuses applications sont entièrement écrites en code non natif (par exemple, le Java ou Kotlin) et n'auront pas besoin de modifications de code.

Veuillez noter que nous n'apportons aucune modification à notre politique de prise en charge 32 bits. Google Play continuera à fournir des applications avec code natif 32 bits aux appareils 32 bits. L'exigence signifie que ces applications devront également disposer d'une version 64 bits.

Pour vous aider à faire la transition, nous avons préparé documentation comment vérifier si votre application prend déjà en charge la version 64 bits et comment devenir compatible 64 bits.

Nous fournissons également un calendrier de haut niveau ci-dessous.

Ainsi, la documentation liée explique:

Si votre application utilise uniquement du code écrit dans le Java ou Kotlin, y compris les bibliothèques ou les kits SDK), votre application est déjà prête pour les appareils 64 bits. Si votre application utilise un code natif, ou vous n'êtes pas sûr que ce soit le cas, vous devrez évaluer votre application et prendre des mesures.

[...]

Le moyen le plus simple de rechercher des bibliothèques 64 bits consiste à inspecter la structure de votre fichier APK. Une fois construit, l'APK sera packagé avec toutes les bibliothèques natives nécessaires à l'application. Les bibliothèques natives sont stockées dans divers dossiers basés sur ABI. Il n'est pas nécessaire de prendre en charge chaque architecture 64 bits, mais pour chaque architecture 32 bits native, vous devez inclure l'architecture 64 bits correspondante.

Pour l'architecture ARM), les bibliothèques 32 bits sont situées dans armeabi-v7a. L'équivalent 64 bits est arm64-v8a.

Pour l'architecture x86, recherchez x86 pour 32 bits et x86_64 pour 64 bits.

La première chose à faire est de vous assurer que vous avez des bibliothèques natives dans ces deux dossiers. [...]

Et, pour construire des bibliothèques 64 bits, vous devez essentiellement suivre les instructions ci-dessous:

La plupart Android Les projets de studio utilisent Gradle comme système de génération sous-jacent, cette section s’applique donc aux deux cas. Activer les générations pour votre code natif est aussi simple que d’ajouter arm64-v8a et/ou x86_64, selon le cas. sur la ou les architectures que vous souhaitez prendre en charge, définissez le paramètre ndk.abiFilters dans le fichier 'build.gradle' de votre application:

// 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'
// ...

Enfin, un petit mot:

La version 64 bits de votre application doit offrir la même qualité et les mêmes fonctionnalités que la version 32 bits.

A propos, cette vidéo officielle en parle un peu.

16
JorgeAmVF

Si vous n'avez pas de code natif (NDK), c'est-à-dire que vous écrivez seulement du code Java/Dex, vous n'avez rien à faire.

Si vous avez du code natif (ou des bibliothèques), vous devez fournir leur version 64 bits.

8
Nick Fortescue

Selon la documentation ici , si votre application utilise du code natif ou une bibliothèque externe, par exemple un domaine (dans l'image ci-dessous) basé sur le langage natif, un support pour 64 bits doit être fourni. Si l'une des bibliothèques externes de votre application qui utilise un langage C/C++ (natif) doit être prise en charge par les architectures 32 et 64 bits, vous devez sinon contacter le propriétaire de la bibliothèque. Dans Android Studio, nous pouvons vérifier si les versions des deux architectures sont disponibles via Construire> Analyser APK et la fenêtre suivante. apparaît:

Android Studio tab showing avaiable architectures

Si vous utilisez NDK et créez du code natif, vous devez fournir un support pour les deux architectures en les inscrivant dans le dégradé sous la forme:

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

Si votre Android APK ne comprend pas la prise en charge 64 bits, ne vous inquiétez pas. Allez à Construire -> Analyser APK, dans Android Studio. Vous êtes capable de voir la structure APK. Sous lib, si vous voyez armeabi-v7a bibliothèques et si vous n’avez pas de arm64-v8a ou x86_64 bibliothèques, votre APK ne prend pas en charge l’architecture 64 bits.

Il suffit d'aller au niveau de l'application build.gradle et ajoutez abiFilters dans le NDK sous defaultConfig comme ci-dessous:

ndk {
    abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'
}
3
sagarchavan
  • Option 1 - supprimer lib de APK.
    • Étape 1 - convertissez l’APK en Zip et trouvez le dossier lib; si vous avez le dossier lib, voir la dépendance de la bibliothèque.
    • Étape 2 - Supprimer la dépendance de la génération Gradle.
  • Option 2 - Téléchargez le fichier JAR 64 bits et 32 ​​bits et ajoutez-le dans votre dossier lib dans l'application et créez-le.
1
Vibhu Vikram Singh

Code natif: fait référence à un programme exécutable compilé directement dans les instructions de la CPU de l'ordinateur sur lequel il est exécuté.

Code non natif: fait référence à un programme exécutable compilé selon les instructions de la CPU de l’architecture Tandem originale de la fin des années 1970 et des années 1980. Lorsqu'un tel programme est exécuté, il ne peut pas être exécuté directement sur la CPU de l'ordinateur sur lequel il est exécuté. Le système d'exploitation NonStop inclut un interpréteur pour cette architecture Tandem d'origine, qui est utilisé pour exécuter ce code non natif.

Si votre application utilise uniquement du code écrit dans le Java ou Kotlin, y compris les bibliothèques ou les kits SDK), votre application est déjà prête pour les appareils 64 bits. Si votre application utilise un code natif, ou vous n'êtes pas sûr que ce soit le cas, vous devrez évaluer votre application et prendre des mesures.

Votre application utilise-t-elle du code natif?

La première chose à faire est de vérifier si votre application utilise du code natif. Votre application utilise le code natif si:

  • utilise n'importe quel code C/C++ (natif) dans votre application.
  • des liens avec des bibliothèques natives tierces.
  • est construit par un constructeur d'applications tiers qui utilise des bibliothèques natives.

Pour plus d'informations, visitez la documentation .

1
EL TEGANI MOHAMED

Ajouter

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

dans le build.Gradle fichier sous DefaultConfig. Notez que l'exigence Push to Play Store 64 bits arrive.

0
nidamanuri chandu