永州企业网站建设价格,民宿网站开发数据流图,杭州网站设计开发,厦门网站建设公司首选乐振一、JNI 涉及的名词概念
1.1、 JNI#xff1a;Java Native Interface
它是Java平台的一个特性(并不是Android系统特有的)。实现Java代码调用C/C的代码#xff0c;C/C的代码也可以调用Java的代码.
1.2、 二进制库分类 #xff1a; 静态库#xff0c;动态库.
静态库
系统…一、JNI 涉及的名词概念
1.1、 JNIJava Native Interface
它是Java平台的一个特性(并不是Android系统特有的)。实现Java代码调用C/C的代码C/C的代码也可以调用Java的代码.
1.2、 二进制库分类 静态库动态库.
静态库
系统静态库文件Windows.libLinux.aMacOS/IOS.a .a 静态库就是好多个 .o 合并到一块的集合经常在编译C 库的时候会看到很多.o,这个.o 就是目标文件 由 .c .h 编译出来的。.c 相当于 .java, .h 是 C 库对外开放的接口声明。对外开放的接口 .h 和 .c 需要一一对应如果没有一一对应外部模块调用了接口编译的时候会提示找不到方法。 .a 存在的意义可以看成 Android aar 存在的意义方便代码不用重复编译 最终为了生成 .so (apk) 动态库
系统动态库文件Windows.dllLinux.soMacOS/IOS.dylib 动态库 在 Android 环境下就是 .so 可以直接被java 代码调用的库. 1.3、 CPU 架构ABIarmeabiarmeabi-v7ax86mipsarm64-v8amips64x86_64
各个平台架构的区别就是指令集不一样浮点运算能力不一样按照上面排列的顺序浮点运算能力运行从低到高。
armeabi:这是相当老旧的一个版本缺少对浮点数计算的硬件支持在需要大量计算时有性能瓶颈 微信armeabi-v7a: ARM v7 目前主流版本兼容 armeabi facebook apparm64-v8a: 64 位支持 兼容 armeabi-v7a armeabimips/mips64: 极少用于手机可以忽略x86/x86_64: x86 架构一般用于 TV 电视机 兼容 armeabi建议 android apk 为了减少包体大小只接入 armeabi-v7a 即可 1.4、 Android 特有的文件 :Android.mk Application.mk Android.mk在 Android 上编译需要的配置文件相当于 build.gradle详细细节后面会讲到。 Application.mk上代码
APP_PLATFORM : android-14 //指定 android 系统
APP_ABI : armeabi-v7a // 指定生成哪个架构的 so
1.5、 NDK :Android 平台上用来编译 C/C库的工具
二、JNI 在 Android Studio 搭建
(1)调用了System.loadLibrary(helloworld);这句代码代表着使用这个类之前都会去加载libhelloworld.so 这个动态库。
(2)public native String nativeGetString()//或者external fun stringFromJNI(): String这个方法的实现在 c 层。所以接下来我们要构建 c 层的代码。
(3) 自动生成一个 helloworld_android.c文件