Android 在JNI共享库中查找函数?

Android 在JNI共享库中查找函数?,android,c++,java-native-interface,Android,C++,Java Native Interface,有人知道如何通过NDK编译的共享库和面向公共的JNI函数/方法来显示所有可用的函数吗 我有一个lib*jni.so文件,我需要它来访问它的方法。使用nm-Dg lib*jni.so输出共享库中找到的所有符号。我只寻找那些定义为JNI钩子的 谢谢, Kevin使用本机方法在.class文件上运行javap。您可以使用一些技巧来找到答案 检查相应的.class文件。如果您有库的.class文件,可以在Eclipse中打开它们并搜索native关键字,查看哪些方法已声明为在native中实现 使用st

有人知道如何通过NDK编译的共享库和面向公共的JNI函数/方法来显示所有可用的函数吗

我有一个lib*jni.so文件,我需要它来访问它的方法。使用nm-Dg lib*jni.so输出共享库中找到的所有符号。我只寻找那些定义为JNI钩子的

谢谢,
Kevin

使用本机方法在.class文件上运行
javap

您可以使用一些技巧来找到答案

  • 检查相应的.class文件。如果您有库的.class文件,可以在Eclipse中打开它们并搜索
    native
    关键字,查看哪些方法已声明为在native中实现

  • 使用
    strings
    命令转储所有字符串。
    除非库执行Java方法名称的运行时串联(不太可能),否则您应该能够列出从中引用的大多数Java方法和类。因此,使用
    strings
    。使用regexps,可以过滤出感兴趣的字符串。例如,will
    strings lib*jni.so | grep'L[^;]*;'列出从.so引用的所有类(例如
    Lcom/somecompany/project/SomeClass;
    )。将方法与类匹配可能会很棘手,但根据您的需要,这可能就足够了

  • 构建Dalvik VM的一个版本,该版本在每次注册本机方法时打印logcat消息。这是最先进、最耗时但最准确的版本。只需按照中的说明构建Android仿真器,但在构建之前,请在中的
    dvmRegisterJNIMethod
    末尾启用调试打印,使其成为:
    LOGI(“JNI已注册%s.%s:%s”,clazz->descriptor,methodName,signature)