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.cpp和MathOperation.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_add与JniOperation中的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将会将其

最低0.47元/天 解锁文章
543





