美文网首页
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你应该知道的

    其实这些都是Android设备CPU的: armeabi: 早期的手机用的比较多,针对普通的或旧的arm v5 c...

  • Android jni报错:undefined referenc

    原因是.h跟so的路径指向不对。 .h应该是: 解释一下:network是你自己的so的名字,你自己的jni肯定也...

  • NDK:02-调用第三方so文件

    NDK调用第三方so文件 说明:此处的so可以是jni生成的或者纯净的C语言的动态库.关于生成.so可参看我的上篇...

  • JNI基础技术

    一.JNI概论 二.库命名方式 1.Java:MediaScanner2.JNI层:libmedia_jni.so...

  • OpenCV实战之(1)图片滤镜

    前言:之前写过关于android中通过JNI使用NDK的demo,介绍了关于so文件的生成与使用,但仅仅是demo...

  • JNI方法动态注册

    简介 虚拟机在加载so库的时候,会调用JNI_OnLoad方法,所以可以在这JNI_OnLoad完成JNI方法动态...

  • JNI&NDK

    参考资料 Android Studio JNI开发入门教程android studio之jni(上)生成so文件编...

  • Android Studio使用jni、so库

    Android Studio使用jni、so库 在Android Studio1.1之后,AS就已经支持jni和s...

  • so库中JNI方法混淆

    so库中JNI方法混淆 关于如何配置NDK环境和测试C++方法是否调用成功,请参照@callxkj的简书 ...

  • 深入理解JNI阅读笔记

    1.JNI库的名字 Android平台基本上都采用"lib模块名_jni.so"命名方式例如: 2.加载JNI库 ...

网友评论

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

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