介绍
Android JNI(Java Native Interface)允许开发人员在Java和C/C++之间进行双向调用,极大地扩展了Android应用的开发能力。本篇博客将带您了解如何从零开始开发Android JNI应用,包括Java调用C和C调用Java。
准备工作
在开始之前,您需要确保已经按照以下步骤进行准备工作:
-
安装Android Studio:确保您已经安装了最新版本的Android Studio,并配置好了开发环境。
-
创建一个新项目:在Android Studio中创建一个新的Android项目,选择适合您的需求的模板。
-
配置NDK:在您的项目中,打开
build.gradle
文件,在defaultConfig
块中添加以下内容:
ndk {
abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'
}
这样配置后,您就可以开始进行JNI开发。
Java调用C
-
在项目的
main
目录中创建一个名为jni
的文件夹。 -
在
jni
文件夹中,创建一个名为native-lib.c
的文件。 -
在
native-lib.c
文件中,编写以下代码:
#include <jni.h>
JNIEXPORT jstring JNICALL
Java_com_example_myapplication_MainActivity_stringFromJNI(JNIEnv *env, jobject thiz) {
return (*env)->NewStringUTF(env, "Hello from JNI!");
}
- 打开
MainActivity.java
文件,在类中添加以下声明:
public native String stringFromJNI();
- 在
MainActivity.java
的onCreate
方法中,添加以下代码:
System.loadLibrary("native-lib");
-
在
MainActivity.java
的onCreate
方法中调用stringFromJNI
方法,并将结果显示在界面上。 -
运行应用程序,您将看到界面上显示了来自JNI的字符串。
C调用Java
-
在项目的
main
目录中,创建一个名为java
的文件夹。 -
在
java
文件夹中,创建一个名为JavaInterface.java
的文件。 -
在
JavaInterface.java
文件中,编写以下代码:
public class JavaInterface {
public static void javaMethod() {
System.out.println("This is a Java method called from C!");
}
}
- 在
native-lib.c
文件中,编写以下代码:
#include <jni.h>
JNIEXPORT void JNICALL
Java_com_example_myapplication_MainActivity_callJavaMethod(JNIEnv *env, jobject thiz) {
jclass javaInterfaceClass = (*env)->FindClass(env, "com/example/myapplication/JavaInterface");
jmethodID javaMethodID = (*env)->GetStaticMethodID(env, javaInterfaceClass, "javaMethod", "()V");
(*env)->CallStaticVoidMethod(env, javaInterfaceClass, javaMethodID);
}
- 打开
MainActivity.java
文件,在类中添加以下声明:
public native void callJavaMethod();
- 在
MainActivity.java
的onCreate
方法中,添加以下代码:
System.loadLibrary("native-lib");
-
在
MainActivity.java
的onCreate
方法中调用callJavaMethod
方法。 -
运行应用程序,您将在Android Studio的Logcat中看到来自C的打印消息。
总结
通过本篇博客,我们详细介绍了Android JNI开发的基本过程,包括Java调用C和C调用Java。希望这篇博客能够帮助您快速入门Android JNI开发,并为您的Android应用开发带来更广阔的可能性。
如果您有任何疑问或建议,请随时留言。谢谢阅读!
参考资料:
[1] Android Developers. "Java Native Interface (JNI)". https://developer.android.com/training/articles/perf-jni
本文来自极简博客,作者:浅笑安然,转载请注明原文链接:Android JNI开发从0到1