Xposed 如何在所有应用的任一 Activity 下钩子?

发布于 2022-09-05 02:23:11 字数 127 浏览 28 评论 0

Android Xposed 框架开发中,想在所有的 Activity 在他们 OnCreate 的生命周期向某一地方输出一条日志,并记录这个 Activity 所在包名类名是什么,应该如何 hook?

先在此谢过大家了!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

国际总奸 2022-09-12 02:23:11

直接hook,Activity类的onCreate应该就满足你的需求了呀.

冬天的雪花 2022-09-12 02:23:11

题主自己来回答啦

请注意题目说的是“所有应用”而不是某一应用,在查xposed api的时候看到这个

IXposedHookZygoteInit

Hook the initialization of Zygote process(es), from which all the apps are forked.

Implement this interface in your module's main class in order to be notified when Android is starting up. In IXposedHookZygoteInit, you can modify objects and
place hooks that should be applied for every app. Only the Android framework/system classes are available at that point in time. Use null as class loader for
XposedHelpers.findAndHookMethod(String, ClassLoader, String, Object...) and its variants.

If you want to hook one/multiple specific apps, use IXposedHookLoadPackage instead.

也就是说,如果你想hook某一app,就用IXposedHookLoadPackage;如果是所有应用,那就要在zygote里做手脚。

流年已逝 2022-09-12 02:23:11

题目过去很久了,不过为了防止以后有人再有同样的问题还是回答一下吧。不管是不是原来的问题
其实解决办法没有题主说的那么复杂。

首先,在MainActivity的oncreate里打下断点,然后进入debug,得到下面的调用栈图片描述

可以看到在oncreate之前执行的是performCreate,然后点击这一行,再旁边的窗口加上getClass(),就输出了当前的类名。因此hook Activity.performCreate即可。

至于hook Activity.onCreate大概也可以实现同样的效果,只不过这个hook到的是Activity调用super.onCreate的这一条语句,一般不是我们需要的。

同理可以hook各种生命周期方法。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文