去除 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 了,找一下吧。

搜索 force_touch_layer

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

找到啦!!

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

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() 方法。

X.smali

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

翻译一下

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

修改

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


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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,444评论 25 707
  • 很多人写文章,喜欢把什么行业现状啊,研究现状啊什么的写了一大通,感觉好像在写毕业论文似的,我这不废话,先直接上几个...
    庞哈哈哈12138阅读 2,928评论 1 8
  • 今天给我们讲课的是ccdi 总经理吴老师,管理学学士MBA,曾任悉地国际集团人力资源总监,在国企复合领域有17年的...
    徐靓1阅读 513评论 0 50
  • 4月23日 星期日 晴天 今天的读经班在风景优美的公园美学里进行的,我们家离得很近,到了那里,我看到小区...
    A叶瑞妹阅读 189评论 1 1
  • 师徒制也就是所谓的传帮带,古代注重的是传授,现代更注重的是帮扶,带领,来让新员工更快的认识,适应新公司。“师傅”作...
    伊森田慧慧阅读 513评论 0 0