Android NDK开发:环境搭建与首个JNI程序

1 下载量 72 浏览量 更新于2024-08-30 收藏 189KB PDF 举报
"这篇教程主要介绍了如何在Android环境中进行串口开发,包括如何搭建NDK开发环境以及编写第一个JNI调用程序。作者指出,现有的网络资料可能存在过时或错误的情况,因此决定分享自己的实践经验和详细步骤。" 在Android平台上进行串口开发,通常涉及到本地原生代码的使用,这时就需要利用JNI(Java Native Interface)和NDK(Native Development Kit)。JNI允许Java代码调用C/C++代码,而NDK则提供了在Android应用中编译和运行本地代码的工具集。 一、NDK环境搭建 1. 开发环境准备 本教程使用的开发工具是Android Studio 2.3.3版本。在搭建NDK环境时,只需打开设置,进入"File—-Settings—-Appearance&Behavior—-System Settings—-Android SDK",在SDK Tools选项中勾选CMake、LLDB和NDK,然后点击Apply等待下载安装完成。安装完毕后,NDK路径会自动填充到项目的模块设置中。 二、编写第一个JNI程序 2. 创建NDK项目 创建NDK项目时,需要在新建项目的步骤中选择"Include C++ support"。在C++标准、异常支持和运行时类型信息支持方面,可以根据实际需求进行选择。项目创建完成后,会在app目录下生成一个cpp目录,存放C++源码和相关文件,同时还会自动生成一个`CMakeLists.txt`配置文件。 CMakeLists.txt是C++程序构建的关键,用于指定编译的目标、源文件以及链接库等信息。例如,它可能包含如下内容: ```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/native-lib.cpp ) #找寻jni头文件 find_library( log-lib log ) #链接库 target_link_libraries( # Specifies the target library. native-lib ${log-lib} ) ``` 在`native-lib.cpp`文件中,通常会有一个简单的示例函数,供Java代码通过JNI调用。 三、JNI调用程序的编写 3. JNI接口定义 在Java代码中,需要声明对应的本地方法,使用`native`关键字,并在`javah`工具(或Android Studio的自动功能)生成对应的C/C++头文件。例如: ```java public class MainActivity extends AppCompatActivity { static { System.loadLibrary("native-lib"); } // 声明本地方法 public native String stringFromJNI(); } ``` 4. 实现本地方法 在`native-lib.cpp`中,实现`stringFromJNI`方法: ```cpp #include <jni.h> #include <string> extern "C" JNIEXPORT jstring JNICALL Java_com_example_yourapp_MainActivity_stringFromJNI( JNIEnv *env, jobject /* this */) { std::string hello = "Hello from C++"; return env->NewStringUTF(hello.c_str()); } ``` 这个例子中,`stringFromJNI`方法返回一个字符串,Java代码可以调用这个本地方法并显示结果。 总结,Android串口开发涉及的NDK和JNI编程需要配置正确的开发环境,编写C++代码,并通过CMakeLists.txt文件进行编译配置。通过这些步骤,开发者可以在Android应用中集成本地代码,实现更高效、更底层的功能,如串口通信等。在实践中,还要注意版本兼容性、异常处理和性能优化等问题。