Android JNI介绍和相关知识汇总

一 关于JNI的介绍

https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/jniTOC.html

目录中红色字体标注的章节为必看章节:

下面是目录:

1. Introduction

Java Native Interface Overview
Background

JDK 1.0 Native Method Interface
Java Runtime Interface
Raw Native Interface and Java/COM Interface

Objectives
Java Native Interface Approach
Programming to the JNI
Changes in JDK 1.1.2

2. Design Overview

JNI Interface Functions and Pointers
Compiling, Loading and Linking Native Methods

Resolving Native Method Names
Native Method Arguments

Referencing Java Objects

Global and Local References
Implementing Local References

Accessing Java Objects

Accessing Primitive Arrays
Accessing Fields and Methods

Reporting Programming Errors
Java Exceptions

Exceptions and Error Codes
Asynchronous Exceptions
Exception Handling

3. JNI Types and Data Structures

Primitive Types
Reference Types
Field and Method IDs
The Value Type
Type Signatures
Modified UTF-8 Strings

4. JNI Functions

Interface Function Table
Version Information

GetVersion

Class Operations

DefineClass
FindClass
GetSuperclass
IsAssignableFrom

Exceptions

Throw
ThrowNew
ExceptionOccurred
ExceptionDescribe
ExceptionClear
FatalError
ExceptionCheck

Global and Local References

NewGlobalRef
DeleteGlobalRef
DeleteLocalRef
EnsureLocalCapacity
PushLocalFrame
PopLocalFrame
NewLocalRef

Weak Global References

NewWeakGlobalRef
DeleteWeakGlobalRef

Object Operations

AllocObject
NewObject, NewObjectA, and NewObjectV
GetObjectClass
GetObjectRefType
IsInstanceOf
IsSameObject

Accessing Fields of Objects

GetFieldID
Get<type>Field Routines
Set<type>Field Routines

Calling Instance Methods

GetMethodID
Call<type>Method Routines, Call<type>MethodA Routines, and Call<type>MethodV Routines
CallNonvirtual<type>Method Routines, CallNonvirtual<type>MethodA Routines, and CallNonvirtual<type>MethodV Routines

Accessing Static Fields

GetStaticFieldID
GetStatic<type>Field Routines
SetStatic<type>Field Routines

Calling Static Methods

GetStaticMethodID
CallStatic<type>Method Routines, CallStatic<type>MethodA Routines, and CallStatic<type>MethodV Routines

String Operations

NewString
GetStringLength
GetStringChars
ReleaseStringChars
NewStringUTF
GetStringUTFLength
GetStringUTFChars
ReleaseStringUTFChars
GetStringRegion
GetStringUTFRegion
GetStringCritical
Release StringCritical

Array Operations

GetArrayLength
NewObjectArray
GetObjectArrayElement
SetObjectArrayElement
New<PrimitiveType>Array Routines

New<PrimitiveType>Array Routines

ArrayType New<PrimitiveType>Array(JNIEnv *env, jsize length);

实际上调用方法为:env->New<PrimitiveType>Array(jsize length).

 

NativeType *Get<PrimitiveType>ArrayElements(JNIEnv *env,ArrayType array, jboolean *isCopy);

A family of functions that returns the body of the primitive array.  在C/C++代码中,从原始数组类型中获取数据元素。

A family of functions that informs the VM that the native code no longer needs access to elems. The elems argument is a pointer derived from array using the corresponding Get<PrimitiveType>ArrayElements() function. If necessary, this function copies back all changes made to elems to the original array.

The mode argument provides information on how the array buffer should be released. mode has no effect if elems is not a copy of the elements in array. Otherwise, mode has the following impact, as shown in the following table:

 

Table 4-10 Primitive Array Release Modes

 

mode

actions

0

copy back the content and free the elems buffer

JNI_COMMIT

copy back the content but do not free the elems buffer

JNI_ABORT

free the buffer without copying back the possible changes


Get<PrimitiveType>ArrayRegion Routines
Set<PrimitiveType>ArrayRegion Routines
GetPrimitiveArrayCritical
ReleasePrimitiveArrayCritical

Registering Native Methods

RegisterNatives
UnregisterNatives

Monitor Operations

MonitorEnter
MonitorExit

NIO Support

NewDirectByteBuffer
GetDirectBufferAddress
GetDirectBufferCapacity

Reflection Support

FromReflectedMethod
FromReflectedField
ToReflectedMethod
ToReflectedField

Java VM Interface

GetJavaVM

5. The Invocation API

Overview

Creating the VM
Attaching to the VM
Unloading the VM

Library and Version Management

JNI_OnLoad
JNI_OnUnload

Invocation API Functions

JNI_GetDefaultJavaVMInitArgs
JNI_GetCreatedJavaVMs
JNI_CreateJavaVM
DestroyJavaVM
AttachCurrentThread
AttachCurrentThreadAsDaemon
DetachCurrentThread
GetEnv

二、网络上的一些资料

1、https://blog.csdn.net/lzpdz/article/details/51544134

Android JNI 使用的数据结构JNINativeMethod详解

2、https://blog.csdn.net/cubesky/article/details/38754045

registerNativeMethods 介绍

3、https://developer.android.google.cn/studio/projects/add-native-code.html?hl=zh-cn

向您的项目添加 C 和 C++ 代码,有时间学习一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值