Notice
Recent Posts
Recent Comments
Link
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

HW_chick hacker

[AOS] APK 구조와 핵심 파일 이해 본문

Mobile/AOS

[AOS] APK 구조와 핵심 파일 이해

{{HW}} 2025. 8. 11. 19:21

 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 압축해 서명한 최종 앱 패키지