SusieMe
V2EX  ›  Android

在 AS 中正确加载 so 文件, native 函数仍然 Cannot resolve corresponding JNI function?

  •  1
     
  •   SusieMe · Feb 1, 2016 · 22153 views
    This topic created in 3772 days ago, the information mentioned may be changed or developed.

    事情是这样的,从 eclipse 转到 as 后加载 so 文件,但是 native 函数依然报 Cannot resolve corresponding JNI function 这个错误
    关于如何加载 so 文件,我是这样做的:
    方法一:将 so 文件直接放在 jniLibs 目录下
    方法二:将 so 文件放在 app/libs 目录下,但是在 build.gradle 里加入
    sourceSets {
    main {
    jniLibs.srcDirs = ['libs']
    }
    }
    可是使用这两种方法, native 函数依然报错,到底是为什么?有没有大神能提点一二啊!!!哭晕了〒▽〒

    5 replies    2016-04-03 14:04:34 +08:00
    SystemError
        1
    SystemError  
       Feb 2, 2016 via iPhone
    Android Studio 不同版本的 JNI 的 gradle 语法不一样。既然你说的 LoadLibrary 没问题了,那这个可以排除。

    还有可能是你的 JNI_EXPORT 声明不对,与 Java 层对应的包路径不对。

    找参考资料,很多事都有给出完整例子的。
    SusieMe
        2
    SusieMe  
    OP
       Feb 2, 2016
    @SystemError 话说我确实改过包名来着~可是我看 Android.mk 文件里压根没有涉及到包名之类的啊~
    allenx
        3
    allenx  
       Feb 2, 2016
    不是在 Android.mk 里面,而是在源代码里面, JNI 导出函数的命名必须与 java 的包名相对应。
    SusieMe
        4
    SusieMe  
    OP
       Feb 2, 2016
    @allenx 我看到了,已经修改了,重新编译出 so ,可是 jni 函数还是报错~~
    Tobey
        5
    Tobey  
       Apr 3, 2016
    @SusieMe 我也遇到了这个问题《求解决方法!!
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   944 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 22:48 · PVG 06:48 · LAX 15:48 · JFK 18:48
    ♥ Do have faith in what you're doing.