android 一个jni实例
时间: 2023-12-06 08:04:39 浏览: 55
JNI(Java Native Interface)是 Java 平台上的一种机制,允许 Java 代码与本地代码(如 C、C++ 等)进行交互。下面是一个简单的 JNI 实例,演示了如何在 Android 中使用 JNI。
1. 在 Java 中定义 native 方法
```
public class JNIExample {
static {
System.loadLibrary("native-lib");
}
public native String getStringFromNative();
}
```
注意,在静态块中加载库文件 `native-lib`。这个库文件后面会在 C++ 中用到。
2. 在 C++ 中实现 native 方法
```
#include <jni.h>
#include <string>
extern "C"
JNIEXPORT jstring JNICALL
Java_com_example_jniexample_JNIExample_getStringFromNative(JNIEnv *env, jobject thiz) {
std::string str = "Hello from C++";
return env->NewStringUTF(str.c_str());
}
```
注意,函数名的命名规则是 `<包名>_<类名>_<方法名>`,并且要使用 `extern "C"` 声明,以便能够正确链接。
3. 编译生成动态库
在 C++ 代码所在的目录下执行以下命令:
```
$ <ndk-root>/ndk-build
```
这将生成一个动态库 `libnative-lib.so`。
4. 在 Android 中调用 native 方法
在 Activity 中调用 native 方法:
```
public class MainActivity extends AppCompatActivity {
private TextView mTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = findViewById(R.id.text_view);
JNIExample jniExample = new JNIExample();
String strFromNative = jniExample.getStringFromNative();
mTextView.setText(strFromNative);
}
}
```
最后,将 `libnative-lib.so` 文件放到 `app/src/main/jniLibs` 目录下即可。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)