11
votes

dossier Armeabi et Armeabi-V7A

Je travaille sur un projet Android et j'utilise le NDK pour appeler des méthodes natales. J'ai deux bibliothèques (fichiers .so) et l'une est située dans le dossier Libs / Armeabi et l'autre est situé dans le dossier LIBS / AMEABI-V7A LIB. < / p>

Si j'essaie d'exécuter l'application, il ne chargera pas de la bibliothèque dans le dossier / Libs / armabi . Si je déplace le fichier de bibliothèque sur le dossier LIBS / AMEABI-V7A , il charge la bibliothèque, mais après 5 à 10 minutes, il se bloque et donne une erreur de défaut de segmentation.

Je me demandais si l'emplacement de la bibliothèque (dossier différent) pourrait causer ce problème.


1 commentaires

Hey .. tu l'as résolu? J'ai un doute. Si je construis FFMPEG pour ARMV7 - une arche. Puis-je l'utiliser sur les appareils Armeabi? Je suis nouveau à cela. Je l'ai construit pour armv7-A Cross compilé.


3 Réponses :


-6
votes

Je suis nouveau à cela moi-même, mais je vais le même chemin ... Autant que je sache, on ne peut avoir qu'un seul la bibliothèque partagée ; Pour utiliser plusieurs bibliothèques, faites-leur statique et liez-les à un seul partagé. Bien sûr, cela suppose que vous construisez vous-même les bibliothèques. -)


1 commentaires

Ce n'est pas correct. Il est tout à fait possible d'avoir plusieurs bibliothèques partagées, bien qu'elle introduit une complexité supplémentaire facile à ne pas avoir de problèmes et de poser des problèmes.



5
votes

Le chargeur de bibliothèque essaiera de rechercher des bibliothèques qui correspondent la plus étroitement à l'architecture que vous utilisez. En général, vous devriez compiler une version de la bibliothèque pour chacun des ABI que vous prévoyez de soutenir (Armeabi, Armeabi-v7a, X86, MIPS) afin que le compilateur puisse optimiser correctement.

La structure de répertoire est la détermination de l'Android détermine que libérez-vous, de sorte que vous ne le changez pas.


0 commentaires

21
votes

Lors de l'installation d'une application, le service de gestionnaire de packages scannera le fichier .apk et recherchera toute bibliothèque partagée du formulaire: xxx

si on a trouvé, il est copié sous $ appdir /lib/lib.so, où $ appdir correspond au répertoire de données spécifique de l'application.

Si aucun n'est trouvé, et une ABI secondaire est définie, le service scannera ensuite les bibliothèques partagées du formulaire: < / p> xxx

Si quelque chose est trouvé, il est copié sous $ appdir / lib / lib.so.

pour l'abi primaire / secondaire,

Le système Android sait au moment de l'exécution du (s) ABI (S) qu'elle soutient. Plus précisément, jusqu'à deux propriétés du système spécifiques à une construction sont utilisés pour indiquer:

  • ABI "primaire" pour le périphérique, correspondant au code de la machine utilisé dans l'image système elle-même.

  • ABI "secondaire" optionnel, correspondant à un autre ABI qui est également pris en charge par l'image système.

    Par exemple, un dispositif à base d'armv5te typique ne définirait que l'ABI primaire comme «armée» et ne définit pas un secondaire.

    d'autre part, une armv7 typique basée sur une armv7 Le périphérique définirait l'ABI primaire à «Armeabi-v7a» et le secondaire à «Armeabi» car il peut exécuter des fichiers binaires natifs d'application générés pour les deux.

    Ce mécanisme garantit que le meilleur code de machine pour le Le périphérique cible est automatiquement extrait de l'emballage au moment de l'installation.


3 commentaires

Les bibliothèques armées sont-elles directement compatibles avec Armebi-V7A? Je veux dire - cela fonctionnera-t-il si vous déplacez vos bibliothèques du dossier ARMEEBI vers le dossier ARMEABI-V7A? C'est quelque chose que l'on ferait s'il utilise des bibliothèques uniquement disponibles dans Armeabi, et il souhaite en même temps que les bibliothèques ne sont disponibles que dans Armeabi-V7A.


Merci, je sais celui-ci. Je me demandais si une bibliothèque Armeabi s'attendra à des choses supplémentaires si elle est placée dans le dossier ARMEABI-V7A au lieu du dossier Armeabi (sur un périphérique ARMEABI-V7A). Je pensais que dans certains cas, il peut s'écraser, si le dispositif le considère comme construit pour Armeabi-v7a.


@Stan j'utilise armabi / libxx.so dans le fichier android.mk pour armv7-a. Il se bloque.