最近需要将Python人证对比模型移植安卓端.安卓端需要使用openCV简单的人像提取处理.在配置openCV前首先需要配置NDK环境.
一 NDK在Ubuntu的配置
二 NDK在IntelliJ IDEA中的配置
三 NDK开发实例
在main/java下创建创建一个NDKUtils.Java类:
public classNDKUtils {public nativeString invokeCmethod();static{
System.loadLibrary("NDKUtils");
}
}
右键选择 External Tools ---> javah
会在app目录下生成jni目录和目录内一个com_lemon_demo_utils_NDKUtils.h文件
复制.h 文件修改后缀名为 .c (该文件就是C 语言的实现文件)
修改com_lemon_demo_utils_NDKUtils.c内容:
JNIEXPORT jstring JNICALL Java_com_lemon_demo_utils_NDKUtils_jniInit
(JNIEnv*env, jobject obj){return (*env)->NewStringUTF(env,"NDK 获取Native 字符串");
}
将jni目录拷贝至main/java目录下.
在jni目录下新建Android.mk和Application.mk:
Android.mk:
LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE :=NDKUtils
LOCAL_SRC_FILES :=com_lemon_demo_utils_NDKUtils.c
include $(BUILD_SHARED_LIBRARY)
Application.mk:
APP_PLATFORM := android-23APP_ABI := armeabi
在IntelliJ IDEA的命令窗口(Terminal)执行:
cd app/src/main/
继续输入:
ndk-build
该命令是编译C文件,然后生成 .so 文件,生成在 app\src\main\libs 目录下。
完成后会在main目录下生成libs和obj两个目录.
配置build.gradle 文件,在android {}中添加:
sourceSets{
main{
jni.srcDirs= [] //disable automatic ndk-build call, which ignore our Android.mk
jniLibs.srcDir ‘src/main/libs‘}
}
在MainActivity中使用:
packagecom.lemoncome.opencvdemo;importandroid.support.v7.app.AppCompatActivity;importandroid.os.Bundle;importandroid.widget.TextView;public class MainOpencvActivity extendsAppCompatActivity {
@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_opencv);
NDKUtils ndk= newNDKUtils();
TextView text=(TextView) findViewById(R.id.tv);
text.setText(ndk.invokeCmethod());
}
}
运行程序会输出字符串: NDK 获取Native 字符串
以上测试成功.
四 Android+openCV
最新的3.3,我下载了3.2
把 sdk/native 目录 拷贝到 项目的 jni 目录下,
原文:http://www.cnblogs.com/haoxr/p/7606002.html