美文网首页
jni使用指南,关于.so你应该知道的

jni使用指南,关于.so你应该知道的

作者: 王诛魔Phy | 来源:发表于2017-03-09 10:36 被阅读41次

    其实这些都是Android设备CPU的:

    • armeabi: 早期的手机用的比较多,针对普通的或旧的arm v5 cpu,。
    • armeabiv-v7a:目前主流版本 2011年以后的生产的大部分设备,针对有浮点运算或高级扩展功能的arm v7 cpu.
    • arm64-v8a: 8代、64位ARM处理器,64位支持.
    • x86: 我们见到的模拟器大多就是这个。
    • x86_64: 64位的平板。

    然后特意说一下x86系列的,是兼容arm的,但是性能损失特别大.

    Android加载.so的原则
    同一目录下要么所有使用jni的项目都给加上.so文件,
    要么你就别给这个目录,也就是只要不齐全就都干掉
    比如你的lib结构是这样的

    libs
      -armeabi
          -aaa.so
          -bbb.so
      -arm64-v8a
          -aaa.so
    

    其实这种情况就是属于同一目录下,提供的.so文件不全...然而很容易出现,毕竟有些三方啊什么的,提供的.so文件并不齐全,这样的话同一个架构目录下会缺少一个或多个.so文件.

    Android在加载某个使用jni的功能时,你并没有提供x86的.so文件,但是你有x86这个目录,那就会去x86目录下去找,没有啊然后就异常了.

    Android加载.so的目录
    1.我自己用的是

    Snip20170309_1.png

    也就是自己在app -> src -> main 下自己建立一个目录: jniLibs
    然后放进去即可.

    2.就是通常放在libs目录下了
    别忘了在build.gradle文件中设置 jniLibs.srcDir

    Android排除某架构的.so

    android {
        ...
    
        defaultConfig {    
            ...
            ndk {
                // 设置支持的 SO 库构架
                abiFilters 'armeabi', 'armeabi-v7a'     // 'arm64-v8a', 'x86', 'x86_64', 'mips', 'mips64'
            }
        }   
    }
    

    如果编译报

    NDK integration is deprecated in the current plugin.
    

    gradle.properties 文件中添加:

    android.useDeprecatedNdk=true
    

    应该还有其他方法排除,我也就知道这一种,如果有知道其他方法的,请告知一下,谢谢

    相关文章

      网友评论

          本文标题:jni使用指南,关于.so你应该知道的

          本文链接:https://www.haomeiwen.com/subject/rhhwgttx.html