JNI方法声明中定义包名的修改

2014年09月14日 Android 3条评论 阅读8401次
JNI方法声明中定义包名的修改

本文出现修改JNI方法声明中定义包名的应用场景是这样的:自己本来应用中有jni,但jni的方法声明中,使用的包名也是自己用的(如net.jileniao.android.pkg1),这样定义的包名限制了java侧调用时的包名也只能是net.jileniao.android.pkg1,但应用的代码拿到客户那里,需要移植到他们的平台上,显然包名也是要改为他们的(如net.jileniao.android.pkg2)。

本来在客户的代码中,我是直接修改了自己代码的包名,而忽略了jni定义的方法的报名问题,则直接导致了java.lang.UnsatisfiedLinkError: Native method not found的错误。
所以,如何解决这个问题也就很明朗了。
下面就是要修改JNI方法声明中定义的包名。
具体方法基本就是一个查找替换的过程,很简单就不多说了。下面是修改包名后,编译出现的一些问题,新手遇到此类问题可以参考下,老鸟可以飞过了。。。

问题1.Unresolved inclusion: <jni.h>
      针对这个问题,需要在Eclipse中设置NDKROOT环境变量
      Proj Prop-s -> C/C++ Build ->Environment -> Add... -> Name = NDKROOT, Value = <your path to NDK>

问题2.undefined reference to '__android_log_print
      这个问题是c文件中有调用android的日志打印,但mk没有加载响应库。
  修改方法为:
  在mk文件中增加一行:LOCAL_LDLIBS += -llog
  注意增加的这一行要在include$(BUILD_SHARED_LIBRARY) 前面,否则无效。
  另外还是在c文件中检查是否有#include <android/log.h>

问题3.Unable to launch cygpath. Is Cygwin on the path?
      Proj Prop-s -> C/C++ Build的Building Settings中去掉Use default build command,然后输入${NDKROOT}/ndk-build.cmd

我在编译时遇到了上面几个问题,希望能对菜鸟同行们有所帮助,本文到此结束。

分享本文至:

WRITTEN BY

avatar
本文标签:jni
看了本文是不是觉得很赞,那就赶紧点击下面按钮分享给身边的朋友吧!

3 条评论

  1. avatar 灵草屋

    好专业的说   很棒

  2. avatar 桌面

    字好小呀。

  3. avatar 红博客

    很专业的技术博客,而且博主能坚持那么长时间,继续加油!

欢迎留言




用户登录

sitemap