美文网首页
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