GameActivity Android Game Development Kit에 포함되어 있음
GameActivity
는 애플리케이션의 C/C++ 코드에서 앱 주기 명령어, 입력 이벤트, 텍스트 입력을 처리하는 데 있어 Android 게임을 지원하도록 설계된 Jetpack 라이브러리입니다. GameActivity
는 NativeActivity
의 직접적인 하위 요소이며 유사한 아키텍처를 공유합니다.
위의 다이어그램과 같이 GameActivity
는 다음 기능을 실행합니다.
- 자바 측 구성요소를 통해 Android 프레임워크와 상호작용
- 앱 주기 명령어, 입력 이벤트, 입력 텍스트를 네이티브 측에 전달
- C/C++ 소스 코드를 다음 세 가지 논리적 구성요소로 모델링
- GameActivity의 JNI 함수. GameActivity의 자바 기능을 직접 지원하고 이벤트를
native_app_glue
의 대기열에 추가합니다. native_app_glue
. 자체 네이티브 스레드(애플리케이션의 기본 스레드와 다름)에서 대부분 실행되고 루퍼로 작업을 실행합니다.- 애플리케이션의 게임 코드.
native_app_glue
내에서 대기열에 추가된 이벤트를 폴링하고 처리하며native_app_glue
스레드 내에서 게임 코드를 실행합니다.
- GameActivity의 JNI 함수. GameActivity의 자바 기능을 직접 지원하고 이벤트를
GameActivity
를 사용하면 핵심 게임 개발에 집중할 수 있고 JNI 코드를 처리하는 데 과도한 시간을 소비하지 않아도 됩니다.
NativeActivity
에 이미 익숙하다면 GameActivity
와 NativeActivity
의 주요 차이점은 다음과 같습니다.
GameActivity
는SurfaceView
로 렌더링되므로 게임이 다른 UI 구성요소와 훨씬 더 쉽게 상호작용할 수 있습니다.- 터치 및 키 입력 이벤트의 경우
GameActivity
에는NativeActivity
에서 사용하는InputQueue
와는 별도로android_input_buffer
인터페이스를 사용하는 완전히 새로운 구현이 있습니다. GameActivity
는AppCompatActivity
의 파생 클래스로, 다른 Jetpack 구성요소를 원활하게 사용할 수 있도록 합니다.ActionBar
,Fragment
등을 모두 사용할 수 있습니다.GameActivity
는 GameTextInput 라이브러리를 통합하여 텍스트 입력 기능을 추가합니다.GameActivity
에서 파생된 앱은 C/C++ 코드의 세 가지 부분을 모두 라이브러리 하나에 빌드해야 합니다. 반면NativeActivity
의 JNI 함수는 프레임워크의 일부입니다(항상 OS에 의해 로드됨). 따라서native_app_glue
와 애플리케이션의 C/C++ 코드만 라이브러리 하나에 빌드되어야 합니다.NativeActivity
는 Android 프레임워크의 일부이며 출시 주기(일반적으로 연간)를 따릅니다.GameActivity
는 출시 주기(일반적으로 격주)가 훨씬 더 잦은 Jetpack 라이브러리의 일부입니다. 새로운 기능과 버그 수정이 훨씬 빠르게 제공될 수 있습니다.
버전 위치
GameActivity
라이브러리는 다음 채널에서 사용할 수 있습니다.
- Android Jetpack 라이브러리의 일부로 사용 가능(권장)
- zip 패키지로 사용 가능. AGDK 다운로드 페이지에서 다운로드할 수 있습니다.
- AOSP 소스 코드로 사용
C/C++ 코드는 모든 출시 채널에서 Prefab 형식을 사용하여 소스 코드로 제공됩니다. GameActivity 버전 1.2.2는 정적 라이브러리를 배포에 추가합니다. 이 버전부터는 소스 코드 대신 정적 라이브러리를 사용하는 것이 좋습니다.
Jetpack 라이브러리 및 AGDK zip 패키지의 내용
Jetpack 라이브러리와 AGDK zip 패키지 채널에서 GameActivity는 AAR과 함께 출시됩니다. 이 AAR은 다음과 같은 주요 요소로 구성되어 있습니다.
- 자바 코드용 JAR 파일
- C/C++ 정적 라이브러리
game-activity_static
. GameActivity 버전 1.2.2 이상에 포함되어 있습니다. - C/C++ 소스 코드(
/prefab
폴더 아래)
이 페이지에서 연결된 통합 안내에서는 개발자가 빌드 시스템에서 Prefab를 사용할 수 있다고 가정합니다. 그러지 않은 경우에는 prefab/modules/game-activity/include
폴더에 포함된 소스 코드를 빌드 시스템에 복사하여 필요한 통합 단계를 실행할 수 있습니다. Android Jetpack 라이브러리의 androidx
아래에 버전과 관련된 유사한 파일 구조가 있습니다. 기본적으로 Gradle은 캐시 디렉터리(~/.gradle/caches/...)에 AAR의 압축을 해제합니다. C/C++ 소스 코드는 prefab/modules/game-activity/include
를 검색하고 원하는 출시 버전에서 위치를 선택하여 찾을 수 있습니다.
Jetpack 라이브러리를 사용한 통합에 관한 안내는 GameActivity 시작하기를 참고하세요.
AGDK 라이브러리 zip 패키지의 경우 다음 단계에 따라 C/C++ 코드를 가져옵니다.
- 다운로드한 패키지의 압축을 풉니다.
- 압축을 푼 패키지에서 GameActivity-release.aar의 압축을 풉니다.
- 다음을 포함하여
prefab/modules/game-activity/include
하의 모든 C/C++ 소스 코드를 찾아서 복사합니다.GameActivity
의game-activity
관련 C/C++ 코드GameTextInput
의game-text-input
관련 C/C++ 코드
AOSP 소스 코드의 내용
AOSP에는 항상 최신 소스 코드가 포함되어 있습니다. 빌드 안내에 따라 자체 버전을 만들거나 소스를 빌드 환경에 직접 통합합니다. C/C++ 소스 코드는 Jetpack 라이브러리와 AGDK zip 패키지의 파일 구조와 비슷한 구조로 저장됩니다.
통합 가이드
다음 가이드를 따라 GameActivity
를 애플리케이션에 통합하세요.
추가 리소스
GameActivity
에 관해 자세히 알아보려면 다음을 참고하세요.
- GameActivity 및 AGDK 출시 노트
- GameActivity에서 GameTextInput 사용
- NativeActivity 이전 가이드
- GameActivity 참조 문서
- GameActivity 구현
의견
GameActivity 관련 버그를 신고하거나 새로운 기능을 요청하려면 GameActivity Issue Tracker를 사용하세요.