Build type(user/userdebug/eng)과 루트 권한에 대해서 알아봅니다.
아래는 Build type의 용도에 관한 간단한 설명입니다.
Buildtype |
Use |
user |
limited access; suited for production |
userdebug |
like "user" but with root access and debuggability; preferred for debugging |
eng |
development configuration with additional debugging tools |
각 Build type 별 보안 및 디버그 관련 설정되는 System Property는 다음과 같습니다.
Buildtype |
System Property |
user |
ro.secure = 1 , ro.debuggable = 0 |
userdebug |
ro.secure = 1 , ro.debuggable = 1 |
eng |
ro,secure = 0 , ro.debuggable = 1 |
System Property는 개별 또는 두 개 조합으로 Framework와 Application에서 Buildtype에 따른 로직 처리를 위해서 사용됩니다.
대표적으로 Framework에서 Debug 모드 시 분기 조건으로 많이 사용되는 IS_DEBUGGABLE은 아래와 같이 정의되어 있습니다.
/** * Returns true if we are running a debug build such as "user-debug" or "eng". * @hide */ public static final boolean IS_DEBUGGABLE = SystemProperties.getInt("ro.debuggable", 0) == 1;
안드로이드 단말기는 양산할 때 user 바이너리(Build type: user)가 들어갑니다.
물론 시중에 나와 있는 단말기 중에는 userdebug 바이너리가 들어간 것도 있습니다.
아래에서 다루겠지만, userdebug인 경우 쉽게 루트 권한을 가질 수 있고 1 커널 로그도 확인할 수 있어서 개발자 입장에서 선호하는 Build type입니다.
양산단계에 안드로이드 단말기에 user 바이너리가 들어가는 이유- 기본탑재 앱(Preload app)의 보호 (기본탑재 앱의 삭제 또는 변형에 따른 오동작 방지)
- A/S 이슈 (루트 권한을 이용해서 시스템에 리스크를 줄 수 있는 변경에 따른 고장 유발)
- 보안 이슈
단말기 제조업체에서는 개발 중에는 eng 또는 userdebug 바이너리로 단말기를 개발 또는 테스트합니다.
개발단계에 단말기는 eng / userdebug 바이너리를 사용하는 경우
- 단말기 브링업/셋업시는 eng 바이너리가 작업에 유리한 점이 많습니다.
- 단말기 안정화된 후 검증에는 user 바이너리와 가까운 userdebug 바이너리가 적합합니다.
(예로들면 eng 바이너리는 상대적으로 로드가 있기 때문에 성능관련한 검증 및 사용성 검증 등에는 적합하지 않습니다.)
안드로이드 초기버전에는 user 바이너리 단말에서도 안드로이드 취약점을 이용한 루팅이 가능했지만, 현재는 안드로이드 보안패치로 인하여 막혔습니다. 단, 리커버리를 통한 커스텀 바이너리 업데이트로 루팅은 여전히 가능합니다.
userdebug 바이너리 단말기에서는 ADB(Android Debug Bridge) 데몬을 루트 권한으로 동작하게끔 명령(adb root)을 날려줌으로써 루트 권한을 가진 ADB로 restart 하는 방법과 ADB restart 없이 쉘에서 su 명령에 의한 루트 권한으로 해당 명령을 동작하게 하는 방법이 있습니다.
[userdebug 바이너리 단말기에서 su 명령에 의한 루트 권한으로 동작하게 하는 방법]
아래와 같이 커널로그(kmsg 로그)는 루트 권한이 없으면 명령이 먹히지 않습니다.
그러나, su 명령으로 루트 권한을 주면 명령이 먹힙니다.
[userdebug 바이너리 단말기에서 루트 권한을 가진 ADB로 restart 하는 방법]
- adb root 명령 실행 후 uid/gid 모두 root로 변경된 것을 확인할 수 있습니다.
- adb root 명령 실행 후 adb는 루트 권한을 가지고, 이후 su 명령없이도 동작하는 것을 확인할 수 있습니다.
이상으로 Build type(user/userdebug/eng)과 루트 권한에 대해서 알아보았습니다.
조금이나마 도움이 되셨으면 아래 ♡공감 버튼을 눌러주세요.
- 루팅(rooting) [본문으로]
'Android Dev > App Basics & UI' 카테고리의 다른 글
버그 리포팅을 위한 준비 / 이전 오류 정보를 보관하는 tombstone과 dropbox (2) | 2018.12.29 |
---|---|
커스텀 리스트뷰에서 아이템 클릭(onItemClick)이 동작하지 않던 현상 해결방법 (0) | 2018.12.21 |
접근성 검사기(Accessibility Scanner)를 이용한 접근성 개선 예제 (1) | 2018.12.20 |
접근성 지원을 위한 개발 시 검토 항목 / 사전 출시 보고서(접근성) / 접근성 검사기 (0) | 2018.12.17 |
시각장애인 또는 약시 사용자를 위한 접근성(Accessibility)에 대하여 (1) | 2018.11.27 |