큰 글꼴이나 작은 화면에서 앱이 어떻게 보이는지 확인하려고 adb로 화면 밀도를 바꾸는 경우가 있습니다. 끝나고 wm density reset으로 되돌리면 될 것 같지만, 삼성 기기에서는 원래 값으로 안 돌아옵니다. 제조사가 패널 기본값보다 낮은 값을 강제해 두는데 reset이 그 강제값을 지워 버리기 때문입니다. 저는 이걸 모르고 사용자 폰을 바꿔 놓은 채 한참 작업했습니다.
앱이 큰 글꼴 설정에서 깨지지 않는지 확인하려고 밀도를 올려 봤습니다.
adb shell wm density 480
확인을 마치고 되돌렸습니다.
adb shell wm density reset
그런데 그 뒤로 찍은 스크린샷의 좌표가 계속 이상했습니다. 버튼이 있어야 할 자리에 없고, 같은 화면인데 y좌표가 100픽셀 넘게 밀려 있었습니다. 앱을 의심하다가 기기를 확인했습니다.
reset은 "기본값으로"가 아니라 "설정을 지움"이다
제 기기는 갤럭시 노트9입니다. 패널 자체는 1440×2960에 560dpi인데, 삼성은 기본적으로 1080×2220 / 420dpi로 낮춰서 씁니다. 설정의 '화면 해상도'가 FHD+로 되어 있는 그 상태입니다.
이 낮춘 값은 안드로이드 입장에서 재정의(override)입니다. 확인해 보면 이렇게 나옵니다.
adb shell settings get secure display_density_forced
420
wm density reset은 이 재정의를 지웁니다. 그러면 패널 원래 값인 560으로 돌아갑니다. 즉 "원래대로"가 아니라 삼성이 낮춰 둔 설정을 없애서 화면이 더 커진 상태가 됩니다. settings delete secure display_density_forced도 결과가 같습니다.
| 명령 | 노트9에서 일어나는 일 |
|---|---|
wm density 480 | 재정의 값을 480으로 바꾼다 |
wm density reset | 재정의를 삭제 → 패널 값 560이 된다 (원래 420이었는데) |
wm density 420 | ✅ 원래 상태로 복귀 |
wm size도 똑같습니다. wm size reset을 하면 1080×2220이 아니라 1440×2960이 됩니다.
해결 — 건드리기 전에 값을 적어 둔다
reset을 믿지 말고 원래 값을 먼저 읽어서 기록한 다음, 끝나면 그 값을 직접 넣어 되돌립니다.
# 1. 시작 전에 반드시 읽어 둔다
adb shell wm size
Physical size: 1440x2960
Override size: 1080x2220 ← 이 값이 원래 상태다
adb shell wm density
Physical density: 560
Override density: 420 ← 이 값이 원래 상태다
# 2. 테스트
adb shell wm density 480
# 3. 되돌리기 — reset 이 아니라 값으로
adb shell wm density 420
adb shell wm size 1080x2220
제조사가 패널 값을 그대로 쓰는 기기라면
Override 줄이 아예 없습니다. 그럴 때는 reset이 정말로 원래대로 돌려놓습니다. 그래서 기기에 따라 이 문제를 겪기도 하고 안 겪기도 합니다 — 남의 글에서 "reset하면 된다"를 읽고 그대로 따라 하다 당하는 이유입니다. 자기 기기에서 먼저 출력을 확인하세요.
왜 늦게 알아챘나
이 글을 쓰는 이유입니다. 밀도가 바뀌면 아무 오류도 안 납니다. 앱은 정상으로 뜨고 스크린샷도 멀쩡히 찍힙니다. 다만 모든 좌표가 조용히 달라집니다.
저는 되돌렸다고 믿고 그 뒤 여러 화면을 캡처해 확인했는데, 그게 전부 잘못된 밀도에서 찍힌 것이었습니다. 자동화 스크립트가 좌표로 버튼을 누르고 있었으니 그 클릭들도 제자리가 아니었습니다. 버튼의 y좌표가 189에서 290으로 밀린 걸 보고 나서야 기기를 의심했습니다.
더 곤란한 건 그 기기가 제가 실제로 쓰는 폰이라는 점입니다. 모르고 넘어갔다면 사용자(저 자신)의 폰 화면이 바뀐 채로 남았을 것입니다. 남의 테스트 기기를 빌려 쓰는 상황이라면 더 나쁩니다.
같이 조심할 것 — 회전과 자동 회전
가로 화면을 확인할 때도 비슷한 일이 납니다. 자동 회전을 끄고 강제로 돌리는데, 원래 자동 회전이 켜져 있었는지 꺼져 있었는지를 먼저 적어 두지 않으면 되돌릴 수 없습니다.
# 원래 값 확인
adb shell settings get system accelerometer_rotation
# 앱을 띄운 뒤에 돌린다 (런처가 떠 있으면 안 먹는다)
adb shell settings put system accelerometer_rotation 0
adb shell settings put system user_rotation 1
# 끝나면 둘 다 원래 값으로
정리
- 삼성 기기는 패널 기본값보다 낮은 값을 재정의로 써 둡니다(노트9: 560 → 420).
wm density reset은 그 재정의를 지웁니다. 결과는 원래보다 큰 화면입니다.wm size reset도 같습니다(1080×2220 → 1440×2960).- 되돌리기는
wm density 420처럼 값을 직접 넣어서 합니다. - 건드리기 전에
wm size·wm density출력을 적어 두세요. - 밀도가 바뀌어도 오류가 안 나고 좌표만 조용히 달라집니다. 자동화가 있으면 결과가 전부 어긋납니다.
자주 묻는 것
재부팅하면 돌아오지 않나요?
안 돌아옵니다. display_density_forced는 settings에 저장되는 값이라 재부팅해도 유지됩니다. 오히려 그래서 위험합니다 — 눈치채지 못하면 계속 그 상태로 씁니다. 설정 앱의 '화면 해상도'에서 다시 고르면 복구되긴 하지만, 그러려면 먼저 바뀌었다는 걸 알아야 합니다.
큰 글꼴 테스트는 밀도 말고 다른 방법이 없나요?
글꼴 크기만 볼 거라면 settings put system font_scale 1.3이 더 좁은 변경이고 되돌리기도 쉽습니다(원래 값은 보통 1.0). 밀도는 화면 전체 배율이라 영향 범위가 훨씬 넓습니다. 확인하려는 것이 글꼴이면 글꼴만 건드리세요.
에뮬레이터에서 하면 안전하지 않나요?
안전합니다. 내 기기 설정을 건드릴 일이 없고 AVD를 지우면 끝입니다. 다만 제조사 UI에서만 나타나는 문제(이 글의 재정의 같은 것)는 순정 에뮬레이터에서 재현되지 않습니다. 레이아웃 확인은 에뮬, 제조사 특성 확인은 실기기로 나누는 게 맞습니다.
