刚开始接触JNI的例子,在NDK下面的例子文档中找到Hello-jni工程,编译里面的文件,生成了hell-jni.so文件,然后部署工程到真机上面,在真机上面老是提示找不到hell-jni.so文件,如图教程中说到只要放到libs/armeabi目录下面,so文件就可以调用了,部署到真机上面也直接可以用为什么这样做了,还提示找不到文件呢,是不是还要设置权限什么的

解决方案 »

  1.   

    mk文件如下
    LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE    := hello-jni
    LOCAL_SRC_FILES := hello-jni.cinclude $(BUILD_SHARED_LIBRARY)
      

  2.   

    so放到libs下面的命名需要lib 开头 也就是说你的so名字应该是libhello-jni.so
      

  3.   

    同意#2,正常下编译完了,就默认带lib前缀,
    刚才试着把我的一个工程下的so库的lib前缀去掉,结果启动时出现return null的问题。
      

  4.   


    我测试了一下,还是不行,如果加上libhello-jni.so,那么activity中修改成
    static {
            System.loadLibrary("libhello-jni");
        }
    还是一样的报不能载入libhello-jni,应不是你们说的这个问题
      

  5.   


    我测试了一下,还是不行,如果加上libhello-jni.so,那么activity中修改成
    static {
            System.loadLibrary("libhello-jni");
        }
    还是一样的报不能载入libhello-jni,应不是你们说的这个问题
      

  6.   


    我测试了一下,还是不行,如果加上libhello-jni.so,那么activity中修改成
    static {
            System.loadLibrary("libhello-jni");
        }
    还是一样的报不能载入libhello-jni,应不是你们说的这个问题庫名改成libhello-jni.so,
    源碼中去掉lib前綴,使用裝載語句如下:
    System.loadLibrary("hello-jni");
      

  7.   

    你采用#7 的方法试试。载入时不要加lib。
      

  8.   

    是不是安装到真机上的时候还需要什么权限设置,否则SO文件就部署不过去,我的是三星NOTE8.0
      

  9.   


    我测试了一下,还是不行,如果加上libhello-jni.so,那么activity中修改成
    static {
            System.loadLibrary("libhello-jni");
        }
    还是一样的报不能载入libhello-jni,应不是你们说的这个问题庫名改成libhello-jni.so,
    源碼中去掉lib前綴,使用裝載語句如下:
    System.loadLibrary("hello-jni");厉害,果然是这样的,谢谢前辈