안드로이드 프레임워크는 앱이 실제로 만지는 API 표면과 시스템 서비스의 집합이다.[1] 앱은 [[android-os|안드로이드 (운영체제)]] 위에서 동작하지만, 프레임워크는 그 위에서 [[aosp|AOSP]]가 제공하는 공용 구성요소와 서비스 계약을 통해 앱 동작을 묶어 준다.[5]

1. 정의와 범위

프레임워크는 커널 자체가 아니라, 앱과 시스템이 만나는 상위 사용자 공간 계층이다.[5] 따라서 [[verified-boot|Verified Boot]]는 부팅 체인의 무결성을 보장하고, [[application-sandbox|Application Sandbox]]는 앱 간 격리를 강제하지만, 프레임워크는 그 위에서 어떤 API와 서비스가 앱에 노출되는지를 정한다.[5]

2. 앱이 만나는 API 계층

앱 개발자는 Activity, Service, BroadcastReceiver, ContentProvider 같은 구성요소를 통해 프레임워크와 대화한다.[1][2] AndroidManifest.xml은 이런 구성요소와 권한, 최소 API 수준을 선언하는 출발점이다.[2] 앱이 화면 전환이나 백그라운드 작업을 요청할 때도 실제 진입점은 프레임워크가 관리하는 생명주기 콜백이다.[1][2]

3. 시스템 서비스와 IPC

많은 프레임워크 기능은 시스템 서비스로 구현되며, 앱은 Binder IPC를 통해 이를 호출한다.[3] 예를 들면 ActivityManager, WindowManager, PackageManager, NotificationManager 같은 서비스가 앱 프로세스 밖에서 동작하고, 앱은 서비스의 프록시 API만 보게 된다.[1][3] 이 구조 덕분에 프레임워크는 앱별 권한과 상태를 중앙에서 조정할 수 있다.[1]

4. 실행 모델과 프로세스

Android는 기본적으로 앱마다 별도 Linux 프로세스를 사용하고, 필요할 때 시스템이 프로세스를 시작하거나 종료한다.[4] 각 앱은 자신만의 VM과 메인 스레드를 가지므로, 프레임워크는 UI 작업과 비동기 작업을 구분해 설계해야 한다.[4] 이런 실행 모델은 앱이 [[google-play|Google Play]]에서 배포되더라도 런타임 동작은 결국 프레임워크와 시스템 서비스가 정한다는 점을 보여 준다.[4]

5. AOSP와 주변 경계

[[aosp|AOSP]]는 프레임워크 구현의 출발점이고, 프레임워크는 그 안에서 공개 API와 내부 서비스 구현을 함께 담는다.[5] 반면 Google Play는 배포 채널이고, 보안 계층인 [[verified-boot|Verified Boot]][[application-sandbox|Application Sandbox]]는 프레임워크의 바깥 경계를 형성한다.[5] 이 문서를 읽을 때는 “앱이 부르는 API”와 “OS가 보장하는 안전성”을 분리해서 보는 것이 중요하다.[1][5]

6. 관련 문서

7. 인용 및 각주

[1] Android Developers Application fundamentals, Ddeveloper.android.com(새 탭에서 열림)

[2] Android Developers App manifest overview, Ddeveloper.android.com(새 탭에서 열림)

[3] Android Developers Services overview, Ddeveloper.android.com(새 탭에서 열림)

[4] Android Developers Processes and threads overview, Ddeveloper.android.com(새 탭에서 열림)

[5] Android Open Source Project Architecture overview, Ssource.android.com(새 탭에서 열림)