0.NDK
要了解NDK,首先需知道Jni,那么Jni是什么呢?Jni是Java和C沟通的入口,啥意思呢?我们使用Java语言进行Android开发,众所周知Android的安全性一直是一个热议的话题,为了防止被反编译,我们需要用C/C++编写重要核心的内容增大系统的安全。另一方面Android的底层一些驱动,硬件,音视频,图片处理,等都是用C实现的,而且使用C可以极大的提高程序效率,所以在开发中可能就需要Java和C进行交互,Jni就是干这个的。NDK提供了一系列的工具,可以帮助我们生成C/C++的库,NDK+Jni就实现了Java和C沟通的桥梁。
Native Development Kit(NDK)是一系列工具的集合。它提供了一系列的工具,帮助开发者快速开发C/C++的动态库,并能自动将so和java一起打包成apk。
1.开始,新建native c++项目
2.报错 NDK not configured.
2.1打开local.properties,根据实际配置ndk目录
2.2可以在"File"->"Project Structure"设置
3.在java下新建包jni,在包里新建java类Device,如下
添加java方法:
public class Device {
public native boolean devOpen();
public native void devClose();
}
4.根据java方法自动生成cpp函数
鼠标放到java方法上面,根据智能提示或者Alt+Enter健,会自动在native-lib.cpp中生成c++函数,当然实现需要自己完成
extern "C"
JNIEXPORT jboolean JNICALL
Java_com_example_jnidemo1_jni_Device_devOpen(JNIEnv *env, jobject thiz) {
// TODO: implement devOpen()
}
extern "C"
JNIEXPORT void JNICALL
Java_com_example_jnidemo1_jni_Device_devClose(JNIEnv *env, jobject thiz) {
// TODO: implement devClose()
}
5.make project
代码没有错误的话,会生成相应的.so动态库
6.tips
6.1修改makelist,可以更改so动态库的名称,可以添加其他需要编译的cpp文件
6.2javah,ndk build扩展工具
网上有的说配置这两个扩展工具,javah我试了,不好用不建议新手使用。
ndk build是比较老的方法了,android studio里面建议使用默认的cmake方法进行ndk开发。
所以这两个扩展工具都不建议使用。
6.3Android.mk,Application.mk
ndk方式,但不一定要ndk build,ndk build是一种比较老的方式了,不推荐使用
6.4报找不到library "***.so" not found
检查下build.gradle中有没有设置abiFilters,因为android模拟器对应的abi为x86,目前市面上的手机多数都是v8的,这点需要注意。