修改SystemUI反编译的smali实现隐藏导航栏「建议收藏」

2022-09-30 18:38:50 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

在system/build.prop中加qemu.hw.mainkeys=1也可以让导航栏不出来。

在反编译输出目录中com/android/systemui/statusbar/phone/PhoneStatusBar.smali控制导航栏.

s实际操作的是 xt1092 android6.0 的SystemUI.apk 下面代码里面的寄存器编号不同的包反编译出来会有不同,但是源码的逻辑应该是一样的。

1、找到makeStatusBarView方法 z在这行:

代码语言:javascript复制
.method protected makeStatusBarView()Lcom/android/systemui/statusbar/phone/PhoneStatusBarView;

2、在这个方法里面找到showNav变量 showNav的赋值语句:

代码语言:javascript复制
    iget-object v4, v0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mWindowManagerService:Landroid/view/IWindowManager;

    invoke-interface {v4}, Landroid/view/IWindowManager;->hasNavigationBar()Z

    move-result v27

d对应源码里面的代码:

代码语言:javascript复制
        try {
            boolean showNav = mWindowManagerService.hasNavigationBar();
            showNav = false;
            if (DEBUG) Log.v(TAG, "hasNavigationBar="   showNav);
            if (showNav) {
                mNavigationBarView =
                    (NavigationBarView) View.inflate(context, R.layout.navigation_bar, null);

                mNavigationBarView.setDisabledFlags(mDisabled1);
                mNavigationBarView.setBar(this);
                mNavigationBarView.setOnVerticalChangedListener(
                        new NavigationBarView.OnVerticalChangedListener() {
                    @Override
                    public void onVerticalChanged(boolean isVertical) {
                        if (mAssistManager != null) {
                            mAssistManager.onConfigurationChanged();
                        }
                        mNotificationPanel.setQsScrimEnabled(!isVertical);
                    }
                });
                mNavigationBarView.setOnTouchListener(new View.OnTouchListener() {
                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                        checkUserAutohide(v, event);
                        return false;
                    }});
            }
        } catch (RemoteException ex) {
            // no window manager? good luck with that
        }

3、修改代码 a看名字感觉showNav就是控制导航栏的显示的,所以在判断showNav的if语句之前将showNav设为false应该就可以了。

u所以在上面的赋值语句后加入下面代码,要注意寄存器号

代码语言:javascript复制
    .local v27, "showNav":Z
    const/16 v27, 0x0

f反编译回去, 发现达到目的

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/192630.html原文链接:https://javaforall.cn

0 人点赞