首页 > 代码库 > 【开源项目】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