在我们日常的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
新建项目NDKHelloWord2.新建一个访问本地C/C++方法的java类
java与c交互的本地类3.定位到MyJni目录下,执行javac MyJni.java命令,生成MyJni类的.Class文件
编译MyJni生成class文件编译完成后会在ndkhelloword目录下生成MyJni.class文件
MyJni.class4.切换到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 word8.配置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项目运行完成!
网友评论