android cpp 中调用so
时间: 2023-12-11 14:04:02 浏览: 59
在 Android 中,C++ 代码可以被编译成共享库(.so 文件),然后通过 Java 代码调用。以下是一些简单的步骤:
1. 在 C++ 中编写代码,将其编译成共享库文件(.so 文件)。
2. 将共享库文件放置在 Android 项目的“jniLibs”文件夹中。
3. 在 Java 代码中使用 System.loadLibrary() 方法加载共享库文件。
4. 在 Java 中声明 native 方法,并使用 JNI 接口与 C++ 代码进行通信。
下面是一个示例:
首先,在 C++ 中编写一个简单的函数:
```c++
#include <jni.h>
extern "C" JNIEXPORT jstring JNICALL
Java_com_example_myapplication_MainActivity_helloFromCpp(JNIEnv *env, jobject /* this */) {
return env->NewStringUTF("Hello from C++");
}
```
然后将其编译成共享库文件,例如 “libhello.so”。
接下来,在 Android Studio 项目中创建一个“jniLibs”目录,并将共享库文件放置在该目录中。
最后,在 Java 代码中声明 native 方法并加载共享库文件:
```java
public class MainActivity extends AppCompatActivity {
static {
System.loadLibrary("hello");
}
public native String helloFromCpp();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String hello = helloFromCpp();
Log.d("MainActivity", hello);
}
}
```
这里我们通过 System.loadLibrary() 方法加载共享库文件,并在 MainActivity 类中声明了一个 native 方法 helloFromCpp(),该方法会调用我们在 C++ 中编写的函数。
注意:在使用 JNI 接口与 C++ 代码进行通信时,需要注意数据类型的匹配,并且需要进行内存管理。具体的使用方法可以参考 JNI 的文档和示例。