专栏首页Android群英传去除 MIUI 的负一屏

去除 MIUI 的负一屏

首先声明,我并非米粉也并非米黑,只是个玩技术的。为什么要拿 MIUI 负一屏开刀呢,因为我不想看到广告,仅此而已。

可以先看一下负一屏长啥样,然后再决定是否要干掉它(MIUI 并没有提供关闭它的入口)。

好了,反正我个人是很不喜欢这种东东的,想个办法干掉它。在 MIUI 论坛上已经有人提出,root 后用老版本的 MiuiHome.apk 替换掉新的,这是一条不错的路,但是会体验不到 MIUI 桌面的其他更新,我不会因为负一屏的问题就放弃了其他的嘛。

所以还是要请出 Xposed 框架,用它来欺负一下 MIUI。

下面进入正题,第一步是反编译 MiuiHome.apk

先在手机里找到并且把这个 apk pull 出来:

$ adb shell
$ pm list packages -f | grep home

此处可以得到 MiuiHome 的路径,简单看一下就好了,接下去退出 adb 并进行 pull。

$ adb pull /system/priv-app/MiuiHome ./

此时可以得到一个目录,目录里包含 MiuiHome.apkMiuiHome.odex(这个文件需要再深入几层去找到)。

拿到这两个文件后,显然还是没有办法反编译的,我们需要将它们合并成一个正常的 apk。

$ java -jar oat2dex.jar odex MiuiHome.odex
$ mv ./odex/MiuiHome.dex classes.dex
$ mv ./odex/classes.dex ./
$ zip MiuiHome.apk classes.dex

经过以上步骤,我们就成功还原了一个 apk,现在就可以反编译了。

第二步就是反编译,方便起见直接使用 jadx:

$ jadx -e --show-bad-code MiuiHome.apk

反编译后得到一个 gradle 项目,将它直接导入到 Idea 里面,利用 IDE 可以更方便的完成工作。恩,我就是不用 Android Studio,垃圾软件毁我青春!

混淆过的代码怎么看?首先要有一个比较良好的心理素质,先不要被它吓倒,最简单的是从无法混淆的方法入手去看,比如说系统的 API,这种是不可能混淆的。

对于这次要做的事情来说,无非就是让 Launcher 不能滑入负一屏,思考方式也很简单,滑动必定用到 onTouchEventdispatchTouchEvent 等关键方法。那就先搜一下吧,希望找到的结果不是太多。

貌似一下子找到一个 MinusOneScreenView,简单翻译一下就是『负一屏』嘛,这中国式英文真好理解,直接双击进这个类,发现它是一个 View,那就找一下谁用了它。

非常简单的找到了 Launcher 这个类,在 1374 行有宝藏。

这里出现了一个资源 id,即 R.id.minus_one_layer,直接点进去看吧,跳转到了一个名叫 launcher.xml 的文件里,整个文件是一目了然的,就是桌面的构成!

那是不是直接把这个 layout 改了就好呢?答案是肯定的,但是我突然想到,某些机型同样升级了,但是并没有出现负一屏,是否 MIUI 做了其他控制呢,不把这个找出来心里不安啊。

如果是 MIUI 对负一屏做了控制,那只有三种方法,一是直接写死负一屏,这个显然不符合现象,有部分机型升级后没有负一屏;二是判断机型,对于特定机型把负一屏删掉,但是感觉这也不科学,至少在 MinusOneScreenViewLauncher 里面都没有找到删除的代码;最后一种就是直接写了两种布局,按不同的机型加载不同的布局,那么这个时候必定有相同的资源 id。

这边有明确资源 id 的东西也就只有 force_touch_layer 了,找一下吧。

果然又找到一个名为 launcher_without_minus_screen.xml 的文件,顾名思义就是没有负一屏的布局了,马上再搜一下这个布局在哪里使用了。

已经找到答案了,关键的控制在 X.cl(),打开反编译得到的 X.java 看一眼。

一!脸!懵!逼!

这玩艺里根本就没有我要的东东嘛,而且文件名是大写的 X.java,而里面却是小写的 x.java,这个类一定有问题。

但是通过这份反编译的源码已经得不到什么有用的信息了,因为代码本身不对,需要找另一种可以得到正确结果的反编译方案。我选择的是 apktool

$ adb pull /system/app/miui/miui.apk ./
$ java -jar apktool.jar if miui.apk
$ java -jar apktool.jar d MiuiHome.apk

这里需要注意的是,必须先安装 miui.apk,这个文件包含了反编译 MiuiHome.apk 所需的资源,一开始凭经验觉得弄好 framework-res.apk 就好了,结果依然无法反编译。

现在我们能得到一份 smali 代码,直接读一下吧,不折腾了,直接打开 X.smali,并找到 cl() 方法。

看这段代码大概可以翻译成这样,看得懂大意就好了,不要在意细节:

其实也无所谓了,不由分说直接返回 true 吧,用 xposed 来改:

搞到最后几句代码就搞定了(而且架子还是 IDE 生成的...),不过这个分析的过程着实有趣,在直接反编译有异常的情况下,用 smali 来补足代码也是一种必需要学会的手段。


下一版本的 RootTools 就可以看到这个功能的上线,大家快乐的玩耍干净的 MIUI 吧~

本文分享自微信公众号 - Android群英传(android_heroes),作者:何晓杰

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-11-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 花式实现图片3D翻转效果

    用户1907613
  • Clipboard还能玩出花

    用户1907613
  • 贝塞尔曲线开发的艺术

    用户1907613
  • 大数据24小时 | 华谊19亿“插足”电子竞技 星环科技要做大数据时代Oracle

    车库咖啡远走厦门建“公场” 欲建设大数据共享平台 ? 北京中关村著名众创空间——车库咖啡入驻海沧区,成立“厦门车库咖啡大数据创新公场”。利用厦门市和海沧区在信息...

    数据猿
  • 苹果新功能发布一波三折,雅虎“卖身”数月终被Verizon收购 | 大数据周周看

    数据猿导读 雅虎“卖身”即将落听,Verizon计划一周内完成收购;大数据技术和人工智能专家欧阳辰加盟品友互动,出任公司首席技术官;美国金融科技公司stem完成...

    数据猿
  • 某二手交易平台大数据平台从 0 到 1 演进与实践

    在人口流量红利不再,获客成本越来越高的时代,精益创业、MVP 的概念已经深入人心,精细化运营也是大势所趋,而这些背后本质上都依赖数据化运营,那如何根据现有业务,...

    江帅帅
  • 准确率99.9%!如何用深度学习最快找出放倒的那张X光胸片(代码+数据)

    大数据文摘
  • 数据猿·金猿榜丨2017中国智能营销域最具潜力创业公司

    “2017中国智能营销域最具潜力创业公司”盘点源于数据猿推出的“金猿榜”系列内容,旨在通过媒体的方式与原则,发掘大数据领域最具潜力的创新型企业 编辑 | sha...

    数据猿
  • 学 Python 好不好就业?爬了招聘网站后给你答案

    Python语言相关的岗位非常多,有运维,有自动化测试,有后端开发,有机器学习,如果想要快速上手,并且有不错的就业,那就推荐数据分析。

    一墨编程学习
  • 实用:用深度学习方法修复医学图像数据集

    新智元

扫码关注云+社区

领取腾讯云代金券