2017-09-28 3 views
-1

L'erreur est: Causée par: java.lang.UnsatisfiedLinkError: Méthode native non trouvée. Je sais que c'est parce que j'ai appelé System.loadLibrary dans mon projet, j'ai besoin de connaître le nom du paquet .so son projet.Comment puis-je le résoudre. Si d'une certaine manière, je peux obtenir le nom de la méthode déclar. NDK est livré avec l'utilitaire nm.Comment appeler la méthode dans le fichier.so, mais je ne connais pas le nom du paquet qui produit le fichier .so un appareil Android

Répondre

0

Recherchez-le dans le dossier toolchains, correspondant à l'ABI avec lequel vous travaillez, par ex. toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-nm.

Vous pouvez exécuter

…-nm -D /path/to/the/existing/sharedlib.so 

Certains symboles exportés regarderont comme nous l'espérons Java_my_package_name_MyClass_function. Cette fonction est une implémentation d'une méthode native fonction dans la classe MyClass dans le package my.package.name. Malheureusement, cela vous aide seulement à inverser ces noms; vous ne pouvez pas facilement reconstruire les paramètres ou renvoyer la valeur de la méthode native. Vous ne pouvez même pas savoir si cette méthode doit être déclarée statique.

Enfin, si les exportations de bibliothèque fonction JNI_OnLoad, il peut cacher les méthodes natives et utiliser RegisterNatives pour lier les méthodes natives à des implémentations C dynamiquement.

+0

Après l'exécution de cette commande, je reçois ce qui suit, mais rien avec information sur le paquet
0012a1f4 D v3_ocsp_crlid
0012a114 D v3_ocsp_nocheck
0012668c D v3_ocsp_nonce
0012a0dc D v3_ocsp_serviceloc
0012a3d8 D v3_pci
user7386820

+0

peut-être vous avez manqué le * * -D ** paramètre à ** nm **? –