개인프로젝트/IronBird

[IronBird #9] Android 빌드 + 실기기 프로파일링 (Galaxy S23+)

Client Side 2026. 6. 8. 00:16

IronBird 개발일지 #9

Android 빌드 + 실기기 프로파일링 (Galaxy S23+)

Android NDK · APK 패키징 · 실기기 수치 측정 · PC vs 모바일 비교

🎯 목표

PC에서 개발한 IronBird를 Android 기기에서 실행하고, 실기기에서 프로파일링 수치를 측정한다. PC 수치와 비교해 모바일 최적화 효과를 검증한다.

테스트 기기: Galaxy S23+ (SM-S916N) · Android 빌드 타겟: arm64-v8a · 텍스처 포맷: ETC2

🔧 Android 빌드 설정

항목 설정값
Android NDK r27c (UE5.7 요구사항)
텍스처 포맷 ETC2 (범용 Android)
화면 방향 Portrait (세로 고정)
텍스처 스트리밍 풀 r.Streaming.PoolSize=0 (자동)
렌더링 API Android Multi (OpenGL ES3.2 + Vulkan)

🔥 트러블슈팅

문제 1. NDK 버전 불일치로 빌드 실패

원인: Android Studio가 설치한 NDK r30이 UE5.7 허용 범위(r27c~r28c)를 초과했다.

해결: SetupAndroid.bat 실행으로 r27c 설치 후 Project Settings에서 NDK 경로를 r27c로 직접 지정.

C:\Program Files\Epic Games\UE_5.7\Engine\Extras\Android\SetupAndroid.bat

문제 2. Platform Android is not a valid platform to build

원인: UE5 엔진에 Android 플랫폼 지원 파일이 설치되지 않았다. NDK와 별개로 Epic Games Launcher에서 추가 설치가 필요하다.

해결: Epic Games Launcher → UE 5.7 옵션 → 대상 플랫폼 → Android 체크 → 설치 (약 9GB).

문제 3. 모바일에서 게임오버 터치 입력 안됨

원인: PC에서는 GetMousePosition으로 좌표를 가져왔지만 모바일 터치는 다른 입력 경로를 사용한다.

해결: BindTouch로 터치 좌표를 받아서 버튼 Rect와 비교하는 방식으로 변경.

// 터치 입력 처리 추가
void OnTouchPressed(ETouchIndex::Type FingerIndex, FVector Location)
{
  float TouchX = Location.X;
  float TouchY = Location.Y;
  // 버튼 Rect와 비교
}

문제 4. 첫 실행 시 간헐적 크래시

원인: 첫 실행 시 기기에서 셰이더를 컴파일하면서 메모리 spike 발생. 두 번째 실행부터는 캐시된 셰이더를 사용해 정상 작동.

결론: 데모 시연 시 사전에 한 번 실행해두면 문제없음.

📊 실기기 프로파일링 결과

측정 방법: Development 빌드 콘솔(stat fps / stat unit)로 실기기에서 직접 측정

항목 PC (Before) 모바일 S23+ 목표
FPS 56.91 59.40 ✅ 30fps 이상
Game ms 18.01ms 3.79ms ✅ -
Draw ms 0.00ms 3.92ms -
GPU Time 3.34ms 7.84ms -
Draws 252 34 ✅ 100 이하
메모리 4.70GB 490MB ✅ 1.5GB 이하

핵심 결과: PC에서 Draws 252였던 것이 모바일에서 34로 측정됐다. PC stat 수치가 모바일 실제 렌더링 구조를 반영하지 못한다는 것을 확인했다. 모바일 최적화는 반드시 실기기에서 검증해야 한다.

💡 배운 것

• Android 빌드는 NDK 버전과 엔진 플랫폼 파일 두 가지가 모두 맞아야 한다. 하나만 설치해서는 빌드가 안 된다.

• PC stat 수치와 모바일 실측 수치는 완전히 다르다. PC Draws 252가 모바일에서 34로 나왔다. PC에서 최적화 효과가 미미해도 모바일에서 효과가 클 수 있다.

• 터치 입력은 마우스 입력과 경로가 다르다. GetMousePosition 대신 BindTouch로 별도 처리해야 한다.

• 첫 실행 셰이더 컴파일은 모바일 개발의 공통 이슈다. 데모 시연 전 사전 실행으로 캐시를 만들어두는 것이 필요하다.

• Android Multi 빌드로 OpenGL ES3.2와 Vulkan을 동시에 지원할 수 있다. 기기가 자동으로 지원하는 렌더러를 선택한다.

🏁 IronBird 시리즈 마무리

포스팅 핵심 내용
#0~1 프로젝트 셋업, 플레이어 이동 + 터치 입력
#2~3 배경 스크롤, Object Pool (Game ms -25%, FPS +27%)
#4~5 적 스폰 시스템, 보스 3페이즈
#6~7 메인화면 + 점수 시스템, BGM + 이펙트 + 완성도
#8~9 최적화 시도 + Android 빌드 + 실기기 검증

추가 예정: Google Play Store 출시 진행 중. 심사 완료 후 링크 업데이트 예정.