본문으로 건너뛰기

© 2026 Molayo

Zenn헤드라인2026. 05. 21. 22:45

Antigravity를 사용하여 Android 앱을 만들어 보았다

요약

Google I/O 2026에서 발표된 Antigravity 2.0을 사용하여 프롬프트만으로 Android 앱을 빌드하고 실행하는 과정을 소개합니다. 구현 계획 수립부터 Gradle 빌드, 에뮬레이터 실행까지의 자동화된 워크플로우를 다룹니다.

핵심 포인트

  • Antigravity 2.0은 프롬프트 기반의 Android 앱 생성 및 빌드 도구임
  • 구현 계획(implementation_plan.md)을 먼저 작성하여 사용자 승인 후 진행
  • Navigation3 및 Compose 기반의 현대적인 프로젝트 구조 자동 생성
  • 빌드 후 에뮬레이터 또는 실제 기기에서 즉시 실행 가능

안녕하세요!

주식회사 TRUSTDOCK Verification 사업개발부 Core eKYC 그룹에서 모바일 앱용 SDK를 개발하고 있는 후루카와(a.k.a. 후루신)입니다.

(사명은 「트러스트독」이라고 읽습니다)

Google I/O 2026에서 Antigravity 2.0이 발표되었습니다.
Antigravity를 사용하면 프롬프트(Prompt)로 Android 앱을 작성, 빌드, 실행할 수 있습니다.

사용 방법은 Codelab이 있으니 직접 만져보시면 좋을 것 같습니다.

시험 삼아 Hello World를 만들어 보고 싶어서, 다음과 같은 프롬프트로 실행했습니다.

화면 상에 「Hello, World!」라고 표시하는 앱을 구현해 줘.
이 문자열은 화면 중앙에 표시됩니다.

먼저 앱의 디렉터리(Directory)를 어디에 둘지를 지시합니다. 이것은 평소 여러분이 Android 앱 프로젝트를 두는 디렉터리 경로를 전달해 주면 됩니다.

프롬프트를 실행하면 다음과 같이 처리가 시작됩니다.

먼저 implementation_plan.md에 구현 계획이 작성됩니다.

이를 보고 괜찮아 보인다면 Proceed(진행) 시킵니다.

구현이 끝나면 ./gradlew assembleDebug가 실행되고, 에뮬레이터(Emulator)가 기동되어 apk가 실행되었습니다.

이때, 실제 기기가 USB 디버깅 등으로 연결되어 있다면 실제 기기에서 실행할 수도 있습니다.

출력된 내용을 살펴봅시다.

디렉터리와 파일 구성은 다음과 같았습니다.

처음부터 Repository나 Navigation이 준비되어 있는 점이 인상적이네요. 화면 전환도 없고 데이터 처리도 없는 앱인데 말이죠. Antigravity가 기본적으로 준비해 주는 걸까요.

그럼 코드를 살펴보겠습니다.

먼저 MainActivity입니다.

class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
...

줄바꿈이 없는 점이 신경 쓰였지만 그건 제쳐두고, 표시하는 내용은 MainNavigation이라는 Composable 함수로 나뉘어 있네요. 이것은 별도의 파일로 되어 있습니다.

@Composable
fun MainNavigation() {
val backStack = rememberNavBackStack(Main)
...

놀랍습니다. Navigation3를 사용하고 있네요.

다만, toml을 보니 Navigation3의 버전이 조금 오래되었습니다.

nav3Core = "1.0.1" # 최신은 1.1.2
androidx-navigation3-runtime = { module = "androidx.navigation3:navigation3-runtime", version.ref = "nav3Core" }
androidx-navigation3-ui = { module = "androidx.navigation3:navigation3-ui", version.ref = "nav3Core" }

다음으로 MainScreen을 살펴봅시다.

@Composable
fun MainScreen(
onItemClick: (NavKey) -> Unit,
...

Preview도 제대로 준비되어 있네요!

다만 인자(Argument)로 전달된 List는 사용되지 않았습니다. 출력 결과로서도 프롬프트에서 「화면 상에 「Hello, World!」라고 표시하는 앱을 구현해 줘.」라고 했기 때문에 사용되지 않은 것이 정답입니다.

따라서 만약 표시하고 싶은 내용이 있다면 사용할 수 있겠지만, 과잉 구현(Over-implementation)된 느낌이 들었습니다.

그 외에는 ViewModel이 제대로 준비되어 있거나, UiState도 준비되어 있습니다.

sealed interface MainScreenUiState {
object Loading : MainScreenUiState
data class Error(val throwable: Throwable) : MainScreenUiState
...

UiState로서 로딩 중 (loading) 상태를 고려하고 있으며, Repository도 인터페이스 (Interface)로서 제대로 준비되어 있었습니다.

interface DataRepository {
val data: Flow<List<String>>
}
...

요약

출력된 코드는 다음과 같습니다.

코드 전체를 살펴보니 "과연, 우선 간단한 앱을 만들고 싶을 때는 Antigravity에 제대로 지시를 내리면 제대로 앱을 만들어 줄 것 같구나"라는 느낌을 받았습니다.

전체적으로 Android Developer의 공식 권장 아키텍처 (Recommended Architecture)를 따른 구현으로 되어 있어, "Android 엔지니어라면 보면 바로 알 수 있는 구현"이라는 인상을 줍니다.

현재 개인적으로 만들어 보고 싶은 앱이 있어서, 전부 Antigravity에게 만들게 하는 것도 괜찮을 것 같다는 생각이 들었습니다.

업무에서는 Claude Code에 구현을 맡기고 있지만, 프로토타입 (Prototype) 정도라면 Antigravity도 충분히 가능성이 있어 보입니다.

Discussion

AI 자동 생성 콘텐츠

본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0