如何Hook NotificationManagerService 实现自己的特殊业务
16lz
2021-01-26
package com.sf.myapplication;import android.app.NotificationManager;import android.content.Context;import android.util.Log;import java.lang.reflect.Field;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;class SystemServiceHookUtil { public static void hookNMS(MainActivity context) { try { NotificationManager notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); Method getService = NotificationManager.class.getDeclaredMethod("getService"); getService.setAccessible(true); Class iNotiMngClz = Class.forName("android.app.INotificationManager"); Object proxyNotiMng = Proxy .newProxyInstance(context.getClass().getClassLoader(), new Class[]{iNotiMngClz}, new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Log.d("invoke(). method:{}", method.getName()); return null; } }); Field sServiceField = NotificationManager.class.getDeclaredField("sService"); sServiceField.setAccessible(true); sServiceField.set(notificationManager, proxyNotiMng); } catch (Exception e) { e.printStackTrace(); } }}
HOOK注意事项:
Hook 静态变量和单例,因为一旦创建对象,它们不容易变化,非常容易定位。
考虑 Android API 的变化,注意做好兼容
更多相关文章
- 访问http资源之HttpUrlConnection get、post请求
- Android(安卓)之 ListView使用BaseAdapter展示列表
- ContentObserver监听ContentProvider数据变化
- Android(安卓)AlertDialog 获取PositiveButton的控制权
- AndroidGUI13:ViewTreeObserver的常用技巧
- Android(安卓)IOC
- Android:静态注册BroadcastReceiver
- 编译cubieboard android 源码过程详解之(七):lichee build
- Android(安卓)Studio 初次见面(AVD加速)