美文网首页
NDK开发 环境搭建 与 JNI的编写

NDK开发 环境搭建 与 JNI的编写

作者: jameswan | 来源:发表于2018-06-26 21:50 被阅读14次

1.NDK简介

定义:Native Development Kit,是 Android的一个工具开发包 由C/C++语言实现

作用:快速开发C/C的动态库,并自动将so和应用一起打包成 APK 即可通过 NDK在Android中使用JNI与本地代码(如C、C)交互

应用场景:在Android的场景下 使用JNI即 Android开发的功能需要本地代码(C/C++)实现

特点:将主要的功能用C/C语言编写并打包成so 动态库不容易被反编译具有较高的安全性 使用C/C编写的代码运行效率更高并且可以移植到其他平台使用

环境搭建 :

下载安装NDK

环境变量的配置这里就不赘述了

这里讲述的是在Android Studio 下NDK开发 

创建项目时添加C的支持 选择默认的C版本 和 添加C++的异常处理

创建完项目之后可以在app Module的目录下看到CMakelist.txt文件以及CPP文件目录(存放编写c文件和c++文件和头文件) 这时就可以根据自己的需求编写CMakelist.txt文件

1.设置so文件的输出路径 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/../jniLibs/${ANDROID_ABI})

2.编写Java本地方法

public static native String getStringFromC();

3.使用javah 命令生成.h 文件 因为前面已经定义了so的输出路径 所以也可以在 Android Studio 中自定义external tool 这里发个自定义External Tools 的文章

自定义External Tools

执行完命令后就可以在自定义的.h文件输出目录下找 .h头文件

4.创建要调用的C文件

NDK_Practice.c

5.编写完c文件后 再进入CMakelist.txt 文件中进行配置 加入自己编写的c文件 和 log lib 包引用

add_library( # Sets the name of the library. NDK_Practice # Sets the library as a shared library. SHARED # Provides a relative path to your source file(s). src/main/cpp/NDK_Practice.c )

6.make project

8.编写JNI 实现Java 调用 C

#include "com_james_ndk_practice_NDKPracticeActivity.h"

JNIEXPORT jstring JNICALL Java_com_james_ndk_1practice_NDKPracticeActivity_getStringFromC

(JNIEnv *env,jclass jcls){

char *c ="ndk practice";

return  (*env)->NewStringUTF(env,c);

}

在Activity 加载so文件并调用C 

static {

System.loadLibrary("NDK_Practice");

}

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_ndk_practice);

Toast.makeText(this,getStringFromC(), Toast.LENGTH_SHORT).show();

}

public static native String getStringFromC();

最后附上Github 的demo地址NDK_Practice 

相关文章

网友评论

      本文标题:NDK开发 环境搭建 与 JNI的编写

      本文链接:https://www.haomeiwen.com/subject/fdnmyftx.html