如何检查使用 Parcel.transact 调用的方法
How can I inspect methods called with Parcel.transact
当涉及 Parcels 时,我在查看和跟踪 android 源代码中的方法调用时遇到问题。
我想通过查看 Android 源代码来了解更多关于 PendingIntents 内部工作原理的信息,但是就在事情变得有趣的时候,Parcels 弹出了一些模棱两可的函数被调用,重要的一点结束了
我特别相信 IIntentSender 的 send() 方法中的以下几行很重要:
mRemote.transact(Stub.TRANSACTION_send, _data, _reply, 0);
这是我迷路的地方。我怎样才能找到下一个调用的方法?尝试查看transact方法的源码,只显示一个没有代码的接口!
mRemote的类型是android.os.IBinder(又是一个接口)
提前感谢您的帮助!
(P.S: 我用grepcode.com检查了源代码)
Binder只是进程间函数调用的"guts"。 Providers、Intents 和 Messages 实际上只是 Binder 协议的抽象。那里有很多关于 Binder 协议的信息,但是它的设计是为了让大多数人不必担心它。
当您调用诸如 getActivity()
之类的函数时,您正在获取稍后将使用的意图对象,但是当那个时候到来时,它会使用活页夹来完成它的工作。
这就是说,您在 "guts," 上走得太远了,需要退后一步。 Binder 无处不在,只是一种通用的通信方式。 .transact
调用另一端的内容取决于获取 Binder(或在本例中为 PendingIntent)的方式。
尝试推断哪个组件会处理您的特定类型的意图,并在其代码中寻找 .transact
方法。这通常采用巨大的 switch 语句的形式,该语句根据 .transact
的第一个参数调用不同的函数。无论哪种情况,块调用对您来说都是 "interesting"。
在你的情况下,TRANSACTION_send
让我想到找到一些具有 "sending" 能力的 activity。嗯,这听起来像是 ActivityManager
的工作。可以找到此代码 here。检查一些潜在断点位置的 onTransact 方法。
当涉及 Parcels 时,我在查看和跟踪 android 源代码中的方法调用时遇到问题。
我想通过查看 Android 源代码来了解更多关于 PendingIntents 内部工作原理的信息,但是就在事情变得有趣的时候,Parcels 弹出了一些模棱两可的函数被调用,重要的一点结束了
我特别相信 IIntentSender 的 send() 方法中的以下几行很重要:
mRemote.transact(Stub.TRANSACTION_send, _data, _reply, 0);
这是我迷路的地方。我怎样才能找到下一个调用的方法?尝试查看transact方法的源码,只显示一个没有代码的接口!
mRemote的类型是android.os.IBinder(又是一个接口)
提前感谢您的帮助!
(P.S: 我用grepcode.com检查了源代码)
Binder只是进程间函数调用的"guts"。 Providers、Intents 和 Messages 实际上只是 Binder 协议的抽象。那里有很多关于 Binder 协议的信息,但是它的设计是为了让大多数人不必担心它。
当您调用诸如 getActivity()
之类的函数时,您正在获取稍后将使用的意图对象,但是当那个时候到来时,它会使用活页夹来完成它的工作。
这就是说,您在 "guts," 上走得太远了,需要退后一步。 Binder 无处不在,只是一种通用的通信方式。 .transact
调用另一端的内容取决于获取 Binder(或在本例中为 PendingIntent)的方式。
尝试推断哪个组件会处理您的特定类型的意图,并在其代码中寻找 .transact
方法。这通常采用巨大的 switch 语句的形式,该语句根据 .transact
的第一个参数调用不同的函数。无论哪种情况,块调用对您来说都是 "interesting"。
在你的情况下,TRANSACTION_send
让我想到找到一些具有 "sending" 能力的 activity。嗯,这听起来像是 ActivityManager
的工作。可以找到此代码 here。检查一些潜在断点位置的 onTransact 方法。