- 빌드 변형(build variants)과 플레이버(flavors)란 무엇인가요?
build variants와 flavor란 무엇인가
- 정의: 단일 코드에서 다양한 버전 생성하는 유연한 방법 제공 , 새로운 빌드 타입 임의로 추가해 다르게 설정을 각각 적용할 수 있다. 예를 들어 Release에만 난독화와 리소스 압축을 적용하고 Debug에서는 빠른 결과 확인을 위해 적용하지 않을 수 있다.
빌드 변형이란?
- 빌드 타입과 제품 flavor를 결합한 결과
- Gradle 플러그인은 각 조합에 대해 빌드 변형 생성해 사용 사례에 맞게 apk 생성가능하게 함
Flavor이란?
- 무료 유료버전, us, eu같은 지역별 버전과 같이 다양한 flavor 정의 가능
- 각 flavor는 애플리케이션 id, 버전 이름, 리소스 와 같이 고유한 구성 가질 수 있음
- 접근성(accessibility)을 어떻게 보장하나요?
접근성은 시각·청각·운동 장애가 있는 사용자도 앱을 불편함 없이 이용할 수 있도록 하는 것. WCAG 등 국제 표준 준수로 보편적 사용성을 보장한다.
ContentDescription 제공
- 이미지, 버튼, 아이콘 등에
android:contentDescription 지정하여 사용자에게 설명 제공한다
- 단순 장식용 뷰는
null 또는 IMPORTANT_FOR_ACCESSIBILITY_NO 설정한다
동적 글꼴 크기 지원
- 시스템 접근성에서 설정한 글꼴 크기를 반영하기 위해
sp 단위 사용한다
dp는 픽셀 독립적 단위지만 글꼴 크기 변경을 반영하지 않는다.
포커스 관리
- 키보드에서 논리적인 이동 가능하도록
nextFocusUp, nextFocusDown 속성 지정한다
- 커스텀 뷰는
AccessibilityDelegate로 스크린 리더가 읽을 수 있도록 onInitializeAccessibilityNodeInfo() 재정의한다
- 색상 대비
- 저시력/색맹 사용자 고려하여 텍스트와 배경 간 충분한 대비 필요한다.
- 테스트
- Accessibility Scanner, Layout Inspector 등으로 검증한다.
- 안드로이드 파일 시스템이란 무엇인가요?
안드로이드 파일 시스템은 리눅스 기반으로 앱과 사용자 데이터를 안전하게 분리, 관리하는 구조이다.
주요 파티션
/system: OS 핵심 파일(읽기 전용)
/data: 앱별 내부 저장소 DB, SharedPreferences, 파일 저장
/cache: 임시 저장소
/storage(External Storage): 사진, 동영상 등 공유 데이터
/tmp: 임시적 파일 저장
보안 모델
- 앱별 고유 UID 기반 구조 → 다른 앱의
/data에는 접근 불가.
- 앱 간 데이터 공유는 외부 저장소나 ContentProvider 사용.
- Scoped Storage(Android 10+): 공유 저장소 접근 제한, MediaStore/SAF 사용 권장 - 앱이 파일 시스템 + 클라우드 스토리지까지 접근할 수 있는 표준화된 파일 선택 인터페이스
https://developer.android.com/guide/topics/providers/document-provider?hl=ko
- 안드로이드 런타임(ART), Dalvik, Dex 컴파일러란 무엇인가요?
안드로이드 앱은 Java/Kotlin 바이트코드 → .dex 변환 → 런타임(ART/Dalvik)에서 실행되는 구조
Dalvik (이전 런타임)
- JIT 컴파일: 실행 시 바이트코드를 기계어로 변환
- 장점: 설치 속도 빠름
- 단점: 런타임 오버헤드 큼, 앱 실행 속도 느림
ART (현재 런타임)
- AOT(Ahead-Of-Time) 컴파일: 설치 시점에 기계어로 변환.
- 장점: 실행 속도 빠름, CPU 사용량↓, 가비지 컬렉션 개선
- 디버깅/프로파일링 강화
Dex 컴파일러
- Java 바이트코드 →
.dex 변환 담당
- 멀티덱스 지원(64K 메서드 제한 초과 시 분할) - Jetpack 멀티덱스 라이브러리는 API 14이상 에서 사용가능
- Dalvik/ART 모두 실행 가능한 최적화된 포맷 생성
- APK 파일과 AAB 파일의 차이점은 무엇인가요?
APK (Android Package)
- 설치 가능한 전통적 포맷
- 모든 리소스(화면 밀도, 언어, CPU 아키텍처 등) 포함 → 불필요하게 크다.
AAB (Android App Bundle)
- Google Play에 업로드하는 게시용 포맷.
- 기기별 최적화 APK를 Google Play가 자동 생성 (다운로드 크기 ↓)
- 직접 설치 불가, bundletool 필요
- 스토어 관리 효율 ↑
- R8 최적화란 무엇인가요?
R8은 ProGuard를 대체한 안드로이드 코드 축소·최적화·난독화 도구. 빌드 시 실행됨.
주요 기능
- 코드 축소: 사용하지 않는 클래스/메서드 제거
- 최적화: 인라이닝, 중복 코드 제거, 상수 전파
- 난독화: 클래스/메서드명을 짧게 바꿔 리버스 엔지니어링 방지
- 리소스 최적화: 사용하지 않는 리소스 삭제
장점
- 앱 크기 감소 → APK/AAB 용량 ↓
- 런타임 성능 향상 → 실행 속도↑
- 보안 강화 → 코드 난독화
- Gradle 빌드에 통합 → ProGuard보다 효율적
주의점
- 리플렉션/동적 로딩 코드가 잘못 제거될 수 있음 → ProGuard 규칙(
keep) 작성 필요
- 난독화된 스택트레이스 → 디버깅 어려움