Android studio 3.6 NDK开发 基本流程入门了解

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++项目

Android studio 3.6 NDK开发 基本流程入门了解_第1张图片

2.报错 NDK not configured.

2.1打开local.properties,根据实际配置ndk目录

Android studio 3.6 NDK开发 基本流程入门了解_第2张图片

2.2可以在"File"->"Project Structure"设置

Android studio 3.6 NDK开发 基本流程入门了解_第3张图片

3.在java下新建包jni,在包里新建java类Device,如下

Android studio 3.6 NDK开发 基本流程入门了解_第4张图片

添加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文件

Android studio 3.6 NDK开发 基本流程入门了解_第5张图片

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的,这点需要注意。

Android studio 3.6 NDK开发 基本流程入门了解_第6张图片

你可能感兴趣的:(Android开发)