Android中调用JNI例子



在Android开发中,JNI(Java Native Interface)是一个关键的技术,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下被使用,如优化性能、使用硬件特性、调用C/C++库等。本示例将详细介绍如何在Android项目中调用JNI。 我们需要创建一个本地方法,这个方法将在Java类中声明,但不会提供实现。例如,我们可以创建一个名为`testJNI`的方法: ```java public class MainActivity extends AppCompatActivity { static { System.loadLibrary("native-lib"); } public native String testJNI(); // ... } ``` 在`MainActivity`中,我们使用`native`关键字标记`testJNI`方法,并在静态块中加载本地库`native-lib`。这个库将在C++中实现,名字与`System.loadLibrary`中的字符串一致。 接下来,我们需要构建本地库。Android Studio通常会在`app/src/main/jni`目录下查找C/C++源文件,但如果没有这个目录,你需要手动创建。在这个目录下创建一个名为`TestJNI.cpp`的文件,然后实现`testJNI`方法: ```cpp #include <jni.h> #include <string> extern "C" JNIEXPORT jstring JNICALL Java_com_example_yourpackage_MainActivity_testJNI(JNIEnv *env, jobject /* this */) { std::string hello = "Hello from C++"; return env->NewStringUTF(hello.c_str()); } ``` 这里,我们使用`extern "C"`来避免C++的名称修饰,`JNIEXPORT`和`JNICALL`是JNI函数定义所需的修饰符。`JNIEnv *env`参数用于执行各种JNI操作,如创建Java字符串。`jobject`参数代表Java对象本身,但在这个简单例子中,我们没有使用它。 为了让Android Studio知道需要编译和链接C++代码,需要更新`app/build.gradle`文件,添加NDK支持: ```groovy android { defaultConfig { externalNativeBuild { cmake { cppFlags "" abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' } } ndk { abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' } } externalNativeBuild { cmake { path "src/main/cpp/CMakeLists.txt" } } } dependencies { // ... } ``` 在`CMakeLists.txt`文件中,添加以下内容: ```cmake cmake_minimum_required(VERSION 3.4.1) 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). src/main/cpp/TestJNI.cpp ) find_library( # Sets the name of the path variable. log-lib # Specifies the name of the NDK library that # you want CMake to locate. log ) target_link_libraries( # Specifies the target library. native-lib # Links the target library to the log library # included in the NDK. ${log-lib} ) ``` 现在,你可以构建并运行项目。Android Studio会自动编译C++代码,生成相应的.so动态库,并将其打包到APK中。当应用程序运行时,`testJNI`方法会被调用,返回从C++生成的字符串。 总结一下,Android中调用JNI的步骤包括: 1. 在Java类中声明native方法。 2. 创建C/C++源文件并实现方法。 3. 更新`build.gradle`和`CMakeLists.txt`配置。 4. 构建项目,生成.so文件并打包到APK。 5. 在Java代码中调用native方法。 通过这个简单的例子,你了解了如何在Android应用中利用JNI调用C++代码。随着对JNI的深入理解,你可以在需要的地方充分利用C++的优势,提高应用性能或实现特定功能。































































































































- 1

- 粉丝: 1w+
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源



- 1
- 2
前往页