主要分析状态背景变色那块

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实例分析-变色龙相关推荐

  1. gpgpu-sim卡分配程序设计实例分析

    gpgpu-sim卡分配程序设计实例分析 运行代码地址:https://github.com/gpgpu-sim/gpgpu-sim_distribution 一.概述 此文件包含有关安装.生成和运行 ...

  2. python多功能电子钟_python gui - PyQt4 精彩实例分析之电子钟

    PyQt4 精彩实例分析之电子钟,当然在写实例之前要先安装PyQt4模块.from PyQt4.QtGui import * from PyQt4.QtCore import * import sys ...

  3. RPC-原理及RPC实例分析

    还有就是:RPC支持的BIO,NIO的理解 (1)BIO: Blocking IO;同步阻塞: (2)NIO:Non-Blocking IO, 同步非阻塞; 参考:IO多路复用,同步,异步,阻塞和非阻 ...

  4. python asyncio教程_python中使用asyncio实现异步IO实例分析

    1.说明 Python实现异步IO非常简单,asyncio是Python 3.4版本引入的标准库,直接内置了对异步IO的支持. asyncio的编程模型就是一个消息循环.我们从asyncio模块中直接 ...

  5. 马歇尔·赫伯特:人工智能的前沿技术与实例分析

    来源:中国人工智能学会 2017年12月11日,国际知名机器人专家.美国卡耐基梅隆大学机器人研究所所长马歇尔·赫伯特(Martial Hebert)教授和首席科学家大卫·伯恩(David Bourne ...

  6. python怎么处理数据_python中scrapy处理项目数据的实例分析

    在我们处理完数据后,习惯把它放在原有的位置,但是这样也会出现一定的隐患.如果因为新数据的加入或者其他种种原因,当我们再次想要启用这个文件的时候,小伙伴们就会开始着急却怎么也翻不出来,似乎也没有其他更好 ...

  7. Android10.0 Binder通信原理(四)-Native-C\C++实例分析

    摘要:本节主要来讲解Android10.0 Binder的Native层实例流程 阅读本文大约需要花费35分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Androi ...

  8. Android Touch事件原理加实例分析

    Android中有各种各样的事件,以响应用户的操作.这些事件可以分为按键事件和触屏事件.而Touch事件是触屏事件的基础事件,在进行Android开发时经常会用到,所以非常有必要深入理解它的原理机制. ...

  9. SSL/TLS 协议简介与实例分析

    作者:drinkey 以前读RFC时总结的一篇文章,主要介绍了SSL/TLS协议的相关知识,包括协议本身以及简单的密码学概念,以及用实例解析了HTTP over SSL的协商过程,在最后简要列出了SS ...

  10. java list反序列化_java序列化与反序列化操作实例分析

    本文实例分析了java序列化与反序列化操作.分享给大家供大家参考,具体如下: 概述: Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程. ...

最新文章

  1. 如何看服务器java_如何查看Windows服务器运行了多长时间
  2. 【uni-app】动态计算图片高度且保持宽高比
  3. 零基础学python-Python入门教程完整版(懂中文就能学会)
  4. Spring Cloud Consul
  5. Zabbix监控网络设备讲解
  6. 路径规划算法:动态规划
  7. 红蓝宝书1000题 新日本语能力考试N1文字.词汇.文法 练习+详解
  8. 【学习随记】Word域代码相关
  9. 设计稿750px 配置rem
  10. mysql 增加时间字段
  11. CSS3D导航栏翻转效果
  12. 微信授权,其实2步很简单
  13. 致敬贝叶斯以及自己对贝叶斯的一些见解
  14. 大数据征信:央行开了“半扇门”
  15. unity3D摄像机跟随
  16. ROS Error: [rospack] Error: package ‘map_server‘ not found
  17. ffmpeg推流到mediasoup
  18. 第十一章 特征选择与稀疏学习
  19. 程序设计-红皮书代码题记录
  20. 知名软件已经成为手机病毒滋生的乐土

热门文章

  1. excel文件损坏修复绝招_ps文件损坏有修复的软件!超强开挂辅助神器
  2. 硬件常见物料识别和单位换算
  3. mysql查询每个月入职人数_按年份统计入职人数sql语句
  4. 在中国mapinfo电子地图中添加投影教程
  5. 华为认证考试方式有哪些?华为认证考试怎么考?
  6. 北京/杭州内推 | 阿里达摩院城市大脑实验室视觉团队招收CV实习生
  7. 博后招募 | 香港中文大学招收机器人视觉智能传感方向博士后/RA/访问学者
  8. mysql回收站恢复数据恢复_回收站清空了如何恢复?金山数据恢复大师恢复回收站清空文件的方法...
  9. ftp连不上linux虚拟机,cuteftp连不上Linux虚拟机的解决方案
  10. 加密狗方式注册多可系统