우리는 안드로이드 스튜디오에서 흔히 개발을 할 때 AVD(Android Virtual Device)를 사용하게 된다.
그런데 여기에 사소한 문제가 하나 있다. 바로 API 레벨에 따라 표시되는 UI가 다르다는 것이다.
![]() |
![]() |
API 29 (Android 10.0) | API 34 (Android 14.0) |
바로 확연한 차이를 알 수 있는데 무려 API 34 부분에는 내비게이션 바가 존재하지 않는다.
그 이유로는 API 30(Android 11)부터는 디바이스의 기본값이 '제스처 내비게이션'으로 바뀌어서 하단 내비게이션은 사라지고 직접 동작해서 뒤로 가게끔 바뀌었기 때문이다.
그렇다면 어떻게 API 30 이상의 디바이스에서 내비게이션 바를 사용할 수 있을까? 답은 간단하다.
그냥 바로 터미널에 아래의 명령어를 입력해 주면 된다.
adb shell settings put secure system_navigation_keys_enabled 1
adb shell cmd overlay enable com.android.internal.systemui.navbar.threebutton
adb shell cmd overlay disable com.android.internal.systemui.navbar.gestural
그리고 이제 복원하고 싶으면 아래의 명령어를 입력해 주면 되겠다.
adb shell cmd overlay disable com.android.internal.systemui.navbar.threebutton
adb shell cmd overlay enable com.android.internal.systemui.navbar.gestural
근데 이 명령어가 뭔지도 모르고 쓰는 건 좀 그러니 간단하게 알아보자.
전체 개요
이 명령어들은 abd shell을 통해 안드로이드 기기에 직접 접근해서 시스템 내 오버레이(overlay) 설정을 바꿔 제스처로 되어 있는 것을 3 버튼 내비게이션으로 전환하는 동작을 해주고 있다.
첫째 줄
adb shell settings put secure system_navigation_keys_enabled 1
역할
- settings put secure는 보안 설정(Secure Settings) 영역의 값을 변경하는 명령어이다.
- system_navigation_keys_enabled 값은 물리/소프트 내비게이션 키를 활성화할지 여부를 결정시켜 준다.
값 | 의미 |
0 | 비활성화 (버튼 안보임, 제스쳐 내비게이션) |
1 | 활성화 (버튼식 내비게이션 허용) |
👉 즉, 내비게이션 키를 표시할 수 있게 시스템 권한을 열어주는 역할을 한다.
둘째 줄
adb shell cmd overlay enable com.android.internal.systemui.navbar.threebutton
역할
- 안드로이드의 SystemUI(시스템 UI)는 여러 종류의 오버레이 리소스를 가지고 있다.
- com.android.internal.systemui.navbar.threebutton은 3 버튼 내비게이션 레이아웃을 표시하는 오버레이가 되겠다.
👉 이 명령어는 3 버튼 내비게이션용 오버레이를 활성화하여,
하단에 뒤로 가기 / 홈 / 최근 앱 버튼이 나타나게 만들어 준다.
셋째 줄
adb shell cmd overlay disable com.android.internal.systemui.navbar.gestural
역할
- 이건 반대로, 제스처 내비게이션 레이아웃 오버레이를 비활성화(disable)한다.
- 즉, 기존의 “스와이프 기반 제스처 바”를 끄는 동작이 되겠다
👉 2번 명령어와 반대로, 제스처 오버레이를 꺼서 버튼식 오버레이만 남기게 된다.
정리하자면 아래와 같은 동작이 일어난다.
- 내비게이션 키 기능 자체를 허용
- 버튼 내비게이션 오버레이를 활성화
- 제스처 오버레이를 비활성화
이렇게 하단에 버튼 형태의 오버레이가 표시되게 된다.
이렇게 내비게이션바를 추가하는 방법을 알아보았는데 사실 굳이 필요 없을 수도 있다. 근데 난 필요했기에 올린다.