大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
在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反编译回去, 发现达到目的
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/192630.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...