Xpose实例分析-变色龙
主要分析状态背景变色那块
ColourChangerMod.java
WindowDecorActionBarHooks.java
ActionBarHooks.java
StatusBarViewHook.java
1.先看看Xposed各个回调具体执行,之前讲了是在XposedBridge的loadModules中执行。
private static void loadModule(String apk, String startClassName) {
......
// call the init(String) method of the modulefinal Object moduleInstance = moduleClass.newInstance();if (startClassName == null) {//1 initZygote 2 hookLoadPackage 3 hookInitPackageResourcesif (moduleInstance instanceof IXposedHookZygoteInit) {//IXposedHookZygoteInitIXposedHookZygoteInit.StartupParam param = new IXposedHookZygoteInit.StartupParam();param.modulePath = apk;((IXposedHookZygoteInit) moduleInstance).initZygote(param); }if (moduleInstance instanceof IXposedHookLoadPackage)//IXposedHookLoadPackagehookLoadPackage(new IXposedHookLoadPackage.Wrapper((IXposedHookLoadPackage) moduleInstance));if (moduleInstance instanceof IXposedHookInitPackageResources)//IXposedHookInitPackageResourceshookInitPackageResources(new IXposedHookInitPackageResources.Wrapper((IXposedHookInitPackageResources) moduleInstance));} else {if (moduleInstance instanceof IXposedHookCmdInit) {//IXposedHookCmdInitIXposedHookCmdInit.StartupParam param = new IXposedHookCmdInit.StartupParam();param.modulePath = apk;param.startClassName = startClassName;((IXposedHookCmdInit) moduleInstance).initCmdApp(param);}}
......
}
ColourChangerMod.java
@Override
public void initZygote(StartupParam startupParam) throws Throwable {
......if (Utils.hasActionBar())new ActionBarHooks(mSettingsHelper);
}@Override
public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable {
......//hook actionbar hereif (!lpparam.packageName.equals("com.android.systemui")) {new WindowDecorActionBarHooks(mSettingsHelper, lpparam);return;}
}
WindowDecorActionBarHooks.javat和ActionBarHooks.java差不多
public WindowDecorActionBarHooks(SettingsHelper settingsHelper, XC_LoadPackage.LoadPackageParam lpparam) {
......findAndHookMethod(WindowDecorActionBar, "setBackgroundDrawable", Drawable.class, new XC_MethodHook() {
......Drawable drawable = (Drawable) param.args[0];//获得Drawable int color = Utils.getMainColorFromActionBarDrawable(drawable);//获得颜色ColourChangerMod.sendColorChangeIntent(color, Utils.getIconColorForColor(color, defaultNormal, nvertedIconTint, mSettingsHelper.getHsvMax()), actionBar.getContext());//发送广播变色
}
}
ColourChangerMod.java收到广播后调用setStatusBarTint进行变色,ColourChangerMod类中之前提到的handleLoadPackage中对StatusBarView也进行了hook,StatusBarViewHook.java
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {mInstance.setStatusBarView((View) param.thisObject);
}
//ColourChangerMod.java
public void setStatusBarView(View view) {mStatusBarView = view;Utils.setViewBackground(mStatusBarView, mGradientDrawable);
}
//最后
public static void setViewBackground(View view, Drawable drawable) {if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {view.setBackground(drawable);} else {view.setBackgroundDrawable(drawable);}
}
Xpose实例分析-变色龙相关推荐
- gpgpu-sim卡分配程序设计实例分析
gpgpu-sim卡分配程序设计实例分析 运行代码地址:https://github.com/gpgpu-sim/gpgpu-sim_distribution 一.概述 此文件包含有关安装.生成和运行 ...
- python多功能电子钟_python gui - PyQt4 精彩实例分析之电子钟
PyQt4 精彩实例分析之电子钟,当然在写实例之前要先安装PyQt4模块.from PyQt4.QtGui import * from PyQt4.QtCore import * import sys ...
- RPC-原理及RPC实例分析
还有就是:RPC支持的BIO,NIO的理解 (1)BIO: Blocking IO;同步阻塞: (2)NIO:Non-Blocking IO, 同步非阻塞; 参考:IO多路复用,同步,异步,阻塞和非阻 ...
- python asyncio教程_python中使用asyncio实现异步IO实例分析
1.说明 Python实现异步IO非常简单,asyncio是Python 3.4版本引入的标准库,直接内置了对异步IO的支持. asyncio的编程模型就是一个消息循环.我们从asyncio模块中直接 ...
- 马歇尔·赫伯特:人工智能的前沿技术与实例分析
来源:中国人工智能学会 2017年12月11日,国际知名机器人专家.美国卡耐基梅隆大学机器人研究所所长马歇尔·赫伯特(Martial Hebert)教授和首席科学家大卫·伯恩(David Bourne ...
- python怎么处理数据_python中scrapy处理项目数据的实例分析
在我们处理完数据后,习惯把它放在原有的位置,但是这样也会出现一定的隐患.如果因为新数据的加入或者其他种种原因,当我们再次想要启用这个文件的时候,小伙伴们就会开始着急却怎么也翻不出来,似乎也没有其他更好 ...
- Android10.0 Binder通信原理(四)-Native-C\C++实例分析
摘要:本节主要来讲解Android10.0 Binder的Native层实例流程 阅读本文大约需要花费35分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Androi ...
- Android Touch事件原理加实例分析
Android中有各种各样的事件,以响应用户的操作.这些事件可以分为按键事件和触屏事件.而Touch事件是触屏事件的基础事件,在进行Android开发时经常会用到,所以非常有必要深入理解它的原理机制. ...
- SSL/TLS 协议简介与实例分析
作者:drinkey 以前读RFC时总结的一篇文章,主要介绍了SSL/TLS协议的相关知识,包括协议本身以及简单的密码学概念,以及用实例解析了HTTP over SSL的协商过程,在最后简要列出了SS ...
- java list反序列化_java序列化与反序列化操作实例分析
本文实例分析了java序列化与反序列化操作.分享给大家供大家参考,具体如下: 概述: Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程. ...
最新文章
- 如何看服务器java_如何查看Windows服务器运行了多长时间
- 【uni-app】动态计算图片高度且保持宽高比
- 零基础学python-Python入门教程完整版(懂中文就能学会)
- Spring Cloud Consul
- Zabbix监控网络设备讲解
- 路径规划算法:动态规划
- 红蓝宝书1000题 新日本语能力考试N1文字.词汇.文法 练习+详解
- 【学习随记】Word域代码相关
- 设计稿750px 配置rem
- mysql 增加时间字段
- CSS3D导航栏翻转效果
- 微信授权,其实2步很简单
- 致敬贝叶斯以及自己对贝叶斯的一些见解
- 大数据征信:央行开了“半扇门”
- unity3D摄像机跟随
- ROS Error: [rospack] Error: package ‘map_server‘ not found
- ffmpeg推流到mediasoup
- 第十一章 特征选择与稀疏学习
- 程序设计-红皮书代码题记录
- 知名软件已经成为手机病毒滋生的乐土
热门文章
- excel文件损坏修复绝招_ps文件损坏有修复的软件!超强开挂辅助神器
- 硬件常见物料识别和单位换算
- mysql查询每个月入职人数_按年份统计入职人数sql语句
- 在中国mapinfo电子地图中添加投影教程
- 华为认证考试方式有哪些?华为认证考试怎么考?
- 北京/杭州内推 | 阿里达摩院城市大脑实验室视觉团队招收CV实习生
- 博后招募 | 香港中文大学招收机器人视觉智能传感方向博士后/RA/访问学者
- mysql回收站恢复数据恢复_回收站清空了如何恢复?金山数据恢复大师恢复回收站清空文件的方法...
- ftp连不上linux虚拟机,cuteftp连不上Linux虚拟机的解决方案
- 加密狗方式注册多可系统