極客筆記Android Camera Native Framework
/frameworks/base/core/java/android/os/Binder.java
------> Binder.java——>BinderProxy
? ?public boolean transact(int code, Parcel data, Parcel reply, int flags) throws RemoteException {
? ? ? ?Binder.checkParcel(this, code, data, "Unreasonably large binder buffer");
? ? ? ?return transactNative(code, data, reply, flags);
? ?}
? ?public native boolean transactNative(int code, Parcel data, Parcel reply,
? ? ? ? ? ?int flags) throws RemoteException;
BinderProxy 的transact方法會調用JNI方法transactNative方法;
android_util_Binder.cpp
------> android_util_Binder.cppstatic const JNINativeMethod gBinderProxyMethods[] = {
? ? /* name, signature, funcPtr */
? ?{"pingBinder", ? ? ? ? ?"()Z", (void*)android_os_BinderProxy_pingBinder},
? ?{"isBinderAlive", ? ? ? "()Z", (void*)android_os_BinderProxy_isBinderAlive},
? ?{"getInterfaceDescriptor", "()Ljava/lang/String;", (void*)android_os_BinderProxy_getInterfaceDescriptor},
? ?{"transactNative", ? ? ?"(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z", (void*)android_os_BinderProxy_transact},
? ?{"linkToDeath", ? ? ? ? "(Landroid/os/IBinder$DeathRecipient;I)V", (void*)android_os_BinderProxy_linkToDeath},
? ?{"unlinkToDeath", ? ? ? "(Landroid/os/IBinder$DeathRecipient;I)Z", (void*)android_os_BinderProxy_unlinkToDeath},
? ?{"destroy", ? ? ? ? ? ? "()V", (void*)android_os_BinderProxy_destroy},};static jboolean android_os_BinderProxy_transact(JNIEnv* env, jobject obj,
? ? ? ?jint code, jobject dataObj, jobject replyObj, jint flags) // throws RemoteException{
? ?if (dataObj == NULL) {
? ? ? ?jniThrowNullPointerException(env, NULL);
? ? ? ?return JNI_FALSE;
? ?}