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

    xiaoxiao2025-07-12  4

    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(); } }
    转载请注明原文地址: https://ju.6miu.com/read-1300632.html
    最新回复(0)