1. 程式人生 > >Ubuntu+IntelliJ IDEA+Android 配置NDK環境+openCV

Ubuntu+IntelliJ IDEA+Android 配置NDK環境+openCV

reat which .text jnicall find http pytho ava main

最近需要將Python人證對比模型移植安卓端.安卓端需要使用openCV簡單的人像提取處理.在配置openCV前首先需要配置NDK環境.

NDK的介紹(http://www.cnblogs.com/leaven/archive/2010/05/27/1744855.html)

一 NDK在Ubuntu的配置

參考: http://blog.csdn.net/jq_ak47/article/details/52349189

二 NDK在IntelliJ IDEA中的配置

參考: http://blog.csdn.net/yipatshi/article/details/54585049

三 NDK開發實例

參考: http://www.cnblogs.com/xiaoxiaoqingyi/p/6524165.html

在main/java下創建創建一個NDKUtils.Java類:

public class NDKUtils {
    public native String 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-23
APP_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中使用:

package com.lemoncome.opencvdemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class MainOpencvActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_opencv);

        NDKUtils ndk = new NDKUtils();

        TextView text = (TextView) findViewById(R.id.tv);
        text.setText(ndk.invokeCmethod());

    }
}

運行程序會輸出字符串: NDK 獲取Native 字符串

以上測試成功.

四 Android+openCV

首先下載openCV包,地址:http://opencv.org/

最新的3.3,我下載了3.2

opencv配置參考: http://www.cnblogs.com/xiaoxiaoqingyi/p/6676096.html

把 sdk/native 目錄 拷貝到 項目的 jni 目錄下,

Ubuntu+IntelliJ IDEA+Android 配置NDK環境+openCV