首页 > 代码库 > 【开源项目】Smart,让魅族Smartbar变得Smart
【开源项目】Smart,让魅族Smartbar变得Smart
1、为什么叫Smart
因为它很聪明,而且功能是智能去SmartBar的Bar,所以就叫Smart啦
2、安装它需要什么前提
a) 必须android4.0.3以上,并且非ART模式(也就是不支持android4.4),因xposed框架限制(rovo89大神正在努力中)
b) 安装xposed框架(需要root权限)
3、如何安装
a) 下载安装xposed框架
b) 激活框架(会要求重启)
c) 安装Smart
d) 在xposed-模块中,把Smart打上钩子
f) 重启
简单来说就是安装2个app,无需刷机,删除app就可以恢复正常
4、free or freedom?
免费且开源
5、有风险吗?
安装xposed有一定风险,root也有一定风险,请慎重
6、智能去smartbar判断原理
a) 首先判断是否支持actionbar,不支持直接去掉smartbar(如乐视tv、搜狗号码通)
b) 如果支持actionbar,判断是否windows的UiOptions是否为splitActionBarWhenNarrow,如果不是则去掉smartbar(如微信)
c) 如果上面2条都满足,判断menu里的item个数,如果大于0说明在smartbar中有除了back额外的操作,所以不能去掉smartbar,否则直接去掉smartbar(如系统自带的几个app)
7、Smart的原理
昨天看了一些去smartbar的办法,看到一位同学分享的教程http://garth.im/2014/04/decompile-app-to-disappear-smartbar/
我反编译了SmartBarUtil.smali,并且使用到了其中一段代码
public static void Hide(View decorView) { if(!HasSmartBar()) { return; } try { Class[] arrayOfClass = new Class[0x1]; arrayOfClass[0x0] = Integer.TYPE; Method localMethod = View.class.getMethod("setSystemUiVisibility", arrayOfClass); Field localField = View.class.getField("SYSTEM_UI_FLAG_HIDE_NAVIGATION"); Object[] arrayOfObject = new Object[0x1]; try { arrayOfObject[0x0] = localField.get(0x0); } catch(Exception localException1) { } localMethod.invoke(decorView, arrayOfObject); return; } catch(Exception e) { e.printStackTrace(); } }
主要的思路是使用xposed框架hook每个app的activity的onCreatePanelMenu,
在完成menu生成后进行去smartbar判断和操作
在此之前会判断是否支持actionbar来处理较早版本编译的app(乐视tv、搜狗号码通)
8、下载地址
http://pan.baidu.com/s/1hqHwH1M
9、运行截图
10、开源地址
https://github.com/ashqal/SmartbarCracker