apk
APK (Android Package) 파일 포맷
APK는 Android 운영 체제에서 애플리케이션을 배포하고 설치하기 위해 사용되는 파일 포맷이며, 파일 확장자는 “.apk”이다. 공식적으로는 “Android Package”의 약자이며, Android 플랫폼의 표준 패키징 형식으로 정의되어 있다.
구조
APK 파일은 ZIP 압축 파일 형식을 기반으로 하며, 압축 해제 시 다음과 같은 주요 요소들을 포함한다.
| 요소 | 설명 |
|---|---|
| AndroidManifest.xml | 애플리케이션의 기본 정보(패키지명, 권한, 컴포넌트 등)를 정의하는 매니페스트 파일 |
| classes.dex | Dalvik/ART 가상 머신에서 실행되는 바이트코드가 담긴 파일 |
| resources.arsc | 애플리케이션에 사용되는 리소스(문자열, 레이아웃 등)의 인덱스와 메타데이터 |
| res/ | 이미지, 레이아웃 XML, 애니메이션 등 실제 리소스 파일이 저장된 디렉터리 |
| lib/ | Native 코드(C/C++ 등)로 컴파일된 라이브러리(.so 파일)들이 CPU 아키텍처별로 구분되어 저장 |
| META-INF/ | 서명 파일 및 인증서가 포함된 디렉터리(예: CERT.RSA, CERT.SF) |
| assets/ | 애플리케이션이 직접 접근할 수 있는 원시 파일이 포함된 디렉터리 |
배포 및 설치
- Google Play Store 등 공식 마켓에서 APK 파일을 업로드하면, 사용자는 해당 마켓을 통해 자동으로 다운로드 및 설치한다.
- 사이드로드(직접 설치) 방식에서는 사용자가 APK 파일을 직접 디바이스에 전송하고, 설정에서 “알 수 없는 출처”를 허용한 뒤 설치한다.
MIME 타입
- 표준 MIME 타입은
application/vnd.android.package-archive이다.
보안
- APK는 디지털 서명을 통해 배포자 신원을 검증한다. 서명은
META-INF/디렉터리 내에 저장되며, 동일한 패키지 이름을 가진 다른 APK가 기존 서명과 다를 경우 설치가 차단된다. - 안드로이드 시스템은 설치 전 APK 파일을 스캔하여 악성코드 및 권한 오남용 여부를 확인한다.
관련 표준
- Android Package Format Specification은 Google이 제공하며, ZIP 기반 구조와 각 파일의 역할을 명시한다.
- Android SDK 도구(
aapt,apktool등)를 이용해 APK 파일을 분석·재패키징할 수 있다.
사용 예시
- 앱 개발: Android Studio 등 IDE에서 프로젝트를 빌드하면
app-release.apk혹은app-debug.apk형태로 출력된다. - 테스트: 개발자는 실제 디바이스나 에뮬레이터에 APK를 설치해 기능을 검증한다.
- 배포: 기업 내부 앱은 자체 서버에 APK를 업로드해 사내 배포망을 구축하기도 한다.
요약: APK는 Android 애플리케이션을 패키징하고 배포하기 위한 표준 파일 형식으로, ZIP 구조를 기반으로 하며 매니페스트, 실행 코드, 리소스, 서명 정보를 포함한다. 이 포맷은 Android 운영 체제에서 직접 지원되며, 공식적인 MIME 타입과 보안 메커니즘을 제공한다.