Android Studio NDK环境配置(opencv)以及使用

Android Studio NDK环境配置

window环境:

  • jdk1.7以上,配置好,Path路径
  • Android studio 2.0版本(其他版本类同)
  • NDKR9以上,本文中使用的NDK11

1, 新建工程 (略)
右键工程查看open moduleSetting确保Sdk nkd配置完成。

这里写图片描述

2,设置ExternalTools:File>Setting>Tools>ExternalTools

这里写图片描述

点击+进入编辑界面(分别设置如下命令,直接使用如下设置)
a,javah命令设置
name 随意写,便于记忆。
Program:输入javah的路径。
Parmeters:输入需要的jar地址,注意“$Classpath” 两边的双引号。
Working directory:为输出的路径。

这里写图片描述
b,ndk-build设置(编译ndk命令)
按照下图设置。

这里写图片描述

c,ndk-clean设置(清除so的命令)
按照下图设置

这里写图片描述

3,编写ndk接口
右键点击工程>new>class 输入类名建立新的类(NdkUtil.java)
输入如下代码:

public native String getString(String a);
    static{
        System.loadLibrary("ndkutil");
}

4,编译工程
Build>Make Project

这里写图片描述

5,建立jni目录
在java目录点击右键,或者点击File>new >Folder>JNI Folder ,后选择main
这里写图片描述

6,生成头文件
右键点击NdkUtil弹出菜单选择 ExternalTools >javah
如果出现
����: �Ҳ��� ‘com.top.ndkdemo.NdkUtil’ �����ļ���
Process finished with exit code 1
请检查是否已经第四步操作或者javah命令写错了,再次提醒双引号。
成功将在jni目录下面出现.h头文件

7,复制出.cpp文件
编写函数部分,extern “C” 一些保留,不要变动。

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_top_ndknew_NdkUtils */

#ifndef _Included_com_top_ndknew_NdkUtils
#define _Included_com_top_ndknew_NdkUtils
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_top_ndknew_NdkUtils
 * Method:    getString
 * Signature: (Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_top_ndknew_NdkUtils_getString
  (JNIEnv *env, jobject obj, jstring jstr){
    return env->NewStringUTF("form jni");
  }

#ifdef __cplusplus
}
#endif
#endif

8,编写.mk文件,直接到ndk文件夹或者opencvAndroid工程下面找个demo拷贝Applation.mk和Android.mk文件到jni目录然后修改里面的参数。
LOCAL_MODULE :=ndkutil
LOCAL_SRC_FILES :=ndkutil.cpp
inclue <你自己硬盘中opencv的sdk路径找到jni目录>/OpenCV.mk
详细代码如下:
a,Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

include ../../sdk/native/jni/OpenCV.mk

LOCAL_MODULE    := native_activity
LOCAL_SRC_FILES := native.cpp
LOCAL_LDLIBS    += -lm -llog -landroid
LOCAL_STATIC_LIBRARIES += android_native_app_glue

include $(BUILD_SHARED_LIBRARY)

$(call import-module,android/native_app_glue)

2,Application.mk

APP_ABI := armeabi-v7a
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_PLATFORM := android-19

9,右键点击jni ExternalTools >ndk-build
切换工程查看方式(Project)会在libs下面发现编译完成的so文件,如cpp修改只需要重新编译出新的so。

10,建立jniLibs目录
右键main目录 new>Directory 输入jniLibs建立目录,复制刚刚生成的armeabi-v7a目录到该目录下面。同时在gradle.properties文件中加入一行android.useDeprecatedNdk=true
这样就可以使用刚才的so文件了。

可以在mainActivity中测试我们的jni库是否可用。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toast.makeText(this,""+new NdkUtil().getString(),Toast.LENGTH_SHORT).show();
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值