NDK环境配置(附GitHub Demo)

一些要求高性能 高安全类项目都会使用C、C++动态库,而NDK可以帮助我们快速开发集成,音视频转解码压缩等、直播、智能硬件、自己及公司封装的SDK等方面都有用到NDK

一、NDK下载及环境集成

1.File->setting->...Android SDK进入该界面勾选CMake、LLDB、NDK三个工具并Apply等待安装...


NDK环境配置(附GitHub Demo)_第1张图片
图一

2.配置NDK路径

将安装的NDK路径填入图二红色标记中



NDK环境配置(附GitHub Demo)_第2张图片
图二

3.配置环境变量

控制面板->....环境变量下

新建系统变量NDK_ROOT 值为NDK安装路径


NDK环境配置(附GitHub Demo)_第3张图片
图三

新建系统变量Path 值为;%NDK_ROOT%;


NDK环境配置(附GitHub Demo)_第4张图片
图四

cmd命令ndk-build验证是否安装成功


NDK环境配置(附GitHub Demo)_第5张图片
图五二

二、测试Demo

1、创建一个JNITest类如下图


NDK环境配置(附GitHub Demo)_第6张图片
图五

2、生成该类的头文.h

快捷键alt+fn+f12或者alt+f12

命令模式进入项目app/src/java目录如下图


NDK环境配置(附GitHub Demo)_第7张图片
图六

javah -d ../jni com.study.ndkdemo.JNITest 这句命令行的意思在项目中新建jni目录并生成.h文件成功后项目目录会多com_study_ndkdemo_JNITest.h文件


NDK环境配置(附GitHub Demo)_第8张图片
图7

3.在jni录下创建一个test.c、Android.mk、Application.mk文件

test.c

#include "com_study_ndkdemo_JNITest.h"

JNIEXPORT jstring JNICALL Java_com_study_ndkdemo_JNITest_get

(JNIEnv *env, jclass jclass){

return (*env)->NewStringUTF(env,"Faye Wong NDK TEST");

}

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := JNITest

LOCAL_SRC_FILES := test.c

include $(BUILD_SHARED_LIBRARY)

Application.mk APP_ABI := all

4.命令行生成so库


NDK环境配置(附GitHub Demo)_第9张图片
图8


NDK环境配置(附GitHub Demo)_第10张图片
图11

三.验证测试

1.在build.gradle文件夹下加

sourceSets {

        main() {

            jniLibs.srcDirs = ['src/main/libs']

            jni.srcDirs = [] //屏蔽掉默认的jni编译生成过程        }

    }

2.在JNITest类中动态导入so库

package com.study.ndkdemo;

public class JNITest {

static {

System.loadLibrary("JNITest");

}

public JNITest(){

}

public native static String get();

}

3.最后在MainActivity中输出显示

public class MainActivityextends AppCompatActivity {

@Override

    protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

String value=JNITest.get();

Toast.makeText(this,"返回值为->"+value,Toast.LENGTH_SHORT).show();

    }

}


GitHub下载地址:演示Demo

你可能感兴趣的:(NDK环境配置(附GitHub Demo))