修改SystemUI反編譯的smali實現隱藏導航欄

在system/build.prop中加qemu.hw.mainkeys=1也可以讓導航欄不出來。

在反編譯輸出目錄中com/android/systemui/statusbar/phone/PhoneStatusBar.smali控制導航欄.

s實際操作的是 xt1092 android6.0 的SystemUI.apk
下面代碼裏面的寄存器編號不同的包反編譯出來會有不同,但是源碼的邏輯應該是一樣的。

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

.method protected makeStatusBarView()Lcom/android/systemui/statusbar/phone/PhoneStatusBarView;

2、在這個方法裏面找到showNav變量
showNav的賦值語句:

    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對應源碼裏面的代碼:

        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所以在上面的賦值語句後加入下面代碼,要注意寄存器號

    .local v27, "showNav":Z
    const/16 v27, 0x0

f反編譯回去, 發現達到目的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章