Android 전용 컴포넌트
Compose Multiplatform은 Jetpack Compose를 기반으로 구축되었습니다. Compose Multiplatform의 대부분의 기능은 모든 플랫폼에서 사용할 수 있습니다. 하지만 Android 타겟에서만 사용할 수 있는 일부 API와 라이브러리가 있습니다. 이는 해당 API가 Android 전용이거나, 아직 다른 플랫폼으로 포팅되지 않았기 때문입니다. 이 페이지에서는 Compose Multiplatform API 중 이러한 부분들을 요약하여 설명합니다.
가끔 Jetpack Compose 문서나 커뮤니티에서 작성된 아티클에서 Android 타겟에서만 사용할 수 있는 API를 발견할 수 있습니다. 이를
commonMain코드에서 사용하려고 하면, IDE가 해당 API를 사용할 수 없다고 알려줄 것입니다.
Android 전용 API
Android 전용 API는 Android에 특화되어 있으며 다른 플랫폼에서는 사용할 수 없습니다. 이는 다른 플랫폼에는 Android에서 사용하는 특정 개념이 필요하지 않기 때문입니다. 이러한 API는 대개 android.* 패키지의 클래스를 사용하거나 Android 전용 동작을 구성합니다. 다음은 Android 전용 API의 몇 가지 예시입니다.
android.context.Context클래스LocalContext및LocalConfiguration변수android.graphics.BitmapFactory및android.graphics.Bitmap클래스ImageBitmap.asAndroidBitmap()함수android.app.Activity클래스android.app.Activity.setContent()함수ComposeView클래스LocalView변수Modifier.pointerInteropFilter()함수- Hilt 의존성 주입(dependency injection) 라이브러리
일반적으로 이러한 API 부분을 공통화(commonize)해야 할 강력한 이유가 없으므로, androidMain에만 유지하는 것이 가장 좋습니다.
시그니처에 Android 클래스가 포함된 API
Compose Multiplatform API 중에는 시그니처에 android.*나 androidx.*(androidx.compose.* 제외)를 사용하지만, 그 동작은 다른 플랫폼에도 적용 가능한 부분들이 있습니다:
- 리소스 관리: 리소스 관리를 위한
stringResource,animatedVectorResource,Font, 그리고*.R클래스. 자세한 내용은 이미지 및 리소스를 참고하세요. - 내비게이션(Navigation). 자세한 내용은 내비게이션 및 라우팅을 참고하세요.
ViewModel클래스. 자세한 내용은 멀티플랫폼 ViewModel을 참고하세요.- 페이징(Paging) 라이브러리.
ConstraintLayout레이아웃.- 지도(Maps) 라이브러리.
- 프리뷰(Preview) 도구 및 데스크톱 애플리케이션 프리뷰를 위한 플러그인.
WebView클래스.- 아직 Compose Multiplatform으로 포팅되지 않은 기타 Jetpack Compose 라이브러리.
이들은 복잡도와 수요에 따라 향후 commonMain으로 포팅될 수 있습니다.
권한(permissions), 디바이스(블루투스, GPS, 카메라), 입출력(IO, 네트워크, 파일, 데이터베이스)과 같이 애플리케이션 개발 시 자주 사용되는 API는 Compose Multiplatform의 범위를 벗어납니다.
시그니처에 Android 클래스가 포함되지 않은 API
일부 API는 시그니처에 android.* 또는 androidx.* 클래스가 포함되어 있지 않고 다른 플랫폼에도 적용 가능함에도 불구하고 Android 타겟에서만 사용할 수 있는 경우가 있습니다. 그 이유는 대개 구현 시 플랫폼별 특성을 많이 사용하며, 다른 플랫폼을 위한 별도의 구현을 작성하는 데 시간이 걸리기 때문입니다.
일반적으로 이러한 API들은 Android 타겟용 Jetpack Compose에 도입된 후 Compose Multiplatform으로 포팅됩니다.
Compose Multiplatform 1.9.3에서 다음 API 부분들은 commonMain에서 사용할 수 없습니다:
Modifier.imeNestedScroll()함수Modifier.systemGestureExclusion()함수Modifier.magnifier()함수LocalOverscrollConfiguration변수AnimatedImageVector.animatedVectorResourceAPI- material3-adaptive 라이브러리
- material3-window-size-class 라이브러리
Android API 포팅 요청
Android에서 포팅 가능한 각 API에 대해 Compose Multiplatform YouTrack에 열려 있는 이슈(open issue)가 있습니다. Android에서 포팅 및 공통화가 가능해 보이는 API가 있는데 관련 이슈가 없다면, 새로 생성해 주세요.
