Android System & AOSP Engineering/Debug, ADB & System Tools

안드로이드 시스템 속성(Property) 제어: getprop 및 setprop 명령어 활용법

임베디드 친구 2025. 3. 3. 10:23
반응형

안드로이드 운영체제는 하드웨어 모델명, 빌드 버전, 시스템 설정 등 기기의 동작을 결정짓는 수많은 속성(Property) 정보를 내부 데이터베이스에 저장합니다. 개발자나 QA 엔지니어는 이러한 정보를 확인하여 테스트 환경을 구축하거나, 특정 시스템 플래그를 강제로 조작하여 앱의 다양한 분기 처리를 검증해야 할 때가 있습니다. 안드로이드 프레임워크는 이를 위해 getprop과 setprop이라는 직관적인 명령줄 도구를 제공합니다. 이번 포스팅에서는 안드로이드 시스템 속성의 개념부터 런타임 조작 방법, 그리고 build.prop 파일을 활용한 영구적인 설정 변경 방법까지 실무적인 내용을 정리해 보겠습니다.

Generated by Gemini AI.

핵심 요약

  • getprop은 시스템 전체 속성을 조회하는 명령어이며, 특정 속성값(ro.product.model 등)을 필터링하여 기기 환경을 빠르게 파악할 수 있습니다.
  • setprop을 사용하면 런타임 환경에서 시스템 플래그를 즉시 변경할 수 있지만, ro.로 시작하는 읽기 전용(Read-Only) 속성은 시스템 이미지 수정이 필요합니다.
  • 재부팅 후에도 설정값을 유지하려면 persist. 접두사가 붙은 속성을 사용하거나 /system/build.prop 파일을 수정해야 합니다.

1. 안드로이드 시스템 속성 접두사 및 제어 방식

속성명에 붙는 접두사에 따라 시스템이 이를 어떻게 관리하는지 이해하는 것이 중요합니다.

접두사 관리 방식 변경 가능 여부 설명
sys. 런타임 가능 시스템 서비스 관련 설정으로, 런타임 시 변경 가능합니다.
persist. 파일 저장 가능 (재부팅 유지) 설정값이 재부팅 후에도 유지되도록 파일 시스템에 저장됩니다.
ro. 읽기 전용 불가능 Read-Only 속성으로, 시스템 빌드 시 고정되어 직접 수정이 불가능합니다.
log. 디버깅 가능 로그 출력 수준(Level) 등을 제어할 때 사용합니다.

2. 실무 활용 명령어 사용법

속성 조회 예제

단말기의 현재 빌드 상태를 확인하여 테스트 조건을 파악할 때 유용합니다.

Bash
 
# 전체 속성 목록 확인
adb shell getprop

# 특정 제품 모델명 조회
adb shell getprop ro.product.model

# 안드로이드 빌드 버전 조회
adb shell getprop ro.build.version.release

시스템 설정 변경 예제

디버깅을 위한 환경 조성을 위해 런타임 속성을 변경하는 방식입니다.

Bash
 
# RTL UI 강제 적용
adb shell setprop debug.force_rtl 1

# 특정 로그 태그 디버그 수준 활성화
adb shell setprop log.tag.ActivityManager DEBUG

# Wi-Fi 기본값 활성화
adb shell setprop persist.sys.wifi.default true

개발을 위한 팁

  • 시스템 서비스 재시작: 런타임에서 setprop으로 값을 변경했음에도 UI나 기능에 즉각 반응이 없다면 시스템 서비스가 해당 속성을 다시 읽어오지 않았기 때문입니다. 이 경우 adb shell stop과 adb shell start를 순차적으로 실행하여 안드로이드 프레임워크 서비스를 재시작하면 대부분 정상 반영됩니다.
  • 영구 반영을 위한 build.prop 수정: persist. 속성이 지원되지 않는 시스템 설정이라면 /system/build.prop을 수정해야 합니다. 반드시 adb pull로 원본을 백업한 뒤, 로컬에서 수정 후 다시 push 하고 파일 권한을 644로 변경하는 과정을 잊지 마십시오.
  • 속성명 검색: 시스템 속성이 너무 많아 어떤 값을 바꿔야 할지 모를 때는 adb shell getprop | grep [키워드] 명령어를 조합해 원하는 설정 항목을 찾아낼 수 있습니다.

흔히 하는 실수

  • ro. 속성 수정 시도: ro.build.version.sdk 같은 ro. 속성을 setprop으로 수정하려 하면 setprop failed 에러가 발생합니다. 이는 설계상 수정할 수 없는 값이므로, 강제로 변경하려면 시스템 이미지를 직접 언팩(Unpack)하여 수정하거나 Magisk 등을 이용한 시스템 리모운트가 필요합니다.
  • 권한 부여 누락: build.prop 파일을 수정하여 시스템에 다시 밀어 넣었을 때, adb shell chmod 644 /system/build.prop 명령을 실행하지 않으면 부팅 시 시스템이 해당 파일을 읽지 못해 부팅 루프(Bootloop)에 빠질 수 있습니다.
  • 쓰기 권한 미확보: adb remount를 먼저 실행하지 않고 push를 시도하면 Read-only file system 에러를 만납니다. 시스템 영역을 수정하기 전에는 반드시 adb root와 adb remount가 선행되어야 함을 명심하십시오.

결론

시스템 속성을 제어하는 능력은 안드로이드 기기 내부 동작 원리를 깊이 있게 파악하는 과정입니다. 오늘 설명한 getprop과 setprop의 차이점, 그리고 접두사에 따른 속성 관리 방식을 이해하고 있다면 다양한 기기 환경에서 테스트 리그를 유연하게 운영할 수 있습니다. 시스템 파일을 직접 수정하는 작업은 다소 위험이 따르지만, 위에서 정리한 가이드를 따라 주의 깊게 수행한다면 디버깅 효율을 크게 높일 수 있을 것입니다. 오늘 배운 내용을 활용하여 프로젝트에 필요한 시스템 환경 최적화를 진행해 보시기 바랍니다.

반응형