抽时间整理一下Android Studio构建NDK项目的流程,以一个HelloNDK项目为例
关于引用第三方开源库,可以参考这篇
环境配置:
1. settings->Tools->External Tools添加,如图所示:
2.环境变量Path中加入ndk的目录
创建项目:
1.创建Android Studio项目,在需要使用C语言动态库的Java类中加入,本例中为MainActivity:
static {
System.loadLibrary("HelloNDK");
}
private native String helloNDK();
2.Build->Make Project,生成类文件(MainActivity.class)
3.项目上右键->New->Folder->JNI Folder,创建jni目录
4.上面的Java类上右键->External Tools->javah,生成jni头文件,本例为com_yjp_ndkprojectas_MainActivity.h,函数声明如下:
JNIEXPORT jstring JNICALL Java_com_yjp_ndkprojectas_MainActivity_helloNDK
(JNIEnv *, jobject);
5.gradle.properties文件中加入android.useDeprecatedNdk=true
编写C语言函数
在项目外创建一个jni目录,在其中实现C语言部分
1.C语言层的代码例子很简单:
HelloNDK.h
#ifndef _HELLO_NDK_H_
#define _HELLO_NDK_H_
char *helloNDK(void);
#endif
HelloNDK.cpp
#include "HelloNDK.h"
char *helloNDK(void)
{
return "hello NDK";
}
2.完成jni接口层代码:
JNIEXPORT jstring JNICALL Java_com_yjp_ndkprojectas_MainActivity_helloNDK(JNIEnv *env, jobject)
{
return env->NewStringUTF(helloNDK());
}
3..编写Android.mk文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := HelloNDK
LOCAL_SRC_FILES := HelloNDK.cpp \
com_yjp_ndkprojectas_MainActivity.cpp
include $(BUILD_SHARED_LIBRARY)
4.将ndk-build拷贝到项目外的jni目录下,命令行执行ndk-build,会在jni上级目录下产生libs目录,其中有各个硬件平台的so库
将so库集成到项目中:
1.在项目的app/src/main目录下创建jniLibs目录
2.将上一步生成的libs下的armeabi目录复制到jniLibs目录下
调用so库函数:
在MainActivity中,加入代码
TextView textView = (TextView) findViewById(R.id.textView);
textView.setText(helloNDK());
运行结果如图所示: