NDK开发之初入门-Hello Word

简书链接

在我们日常的App开发中都是使用基本的SDK开发,那么什么时候使用NDK开发呢?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沟通的桥梁。


下面来实现我们的第一个NDK程序:

1.新建Android项目,命名为NDKHelloWord

新建项目NDKHelloWord

2.新建一个访问本地C/C++方法的java类

java与c交互的本地类

3.定位到MyJni目录下,执行javac MyJni.java命令,生成MyJni类的.Class文件

编译MyJni生成class文件

编译完成后会在ndkhelloword目录下生成MyJni.class文件

MyJni.class

4.切换到com的上层目录,执行javah -jni com.voyagesun.ndkhelloword.MyJni命令,使用javah命令生成.h文件。

javah命令主要用于在JNI开发的时,把java代码声明的JNI方法转化成C\C++头文件,以便进行JNI的C\C++端程序的开发。

javah生成.h文件

此时便在java目录下生成h文件,为我们进行Jni开发的头文件

生成.h文件

5.main下右键按钮new -> Foler -> JniFolder,新建jni包

6.jni包下new ->C/C++ SourceFile,出来弹层,起个文件名

新建c文件
建成后文件目录

7.拷贝com_voyagesun_ndkhelloword_MyJni.h头文件下的所有内容至myc.c, 并修改方法返回值

修改C文件方法返回值为hello word

8.配置build.gradle

ndk {

moduleName "FirstJniLibrary" //生成的so库名称

    abiFilters"armeabi","armeabi-v7a","x86" //生成的不同cpu

}

配置gradle.properties,新增:android.useDeprecatedNdk=true

配置build.gradle
配置gradle.properties

好咧,所有的配置已完成,接下来就是见证奇迹的时刻:

Build ->Rebuild Project项目,成功后会在build-intermediates-ndk-debug-lib下生成我们需要的so库

Rebuild生成so库

这就是我们需要的So库,拷贝So库至libs目录下,并在Activity中调用测试!

效果图

至此,第一个NDk项目运行完成!