我现在要实现android jni调用,但是我不知道怎么样去吧我的c语言写的头文件 和 实现类文件,
编译成适用android的SO文件
我在LINUX下编译出的SO文件,放在system/lib下 报错找不到该SO文件,
所以求教高手指点一下,如何生成android so文件 

解决方案 »

  1.   

    google一下 android jni,有一大堆啊
    http://mintelong.javaeye.com/blog/458391
    简单的说就是几部,
    1.搭环境
    2.编写jni的java接口
    3.实现jni(.c和.h的实现)
    4.编译jni,就是编译.c生成so
    5.java层调用
      

  2.   

    你写JNI的时候得注意makefile添加你Nativa层的这个.so
      

  3.   

    楼主在linux下编译的是用linux下的头文件,当然不能再android里用,把你的makefile种的include的路径和toolchain指向android的路径下,用android的代码编译出来的so才可以在android中使用。
      

  4.   

    那请问 用android代码编译出来SO呢?就是这里很模糊
      

  5.   

    (6)编写android.mk文件    1. LOCAL_PATH:= $(call my-dir) 
       2. include $(CLEAR_VARS) 
       3. LOCAL_SRC_FILES:= \ 
       4.     com_ura_test_JNITest.c 
       5. LOCAL_C_INCLUDES := \ 
       6.     $(JNI_H_INCLUDE) 
       7. LOCAL_SHARED_LIBRARIES := libutils 
       8. LOCAL_PRELINK_MODULE := false 
       9. LOCAL_MODULE := libJNITest 
      10. include $(BUILD_SHARED_LIBRARY) 复制代码 (7)编译生成动态库 新建文件夹 
    ~/mydroid/external/libJNITest 
    把上面编写好的头文件,c/c++源文件,make文件拷贝进上面目录中 * 需要注意的是把PRELINK_MOUDULE设置成false 否则需要重新做成img文件再烧入。 在ubuntu中执行    1. cd 
       2. cd mydroid/build/ 
       3. envsetup.sh 
       4. cd ~/mydroid 
       5. cd external/libJNITest/ 
       6. mm 

    复制代码 编译成功的后会在下面目录中生成libJNITest.so文件 
    ~mydroid/out/target/product/generic/system/lib/ 
    红色部分 我根本不知道什么意思
      

  6.   

    你写的MK里面 ,第十行就代表此模块编译过后生成动态库
    至于红色部分是先设置环境变量
    . buile/envsetup.sh
    lunchmm就是进行模块编译
    就是根据你写的那个Android.mk来编的
      

  7.   

    ndk中自带了个hello-jni,你可以看看
    编译的话,返回hello-jni的上层目录
    make APP=hello-jni
    这样就能编译出so了,在hello-jni的libs里
      

  8.   

    如果已经生成了so想调用,貌似底层要用c/c++包一层,然后生成一个bin档去用,去年做过这样的事情,有点既不很清楚了。或者楼主把so和.a都包含到makefile里去编译试试,不行只能再包一下了。
      

  9.   

    对了,JNI的应用是少不了的。
      

  10.   

    是的 ,你讲的这种是要启动一个服务进程 ,这个bin文件去调用这个.so文件实现功能
      

  11.   

    LZ , 你在你写的MK文件的第七行里面 ,LOCAL_SHARED_LIBRARIES := libutils 
    试试把你自己的那个.so文件加进去,看行不
      

  12.   

    你可以在NDK或者源代码中编译,这样生产的SO就可以了linux的so和android的不同,android没用glibc,用的是自己的bionic,这个和正常linux上的是不兼容的,原来在linux上的需要拿源代码到android环境下重新编译才能使用。
      

  13.   

    http://liangxh2008.blog.163.com/blog/static/1124116792009810105244380/
    我看的是这个网页 但是看到生成SO文件那块 就不明白了
    他也是在LINUX环境下生成的SO??
      

  14.   

    学习一下,android什么时候能给做一个类似与JNative的东东就好了。
      

  15.   

    MS不用LINUX的交叉是不可能成功的。