HW_chick hacker
[AOS] APK 구조와 핵심 파일 이해 본문
✅ 1. APK 파일 구성
안드로이드 앱의 확장자로서 Android Application Package 의 줄임말이다. 앱을 설치하는 역할을 하며, ZIP 형식으로 압축되어 있다.
app.apk
├── AndroidManifest.xml
├── classes.dex
├── lib/
├── res/
├── assets/
├── META-INF/
├── resources.arsc/
| 구성요소 | 설명 |
| AndroidManifest.xml | - 앱의 이름, 버전, 권한 등 앱의 핵심 정보와 컴포넌트(액티비티, 서비스 등) 등록 파일 - 바이너리 형태의 xml로 인코딩됨 |
| classes.dex | - 앱의 자바/코틀린 코드가 컴파일된 Dalvik Executable 파일(Dalvik/ART에서 실행) - 안드로이드에서 앱이 달빅 가상머신에서 구동되기 위한 바이너리 실행 파일의 포맷 |
| res/ | - 앱 UI 레이아웃, 이미지, 문자열 등 각종 리소스 (1) Drawable : 프로젝트에 활용될 이미지들 (2) Layout : 안드로이드 화면을 담당하는 xml들의 집합 (3) Values dimens.xml : 크기에 관련된 설정 파일로 텍스트 크기, 도형 크기 등을 정의 string.xml : 문자열에 관련된 설정 파일 styles.xml : 화면 디자인 관련 설정을 정의, 색상, 액션바 유무, 배경 색 등등 |
| assets/ | - 앱에서 직접 불러올 수 있는 원본 데이터 파일(텍스트, 폰트 등) - 용량이 큰 파일들을 관리하는 곳 |
| lib/ | - 일반적인 라이브러리 파일(*.sp) |
| META-INF/ | - 인증 서명과 관련한 정보가 담겨있는 디렉터리 |
| resources.arsc | - 컴파일된 리소스(문자열, 테마 등), 런타임 최적화용 - res의 정보가 기록되어 있음. |
✅ 2. AndroidManifest.xml 해석
AndroidManifest.xml 파일은 apk 파일의 루트 디렉토리에 위치한 XML 파일로, 앱의 매니페스트 정보를 포함한다. 매니페스트 파일은 앱의 구성, 권한, 액티비티, 서비스, 리시버 등의 정보를 정의한다.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<application>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
| 항목 | 의미 |
| <application> | 앱 전체 설정 (이름, 아이콘, 테마 등) |
| <activity> | 실행 가능한 화면 정의 |
| <service> | 백그라운드 작업 정의 |
| <receiver> | 브로드캐스트 리시버 |
| <uses-permission> | 시스템 권한 요청 (예: 인터넷, 카메라) |
✅ 3. META-INF/
META-INF 디렉토리에는 apk 파일의 메타데이터가 포함되며 이 디렉토리에는 다음과 같은 파일이 포함된다.
- MANIFEST.MF : 파일 해시값 및 메타데이터
- CERT.RSA / CERT.DSA : APK 서명 정보
- CERT.SF : 서명된 파일의 무결성 정보
✅ 4. lib/
앱에서 사용하는 네이티브 라이브러리(.so) 파일이 저장되는 디렉터리로, CPU 아키텍처별 하위 폴더(예: armeabi-v7a, arm64-v8a, x86)로 구분됩니다.
lib/armeabi-v7a/
lib/arm64-v8a/
lib/x86/
✅ 5. JAVA, class, smali, DEX, APK란?
| 항목 | 의미 |
| JAVA (.java) | 개발자가 작성하는 소스 코드 |
| class (.class) | 자바 컴파일러가 생성한 바이트코드 |
| DEX (.dex) | 여러 .class 파일을 합쳐 Dalvik/ART에서 동작 가능한 바이너리로 변환된 파일 |
| smali (.smali) | DEX(바이트코드)를 사람이 읽을 수 있게 바꾼 저수준 어셈블리 스타일 코드 |
| APK | 파일들, 리소스, 매니페스트 등을 ZIP 압축해 서명한 최종 앱 패키지 |
'Mobile > AOS' 카테고리의 다른 글
| [AOS] ADB 명령어 및 설치 방법 (2) | 2025.08.13 |
|---|---|
| [AOS] APK 디컴파일 & 리패키징 (3) | 2025.08.13 |
| [AOS] 모바일 앱(app) APK 추출 (0) | 2025.08.13 |
| [AOS] 단말기 루팅 실습 (Samsung Galaxy S20) (6) | 2025.08.07 |
| [AOS] 단말기 루팅 정리 (1) | 2025.08.07 |