最近小弟在进行ndk的开发中遇到无法将动态库中的函数用到自己写的JNI函数中,比如:#include <jni.h>   
#include "HelloJni.h"   
#include <stdio.h>   
  
JNIEXPORT void JNICALL    
Java_HelloJni_displayHelloJni(JNIEnv *env, jobject obj)    
{   
    int i = callFuncLib();  // this function is defined in lib libmy.so    return;   
}  
情况就是这样, 我需要调用libmy.so动态库中的函数callFuncLib(), 怎样倒入, 是在Android.mk文件中修改make文件,还是用adb push。 注:开发平台是在android 2.0请大侠们不吝指教一二!!必当高分送上

解决方案 »

  1.   

    http://topic.csdn.net/t/20030520/13/1808721.html
    这儿有一个相关的帖子,你作一下参考.
      

  2.   

    jni中用so的函数,这个真没试过,本来so中封装的就是jni的方法了,java层可以直接调用,但是在jni的c实现里,都是c的方法,没法去调用其他jni中的java方法...
    libmy.so这个库没有.a的么?只有so的?jni中可以调用c的接口,但是调用java的好像不行
      

  3.   


    libmy.so不是java库,是已经写好的c库,我需要用jni封装这个库,jni不就是用来做这个的吗!
      

  4.   

    jni封装C的方法,但是一般c的方法都是以.a的形式编译出来的库
    没有试过,你可以在mk文件中假如lib.so的文件名,然后jni的c实现里去调用,不过不知道能不能链到so里函数,你没有试过么?
      

  5.   


    可能是我没有表达清楚, 我的意思就是试着链连so方件。
    一个可行的方法就是把我想要用到的libmy.so文件放到ndk的platform/android */*arm/lib目录下,然后在mk文件中用-lmy来连接这个动态库文件。但这个方法不足的就是你需要手动copy库文件到ndk目录下,这不是软件发布时可用到的技术,可能应付一下一时之需。问一下哪问大侠曾遇到过这个问题的,又是怎么解决的?
      

  6.   

    DLOPEN 自己搜搜 对调用需要的接口都需实现
      

  7.   

    dlopen就可以了不过android实现的方式和正常linux不一样,需要把so库的源代码拿过来重新编译才可以。
    要不然,你得将标准linux的那堆libc及相关的函数库,再搞一套,放在一个新建的/lib或/usr/lib下面才可以。
      

  8.   

    两种
    1、dlopen方式
    2、在mk文件中引用so库,这个so库要push到system/lib下
      

  9.   

    留个邮箱,发个android中通过jni调用so的demo你。
      

  10.   

    static {
             System.loadLibrary("libsetNet"); //
         }
     
    public native void setNet(String str);
      

  11.   

    问题已经解决,很感谢大家的帮助。1. 在我的问题上不能用dlopen函数,dlopen函数是在已知动态库且动态库已在已知目录下才行,问题是动态库需要我打包到apk中,且能成功访问。
    2. 在mk文件下引用so文件,但不需要push到system/libs下,即使你push了,有也有可能push 不进去,因为libs目录是可读的(我说的是ndk-r4),至少我没有成功push进去。那么为什么不用到ndk自己提供的打包机制呢!用LOCAL_SHARD_LIBS标签就行了,不要忘了在JAVA层Load你想要用到的所有库,被依赖的库要放到依赖库的前面:) 大家好好享受android开发的乐趣吧!
      

  12.   

    请问xiakq你是怎么解决在jni里调用so库的问题呢,能否把你的详细调用过程给我说一下吗?我也遇到了同样的问题,但是始终无法解决,邮箱:[email protected]
      

  13.   


    我和你一样,也想知道.希望能够解决:[email protected]
    谢谢.
    我的**.so文件是在.apk包解压后直接拿到的.不知能不能去调用里面的东西.
      

  14.   

    你好,能给个代码示例吗,或者把详细步骤说一下,感激不尽!
    我邮箱[email protected]
      

  15.   

    同上!给个实例呗!!我邮箱:[email protected]
      

  16.   

    我也头疼啊,动态库都生成了,但运行在加载到android项目中时,报了一大堆错误,我也看不懂,贴上来,请高手帮看看!
      

  17.   

    第三方so放哪位置   [email protected] thanks