JNI(Java Native Interface)
使用场景
1:操作硬件(编写驱动,用java代码调用底层的c代码)
车载电脑 obd模块,on board debug
2:效率要求非常高
图形的计算,极品飞车
3:复用
7zip 开源的压缩算法; webkit 浏览器解析框架; opengl 图形处理的框架; opencore 多媒体播放框架; ffmpeg 视频播放的开源项目 c/c++; opencv 计算机图形识别的库,人脸识别,图形图像的处理。 c/c++
4:java代码反编译容易,不安全;c代码,反编译后读起来很困难,安全;手机网银支付模块
交叉编译原由
1:操作系统(windows, linux,mac os)
2:处理器结构(x86 [amb/Intel],arm,mips[开源])
执行 | 库 | 批 | |
Windows | .exe | .dll | .bat |
Linux | .elf | .so | .sh |
NDK Android native develop (官网上下载)
ndk-build.cmd 编译c代码
NDK流程
1.关联ndk
2.导入c
D:\adt-bundle\android-ndk-r9b\platforms\android-19\arch-arm\usr\include
3.创建jni
4.更改成c(默认c++,两者都可以)
5.java定义本地方法,C中实现
public native String helloFromC();
6.生成c头文件
java、c签名必须相同
方法一 javah工具
cd到 bin/classes 下 javah com.example.jnitest.MainActivity
JDK1.7或以上 error
错误: 无法访问android.app.Activity
找不到android.app.Activity的类文件
解决:cd到 src上执行指令
讲.h文件拷贝到jni文件夹下
7.实现c方法(重点)
8.调用
9.多处理器支持 ABI Application binary interface
APP_ABI := armeabi armeabi-v7a x86
或者
APP_ABI := all