免root,反编译应用去掉SmartBar

###前言

对于魅族Flyme SmartBar的评论褒贬不一,有时候只是“强迫症”发作,只想在某个应用里不显示SmartBar,甚至只想在某个应用的某个页面里不显示SmartBar(以下简称sb)。本篇文章由此而生,但不能保证对所有应用有效。

  • 此文章只针对魅族手机Flyme系统。
  • 本篇文章以应用Buzz桌面为例,仅供参考。
  • 仅针对单独的应用进行反编译修改,因此不需要root。缺点是不适配sb的软件都需要修改。
  • qq、微博等由于签名验证机制问题无法去sb。
  • 由于软件编写因人而异,因此去sb的方法会随着软件不同而变化,即无法保证教程里的方法一定可以去sb。

###一、准备工作

下载安装jdkapk改之理

如果原来已经安装了jdk,现在就不用再安装,否则请从官网下载并安装。apk改之理下载地址:APK改之理

下载文件SmartBarUtil.smali (后面会用到的),下载地址:SmartBarUtils.smali

###二、反编译

打开APK改之理,选择菜单中的项目->打开APK,选择需要去SmartBar的应用APK文件,然后等等反编译完成。

APK改之理

此应用APK文件,包名为com.buzzpia.aqua.launcher
在左侧,右击smali文件夹,选择增加文件,选择刚才下载的SmartBarUtil.smali文件,完成后如下图所示。注:不同应用,部分目录名有所不同,但SmartBarUtil.smali文件肯定要在smali目录下的。

反编译APP

###三、找到需要修改的文件

其实基本是修改Activity,只需要打开AndroidManifest.xml,查看activity标签,name属性值就是activity的名称。至于是哪个activity,就需要通过它的名称去猜测了。

示例中反编译Buzz桌面,想去掉桌面显示的SmartBar,则估计其对应文件是/smali/com/buzzpia/aqua/launcher/app/HomeActivity.smali

###四、修改刚才找到的smali文件

双击打开找到的smali文件后,在中间的文本编辑区域,ctrl+f查找oncreate,再向下查找return,在return-void这行的前面回车并添加以下5行代码:

1
2
3
4
5
invoke-virtual {p0}, Lcom/buzzpia/aqua/launcher/app/HomeActivity;->getWindow()Landroid/view/Window;
move-result-object v0
invoke-virtual {v0}, Landroid/view/Window;->getDecorView()Landroid/view/View;
move-result-object v0
invoke-static {v0}, LSmartBarUtils;->hide(Landroid/view/View;)V

注意:第一行是当前修改的smali文件的位置,从com文件夹开始计算,最后一个(这里是HomeActivity)改成当前smali文件的文件名(这里的文件是HomeActivity.smali,在com/buzzpia/aqua/launcher/app/文件夹下)。

修改完成后,保存。

###五、编译生成APK

选择菜单中的编译,选择编译生成APK。就会在原来应用APK文件所在处生成一个以ApkIDE_为前缀的APK文件。

手机中如果已经安装了该应用,需要手动卸载后才能重新安装使用APK改之理编译生成的APK文件。

###参考

参考百度贴吧《免root,软件去SmartBar教程》