2017-08-12 6 views
0

J'ai trouvé une application android dans github, elle a été écrite en C++ et utilise le jni. Dans ses jniLibs, je n'ai trouvé que le répertoire "armeabi-v7a", et tous les fichiers jni (.so) ont été stockés ici. mon architecture de l'unité centrale de téléphone Android est aarch64 (arm-v8a), et l'application peut fonctionner correctement sur mon téléphone. mais après je déplace le SDK dans mon application, il demande toujours l'erreurDans l'application android, est-il possible d'utiliser la bibliothèque de bras pour un cpu aarch64?

java.lang.UnsatisfiedLinkError: Native library (com/sun/jna/android-aarch64/libjnidispatch.so) not found in resource path (.)

mais à l'application par exemple quand je supprimer le même fichier « .donc » il est dit:

java.lang.UnsatisfiedLinkError: Native library (com/sun/jna/android-arm/libjnidispatch.so) not found in resource path (.)

donc,

Répondre

0

En règle générale, un périphérique Android prend en charge plusieurs ABI et les périphériques 64 bits prennent en charge la génération de code natif pour certaines architectures 32 bits. Par exemple, les appareils arm64 (64 bits) prendront toujours en charge l'armeabi-v7a (32 bits), pour assurer la compatibilité avec les anciennes applications. Ceci est une exigence directement de Google.

Pour instace, pour voir quelles architectures vos supports de périphériques, exécutez:

  • Pré-Lolipop: adb shell getprop ro.product.cpu.abi
  • Lolipop & plus: adb shell getprop ro.product.cpu.abilist

Vous devriez voir une liste des plusieurs ABI à la suite de la commande.

J'ai lu récemment un devblog de Realm dans lequel ils ont abordé certains problèmes liés à JNI. L'un d'eux était similaire à ce que vous affrontez. Leur conclusion était qu'Android est confus lorsque la même application doit charger des bibliothèques natives 32bit 0bit 32 bits &, et essaie seulement de charger les versions 64 bits, même si une dépendance n'a que la version 32 bits de son code natif.

Dans votre cas, vous essayez de charger une bibliothèque native pour 32 bits, mais Android essaie de charger sa version 64 bits. Cela peut se produire si l'une de vos autres dépendances possède des bibliothèques natives 64 bits.

Le Devblog je l'ai mentionné: https://academy.realm.io/posts/kenneth-geisshirt-tales-developing-sdks-at-scale/

Chercher "Plus .donc questions"

Hope this helps