Android中C/C++程序和OpenCV方法的调用

1 Android中调用C/C++程序

通过C++写的算法,需要移植到Android移动端。最新版本的Android studio(以下简称AS)提供了通过Java Native Interface(JNI)和CMakeLists.txt实现移植的方法。以下以移植C++写的加法程序为例介绍具体的步骤。

新建Native C++工程

  • 打开Android Studio(以下简称AS),新建一个工程,类型选为“Native C++”。
  • 在Customize C++ Support中选择要支持的C++标准。
  • 工程建好后,AS会在src\main目录下会自动创建一个cpp目录,该目录下有两个文件:
    • CMakeLists.txt:用于生成makefile或者project文件的CMake文件。
    • native-lib.cpp:自动创建的C++示例程序。

新建Java类

新建一个Java类,例如JniOperation。Android 程序将通过该类访问C++方法。

public class JniOperation {
   
   
      public native int add(int a, int b);
}

新建C++类

  • 在“Project Structure”右击cpp目录,在弹出的菜单中“New–>C++ Class”。
  • 在“New C++ class”中输入类名,例如MathOperation
  • 点击OK,AS将在cpp目录下自动生成MathOperation.cppMathOperation.h
  • 打开MathOperation.h,在MathOperation类中添加add函数申明。
    #ifndef JNITEST_MATHOPERATION_H
    #define JNITEST_MATHOPERATION_H
    class MathOperation
    {
         
         
    public:
          static int add(int a, int b);
    };
    #endif //JNITEST_MATHOPERATION_H
    
  • 打开MathOperation.cpp,在MathOperation.cpp中添加add函数的实现。
    #include "MathOperation.h"
    #include <jni.h>
    extern "C" JNIEXPORT jint JNICALL
    Java_com_smartworld_jnitest_JniOperation_add(JNIEnv *env, jobject obj, jint a, jint b)
    {
         
         
          return MathOperation::add(a, b);
    }
    
    int MathOperation::add(int a, int b)
    {
         
         
          int sum = a + b;
          return sum;
    }
    
    其中,Java_com_smartworld_jnitest_JniOperation_addJniOperation中的add方法相对应,即当Android程序调用JniOperation中的add方法时,即是调用Java_com_smartworld_jnitest_JniOperation_add方法。

修改CMakeLists.txt

  • add_library中添加C++源程序文件MathOperation.cpp
    add_library( # Sets the name of the library.
                    native-lib
                    # Sets the library as a shared library.
                    SHARED
                    # Provides a relative path to your source file(s).
                    MathOperation.cpp )
    
  • 删除add_library中的native-lib.cpp
  • 当编译工程时,AS会根据CMakeLists.txt将C/C++程序编译生成libnative-lib.so库文件,Gradle将会将其
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值