2012-06-04 60 views
2

有谁知道如何显示所有通过NDK编译的共享库可用的公共面向JNI函数/方法的功能?在JNI共享库中查找函数?

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

感谢,在与本地方法的.class文件 凯文

回答

4

有几个技巧可以用来找出答案。

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

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

  3. 构建Dalvik虚拟机的一个版本,每登录一次本地方法就打印一条logcat消息。这是最先进,最耗时,但最准确的。只需按照指示在http://source.android.com/source/index.html建立一个Android模拟器,但是你建立之前,在dvmRegisterJNIMethod年底dalvik/vm/Jni.cpp所以它成为启用调试打印:LOGI("JNI-registered %s.%s:%s", clazz->descriptor, methodName, signature);

1

运行javap