JNI编程完全指南系列
基于Android 14源码深度解析JNI API
本系列共12篇,全面覆盖JNI编程的核心知识点
系列目录
基础篇(第1-3篇)
第01篇:类型系统与基础数据类型
- JNI基本类型:jint、jlong、jboolean等
- jvalue联合体
- jsize索引类型
- 类型映射与跨平台保证
第02篇:引用类型与对象模型
- 引用类型层次结构
- C与C++的类型差异
- jobject、jclass、jstring、jarray详解
- jfieldID与jmethodID
第03篇:函数签名与方法描述符
- 类型签名编码规则
- 方法签名构造
- javap工具使用
- JNINativeMethod结构体
数据操作篇(第4-5篇)
第04篇:字符串处理完全指南
- UTF-16与Modified UTF-8
- NewString vs NewStringUTF
- GetStringChars vs GetStringUTFChars
- GetStringRegion与Critical API
第05篇:数组操作深度解析
- 数组创建API
- Get/ReleaseArrayElements详解
- Get/SetArrayRegion批量操作
- GetPrimitiveArrayCritical高性能访问
内存与引用篇(第6篇)
第06篇:引用管理与内存安全
- 本地引用、全局引用、弱全局引用
- DeleteLocalRef与NewGlobalRef
- PushLocalFrame/PopLocalFrame机制
- 内存泄漏防范
调用机制篇(第7-8篇)
第07篇:方法调用机制详解
- CallMethod系列
- CallStaticMethod
- CallNonvirtualMethod
- 构造函数调用
第08篇:字段访问与操作
- GetFieldID与GetStaticFieldID
- Get/SetField
- 字段ID缓存策略
异常与类操作篇(第9-10篇)
第09篇:异常处理机制
- JNI异常挂起模型
- ExceptionCheck、ExceptionOccurred
- Throw、ThrowNew
- 异常处理模式
第10篇:反射API与类操作
- FindClass与GetObjectClass
- FromReflectedMethod/ToReflectedMethod
- IsAssignableFrom、IsInstanceOf
- 类层次检查
并发与高级篇(第11-12篇)
第11篇:线程操作与同步
- AttachCurrentThread/DetachCurrentThread
- JavaVM与JNIEnv线程安全
- MonitorEnter/MonitorExit
- 线程附加模式
第12篇:高级特性与性能优化(完结篇)
- DirectByteBuffer零拷贝
- RegisterNatives动态注册
- 性能优化总结
- 调试技巧与最佳实践
学习路径
初学者路线
进阶路线
高级路线
核心知识点速查
类型系统
- 基本类型:jint(4字节)、jlong(8字节)、jboolean(1字节)
- 引用类型:jobject → jclass、jstring、jarray
- 签名规则:I(int)、J(long)、Z(boolean)、L类名;(对象)、[类型(数组)
方法与字段
- 获取ID:GetMethodID、GetFieldID(需缓存)
- 调用方法:CallVoidMethod、CallIntMethod等
- 访问字段:GetIntField、SetObjectField等
内存管理
- 本地引用:自动管理,循环中需手动删除
- 全局引用:NewGlobalRef/DeleteGlobalRef配对
- Frame机制:PushLocalFrame/PopLocalFrame批量管理
数据传输
- 字符串:NewStringUTF(简单)、GetStringCritical(高性能)
- 数组:GetIntArrayElements(全量)、GetIntArrayRegion(部分)
- DirectBuffer:零拷贝大数据传输
异常处理
- 检查:ExceptionCheck()
- 清除:ExceptionClear()
- 抛出:ThrowNew(clazz, “message”)
线程安全
- JNIEnv:不可跨线程
- JavaVM:可跨线程
- 附加:AttachCurrentThread/DetachCurrentThread
源码参考
所有API定义位于:
- 主文件:libnativehelper/include_jni/jni.h
- Android Framework实现:frameworks/base/core/jni/
示例参考:
- MessageQueue JNI:frameworks/base/core/jni/android_os_MessageQueue.cpp
- AndroidRuntime:frameworks/base/core/jni/AndroidRuntime.cpp
- Binder JNI:frameworks/base/core/jni/android_util_Binder.cpp
性能优化检查清单
- methodID/fieldID已缓存
- 循环中使用Frame或DeleteLocalRef
- 大数组使用Critical API
- 避免频繁JNI调用(批量处理)
- 全局引用已配对删除
- 字符串选择合适API(UTF-8 vs UTF-16)
- DirectByteBuffer用于大数据传输
关于本系列
- 基于源码:Android 14 (AOSP)
- 文档定位:从初学到精通的完整学习路径
希望这个系列能帮助你深入理解JNI编程,成为Android底层开发专家!



