2014-05-13 3 views
3

J'utilise OpenCV dans mes tests d'instrumentation android. Il fonctionne très bien sur les appareils les plus récents (gnex, nexus 5, nexus 7) mais pas sur les plus anciens (Nexus One, samsung GT-P7500R). J'utilise l'initialisation statique pour cette bibliothèque (par opposition à l'utilisation de l'application gestionnaire qui partage/partage les bibliothèques natives).Bibliothèque native non trouvée dans les tests d'instrumentation

C'est le même code de construction, basé sur gradle et incluant les mêmes fichiers .so, pour armeabi et armeabi-v7a.

J'ai installé OpenCVManager et une autre application qui l'utilise et fonctionne très bien même sur les appareils plus anciens. Je jetai un œil à l'intérieur du apk et même recopié les mêmes fichiers .so sur, mais encore obtenir le même message d'erreur:

java.lang.UnsatisfiedLinkError: Couldn't load opencv_java: findLibrary returned null 
at java.lang.Runtime.loadLibrary(Runtime.java:429) 
at java.lang.System.loadLibrary(System.java:554) 
at org.opencv.android.StaticHelper.loadLibrary(StaticHelper.java:54) 
at org.opencv.android.StaticHelper.initOpenCVLibs(StaticHelper.java:85) 
at org.opencv.android.StaticHelper.initOpenCV(StaticHelper.java:29) 
at org.opencv.android.OpenCVLoader.initDebug(OpenCVLoader.java:51) 

Toutes les idées sur quoi d'autre pourrait être différent? Je regardais à l'intérieur du apk d'instrumentation (test de débogage) et les fichiers lib sont là ...

Edit: J'ai essayé différentes configurations, mais aucun d'entre eux travaillent: - seulement les fichiers armeabi dans le dossier armeabi - seulement les fichiers armeabi-V7A dans le dossier armeabi-V7A - seulement les fichiers armeabi dans le dossier haut (dossier lib dans apk) - seulement les fichiers armeabi-V7A dans le dossier haut (dossier lib dans apk) - chargement manuel opencv_java - chargement manuel OpenCVENgine, OpenCVEngine_jni ("emprunté "de l'application OpenCVManager).

J'ai essayé certaines de ces approches sur d'autres appareils et ils fonctionnent très bien ...

+0

Habituellement statique \t { \t \t OpenCVLoader.initDebug(); \t} est la résolution pour moi dans ce sens à la racine de votre application. Mais ne semble pas être par la façon dont vous dites que vous le chargez. Peut-être que certaines bibliothèques statiques manquent dans votre dossier armeabi? –

+0

Intéressant sur Nexus One, le gestionnaire opencv vient uniquement avec un dossier armeabi-v7a, et j'ai essayé de regrouper les dans, mais pas de chance. – radu

+0

Sans le dossier armeabi, vous ne pourrez pas utiliser la bibliothèque opencv sur les appareils plus anciens. J'ai un couple ici au bureau qui est vieux et ne fonctionnerait pas avec juste un dossier armeabi-v7. J'ai une structure de dossier armeabi dans le projet OpenCV Android Library que j'avais téléchargé. Si vous fournissez ce dossier dans votre application sous le dossier/libs en plus de votre dossier existant, il est fort probable que vous retrouviez des liens sur ces anciens systèmes. –

Répondre

0

Il se trouve que c'était un problème avec le fait que la bibliothèque OpenCV faisait partie des dépendances du projet de test d'instrumentation . Dans le fichier build.gradle, le passage du androidTestCompile à compile dans le fichier build.gradle (en ajoutant la dépendance à l'application testée plutôt qu'à l'application de test) permet au chargement de la bibliothèque de fonctionner correctement. Je vais creuser un peu plus pour voir s'il y a des solutions de contournement.

Questions connexes