Android 생태계는 앱 데이터를 패키징, 배포, 저장하기 위해 다양한 파일 형식을 사용합니다. 타사 소스에서 앱을 다운로드한 적이 있다면 익숙한 APK 이외의 파일 확장자를 접했을 가능성이 높습니다. XAPK, APKS, APKM, AAB, OBB와 같은 형식은 각각 Android 앱 수명 주기에서 특정 목적으로 사용됩니다.
이 가이드는 모든 주요 Android 파일 형식에 대한 완전한 참조 자료입니다. 개발자, 앱을 사이드로드하는 고급 사용자, 이러한 파일에 실제로 무엇이 포함되어 있는지 알고 싶은 호기심 많은 독자는 모두 아래에서 일반 언어로 설명된 각 형식을 찾을 수 있습니다.
APK: Android 패키지 키트
APK는 Android 애플리케이션의 기본 파일 형식입니다. 이는 Android가 시작된 이래로 표준 설치 형식이었으며 Android 운영 체제가 앱 설치를 위해 기본적으로 이해하는 형식으로 남아 있습니다.
포함된 내용
APK 파일은 본질적으로 특정 내부 구조를 가진 ZIP 아카이브입니다.
- AndroidManifest.xml, 앱의 패키지 이름, 구성 요소, 권한 및 요구 사항을 선언하는 바이너리 XML 파일
- 및 classes2.dex 등, 앱의 Java/Kotlin 코드가 포함된 컴파일된 Dalvik 바이트코드 classes.dex
- resources.arsc, 리소스 ID를 해당 값에 매핑하는 컴파일된 리소스 테이블
- res/, ID로 참조되는 레이아웃, 드로어블 및 문자열과 같은 리소스가 포함된 디렉터리
- assets/, 런타임 시 AssetManager를 통해 앱에서 액세스하는 원시 자산 파일
- lib/, CPU 아키텍처로 구성된 네이티브 라이브러리(예: lib/arm64-v8a/)
- META-INF/, 서명 파일 및 인증서 정보
당신이 그것을 만날 때
APK 파일은 타사 소스에서 앱을 사이드로드할 때 다운로드하는 파일입니다. 또한 최신 Play 스토어 설치에서는 앱 번들(AAB)에서 생성된 분할 APK를 사용하는 경우가 많지만 Play Store에서 기기에 설치되는 항목이기도 합니다.
처리 방법
APK 파일은 파일 관리자로 열거나 adb install를 사용하여 Android에 직접 설치할 수 있습니다. 확장명을 .zip로 변경하고 추출하거나 APK 검증자를 사용하여 서명과 메타데이터를 검사하여 내용을 검사할 수도 있습니다.
AAB: Android 앱 번들
Android 앱 번들(AAB)은 Google의 Play 스토어용 게시 형식입니다. 2021년 8월부터 Play 스토어의 모든 신규 앱은 APK가 아닌 AAB로 제출되어야 합니다.
포함된 내용
AAB 파일은 프로토콜 버퍼 기반 형식을 사용하며 다음을 포함합니다.
- 기본 모듈: 모든 기기에 필요한 핵심 앱 코드 및 리소스
- 화면 밀도, CPU 아키텍처 및 언어별로 구성된 구성 분할: 리소스
- 동적 기능 모듈: 요청 시 다운로드할 수 있는 옵션 기능
- 기기별 APK를 생성하는 방법에 대한 Google Play용 번들 메타데이터: 지침
당신이 그것을 만날 때
일반 사용자는 일반적으로 AAB 파일을 직접 접하지 않습니다. 개발자는 빌드 및 업로드 프로세스 중에 사용합니다. 그러나 AAB 파일을 얻는 경우(오픈 소스 프로젝트의 빌드 아티팩트에서) 설치하기 전에 해당 파일을 APK 형식으로 변환해야 합니다.
처리 방법
Google의 bundletool 명령줄 유틸리티 또는 AAB에서 APK로 변환기를 사용하여 AAB 파일에서 설치 가능한 APK를 생성합니다. 변환 프로세스에서는 범용 APK(더 크며 어디에서나 작동함) 또는 기기별 APK(더 작음, 기기 대상)를 생성합니다.
XAPK: 확장 APK
XAPK는 APK를 관련 OBB 데이터 파일과 함께 번들로 묶거나 APK 구성을 다운로드 가능한 단일 패키지로 분할하는 APKPure에서 대중화된 컨테이너 형식입니다.
포함된 내용
XAPK 파일은 다음을 포함하는 ZIP 아카이브입니다.
- 기본 APK 파일(기본 애플리케이션)
- OBB 파일(게임 및 대형 앱의 확장 데이터)
- 선택적으로 다양한 장치 구성에 맞게 APK 파일을 분할합니다.
- 패키지 내용과 설치 지침을 설명하는 manifest.json 파일
- 표시용 아이콘 파일
당신이 그것을 만날 때
타사 앱 저장소에서 대용량 앱이나 게임을 다운로드할 때 XAPK 파일이 발생합니다. 추가 데이터 파일(이전에는 OBB 파일로 배포됨)이 필요한 게임은 일반적으로 다운로드 프로세스를 단일 파일로 단순화하기 위해 XAPK로 패키지됩니다.
처리 방법
XAPK 파일은 Android의 기본 패키지 설치 프로그램으로 직접 설치할 수 없습니다. 전용 XAPK 설치 프로그램 앱이 필요하거나 XAPK-APK 변환기를 사용하여 기본 APK를 추출할 수 있습니다. OBB 데이터가 필요한 게임의 경우 OBB 추출기를 사용하여 OBB 파일을 추출하여 올바른 디렉터리에 배치해야 합니다.
APKS: APK 세트
APKS 형식은 AAB 파일에서 기기별 APK를 생성할 때 Google 번들 도구의 출력입니다. 또한 일부 앱 백업 도구에서 분할 APK 설치를 저장하는 데 사용됩니다.
포함된 내용
APKS 파일은 다음을 포함하는 ZIP 아카이브입니다.
- toc.pb, 분할 구조를 설명하는 프로토콜 버퍼 목차
- splits/, 기본 APK와 모든 구성 분할 APK가 포함된 디렉터리
- 선택적으로 분할 설치를 지원하지 않는 기기용 독립형 APK
당신이 그것을 만날 때
로컬에서 Bundletool을 사용할 때, Play 스토어에서 설치된 앱을 백업할 때, 또는 분할 APK 구조를 유지하는 특정 타사 저장소에서 다운로드할 때 APKS 파일이 발생합니다.
처리 방법
Bundletool의 install-apks 명령을 사용하여 APKS 파일을 설치하거나 APKS에서 APK로의 합병를 사용하여 단일 APK로 변환할 수 있습니다. 분할 APK를 범용 APK에 병합하면 모든 구성 리소스가 결합되므로 파일 크기가 늘어날 수 있습니다.
APKM: APKMirror 패키지
APKM은 여러 분할 APK로 구성된 앱을 배포하기 위해 APKMirror에서 만든 독점 컨테이너 형식입니다. XAPK 및 APKS와 유사한 목적을 제공하지만 APKMirror의 자체 구조를 사용합니다.
포함된 내용
APKM 파일은 다음을 포함하는 ZIP 아카이브입니다.
- 기본 APK 파일
- 다양한 구성(밀도, ABI, 언어)에 맞게 APK 파일 분할
- 패키지 구조를 설명하는 메타데이터 파일
당신이 그것을 만날 때
APKMirror에서 다운로드할 때만 APKM 파일이 발생합니다. 사이트에서는 Play 스토어에서 앱 번들(AAB)로 배포되므로 여러 개의 분할 APK로 구성된 앱에 이 형식을 사용합니다.
처리 방법
APKM 파일을 직접 설치하려면 APKMirror Installer 앱이 필요합니다. 또는 콘텐츠를 추출하고(ZIP 파일이므로) ADB의 install-multiple 명령을 사용하여 분할 APK를 수동으로 설치할 수 있습니다. 기본 APK를 추출하여 독립형으로 설치할 수도 있지만 구성을 분할하지 않으면 일부 기능이 제한될 수 있습니다.
OBB: 불투명 바이너리 블롭
OBB 파일은 Android 앱(주로 게임)에서 Play 스토어의 APK 크기 제한을 초과하는 대용량 데이터를 저장하는 데 사용되는 확장 파일입니다. Google은 이 시스템을 Play Asset Delivery로 대체했지만 기존의 많은 앱은 여전히 OBB 파일을 사용합니다.
포함된 내용
OBB 파일에는 앱에 필요한 모든 유형의 데이터가 포함될 수 있습니다.
- 게임 텍스처 및 3D 모델
- 오디오 파일 및 사운드트랙
- 비디오 콘텐츠
- 레벨 데이터 및 지도
- 개발자가 외부에 저장하기로 선택한 대규모 바이너리 데이터
OBB 파일 내의 데이터 형식은 전적으로 개발자에게 달려 있습니다. 일부는 ZIP 압축을 사용하고 다른 일부는 사용자 정의 바이너리 형식을 사용합니다. 이름의 "불투명"은 Android가 파일을 블랙박스로 처리한다는 것을 반영합니다.
당신이 그것을 만날 때
OBB 파일은 대형 게임을 사이드로드하거나 XAPK 패키지에 번들로 포함할 때 발생합니다. 기기 공유 저장소의 /Android/obb/[package.name]/에 저장됩니다.
처리 방법
OBB 파일은 앱이 해당 파일을 찾을 수 있도록 올바른 디렉터리에 배치되어야 합니다. 파일 이름은 일반적으로 main.[version].[package.name].obb 또는 patch.[version].[package.name].obb 패턴을 따릅니다. OBB 추출기를 사용하여 XAPK 패키지에서 OBB 파일을 추출하세요.
DEX: Dalvik 실행 파일
DEX 파일에는 Android의 런타임 환경에서 실행되는 컴파일된 바이트코드가 포함되어 있습니다. APK 파일 내에 있지만 개발 및 디버깅 중에 독립적으로 존재할 수도 있습니다.
포함된 내용
DEX 파일에는 다음이 포함됩니다.
- Dalvik 명령어 형식으로 컴파일된 Java/Kotlin 바이트코드
- 문자열 상수 및 유형 정의
- 메소드 및 필드 참조
- 클래스 정의 및 해당 계층
기술적인 세부사항
단일 DEX 파일에는 65,536개의 메서드 참조 제한("64K 제한")이 있습니다. 이 제한을 초과하는 앱은 multidex라는 기술인 여러 DEX 파일(classes.dex, classes2.dex 등)을 사용합니다. 최신 빌드 도구는 이를 자동으로 처리합니다.
ODEX, VDEX 및 ART 파일
다음은 설치 중 또는 설치 후에 Android 런타임에서 생성된 DEX 파일의 최적화된 버전입니다.
- ODEX(최적화된 DEX): 자주 사용되는 방법에 대해 사전 컴파일된 기본 기계어 코드가 포함되어 있습니다. 사용 프로필을 기반으로 유휴 유지 관리 중에 생성됩니다.
- VDEX(검증된 DEX): 미리 계산된 확인 결과와 함께 확인된 DEX 바이트코드를 포함합니다. 이렇게 하면 재인증을 건너뛰어 후속 부팅 및 앱 실행 속도가 빨라집니다.
- ART(Android 런타임 이미지): 사전 초기화된 클래스 개체 및 힙 데이터가 포함되어 있습니다. 이를 통해 런타임은 시작 중에 일반 프레임워크 클래스에 대한 클래스 로드 및 초기화를 건너뛸 수 있습니다.
이러한 파일은 시스템에서 생성되며 일반적으로 사용자가 직접 상호 작용하는 파일이 아닙니다. /data/dalvik-cache/에 저장되거나 /data/app/의 APK와 함께 저장됩니다.
SO: 공유 객체(네이티브 라이브러리)
.so 확장자를 가진 파일은 특정 CPU 아키텍처용으로 컴파일된 기본 공유 라이브러리입니다. 여기에는 Dalvik/ART 런타임의 오버헤드 없이 프로세서에서 직접 실행되는 C, C++ 또는 Rust로 작성된 기계어 코드가 포함되어 있습니다.
아키텍처 변형
- armeabi-v7a, 32비트 ARM(대부분의 구형 장치)
- arm64-v8a, 64비트 ARM(대부분의 최신 휴대폰)
- x86, 32비트 Intel/AMD(일부 태블릿 및 에뮬레이터)
- x86_64, 64비트 Intel/AMD(Chromebook 및 에뮬레이터)
APK에 네이티브 라이브러리가 포함된 경우 대상 기기에 대한 올바른 아키텍처를 포함해야 합니다. 잘못된 아키텍처가 포함되면 앱이 UnsatisfiedLinkError와 함께 충돌합니다.
Android의 XML 파일
Android는 XML을 광범위하게 사용하지만 두 가지 형식으로 사용됩니다.
바이너리 XML
APK 파일 내에는 XML 리소스(레이아웃, 매니페스트, 문자열 파일)가 AXML이라는 컴파일된 바이너리 형식으로 저장됩니다. 이 형식은 텍스트 XML보다 구문 분석이 더 간단하고 빠릅니다. aapt2 또는 apktool와 같은 도구는 바이너리 XML을 다시 읽을 수 있는 텍스트로 디컴파일할 수 있습니다.
텍스트 XML
개발 중에 XML 파일은 표준 텍스트 형식입니다. 빌드 프로세스는 이를 APK에 포함하기 위해 바이너리 XML로 컴파일합니다. network_security_config.xml와 같은 구성 파일 및 res/ 디렉터리의 리소스 파일은 텍스트 XML로 시작됩니다.
ProGuard/R8 매핑 파일
Android 전용 형식은 아니지만 매핑 파일(mapping.txt은 난독화된 앱을 이해하는 데 중요합니다). 개발자가 R8과 같은 코드 축소 도구를 사용하면 클래스 및 메서드 이름이 짧고 의미 없는 식별자로 대체됩니다. 매핑 파일은 충돌 보고서를 읽는 데 필수적인 원본 이름에서 난독화된 이름 번역을 기록합니다.
Android 백업 형식(AB)
.ab 확장자를 가진 파일은 adb backup에서 만든 Android 백업 아카이브입니다. 여기에는 앱 데이터 디렉터리의 tar 아카이브(선택적으로 압축 및 암호화됨)가 포함되어 있습니다. 이 형식은 클라우드 기반 백업 솔루션을 위해 더 이상 사용되지 않지만 일부 백업 도구에서는 여전히 사용됩니다.
IMG 및 파티션 이미지
앱과 관련되지는 않지만 Android 시스템 이미지는 언급할 가치가 있는 여러 형식을 사용합니다.
- 시스템.img: Android 프레임워크와 사전 설치된 앱이 포함된 읽기 전용 시스템 파티션
- boot.img: Linux 커널 및 초기 램디스크가 포함되어 있습니다.
- 벤더.img: 하드웨어별 드라이버 및 펌웨어
- 슈퍼.img: 최신 장치(Android 10+)에 사용되는 동적 파티션 컨테이너
형식 비교표
다음은 주요 앱 배포 형식을 비교한 빠른 참조입니다.
- APK: 단일 파일, 직접 설치 가능, 범용(모든 구성 포함), 더 큰 크기
- AAB: 게시 형식은 직접 설치할 수 없으며 Play 스토어에서 처리해야 합니다.
- XAPK: 컨테이너(APK + OBB/분할), 설치 프로그램 또는 추출 필요, APKPure에서 사용됨
- APKS: 컨테이너(분할 APK), 번들 도구 형식, 설치 프로그램 또는 병합 필요
- APKM: 컨테이너(분할 APK), APKMirror 형식에는 설치 프로그램이 필요합니다.
올바른 도구 선택
작업하는 형식에 따라 적절한 도구가 달라집니다.
- XAPK가 있나요? XAPK-APK 변환기를 사용하여 설치 가능한 APK를 추출하세요
- AAB가 있나요? AAB에서 APK로 변환기를 사용하여 범용 APK를 생성하세요
- 분할 APK(APKS)가 있나요? APKS에서 APK로의 합병를 사용하여 결합하세요.
- APK를 확인해야 합니까? APK 검증자를 사용하여 서명을 확인하세요.
- XAPK의 OBB 파일이 필요합니까? OBB 추출기를 사용하여 확장 파일 압축 풀기
어떤 Android 패키지 형식을 사용해야 합니까?
Android 생태계의 다양한 파일 형식은 단순한 단일 파일 APK에서 정교한 모듈식 전달 시스템으로의 플랫폼 발전을 반영합니다. 각 형식은 특정 문제를 해결하기 위해 존재합니다. AAB는 다운로드 크기를 줄이고, XAPK는 다중 파일 앱의 배포를 단순화하며, OBB는 대규모 게임 데이터를 처리하고, 분할 APK는 장치별 최적화를 가능하게 합니다.
이러한 형식을 이해하면 앱을 사이드로드하든, 장치를 백업하든, 자체 애플리케이션을 개발하든 관계없이 실행하는 모든 Android 패키지를 처리할 수 있습니다. 중요한 점은 이러한 형식의 대부분은 궁극적으로 다양한 구성의 APK 파일을 보관하는 컨테이너이며 올바른 도구를 사용하면 언제든지 필요한 것을 추출할 수 있다는 것입니다.