내 게임을 네이티브 Android 앱으로
JumPHP는 게임을 브라우저 없이 동작하는 진짜 Android 앱으로 만들어 줘요. PHP 8.5, SDL, OpenGL ES, OpenAL이 컴퓨터에서처럼 앱 안에서 실행돼요. 오프라인에서도 동작하고, Android 8.0 이상의 휴대폰(ARM)과 태블릿에서 쓸 수 있어요.
내 컴퓨터의 JumPHP 프로젝트(내 컴퓨터에서), Docker가 필요하고, Play 스토어에 올리려면 Google Play 개발자 계정(한 번만 25달러)이 필요해요. Claude가 전부 대신 해 줄 수 있어요. "내 게임을 네이티브 Android 앱으로 만들어 줘"라고 부탁하세요.
다른 방법인 Trusted Web Activity는 Chrome에서 게임 페이지를 열어요. 더 가볍지만 네트워크와 사이트가 필요해요. 같은 패키지와 같은 키를 쓰면 네이티브 앱이 Play 스토어에서 TWA를 새 버전처럼 대체해요.
명령 하나
bin/jumphp android mon-jeu
- 처음 실행하면 앱의 패키지 이름(
io.github.vous.mon_jeu: 게시한 뒤에는 바꿀 수 없어요)을 물어보고,~/.jumphp/android/keys/에 업로드 키를 만들어요(게임에 TWA가 있으면 그 키를 써요). 키를 백업하세요. 키는 git에 절대 들어가지 않아요. - 워크플로
.github/workflows/android.yml을 프로젝트에 넣고, 내가 동의하면 키를 GitHub 저장소의 시크릿에 올려요(암호화되며 워크플로만 읽을 수 있어요). - 버전을
games/mon-jeu/android/app.json에 기록하고 커밋한 뒤 내가 동의하면 푸시해요. - GitHub가 앱을 만들고(처음에는 약 25분, 이후에는 약 8분: PHP와 라이브러리가 캐시돼요) 내 키로 서명한
.apk(휴대폰용)와.aab(Google Play용)가 담긴 저장소의 release를 게시해요. 명령이 이 파일들을games/mon-jeu/dist/android-native/에 내려받아요.
이후 버전: bin/jumphp android mon-jeu --version-name 1.1(버전 번호는 매번 1씩 올라가요). GitHub 없이 하려면 --local을 쓰면 내 컴퓨터의 Docker에서 앱을 만들어요.
휴대폰에서 시험하려면 .apk를 휴대폰에 보내 열거나("출처를 알 수 없는 앱 설치"를 허용하세요), adb install mon-jeu-1.0.apk를 실행하세요.
터치 컨트롤
엔진이 브라우저에서처럼 화면 컨트롤을 직접 그려요. 십자키(또는 조이스틱), A, B, START가 있고, 양옆에 검은 띠가 있으면 그곳에 표시돼요. 브라우저와 마찬가지로 game.yaml에서 설정해요.
game:
touch: { pad: stick, a: Space, b: Escape, labels: { a: SAUT } } # pad: stick = 조이스틱, 아니면 십자키
Android의 뒤로 가기 버튼은 Esc와 같아요. 컴퓨터에서 컨트롤을 보려면 JUMPHP_TOUCH_CONTROLS=1 bin/jumphp run mon-jeu를 실행하세요(마우스로 조작해요).
앱 안에서
- Android용으로 컴파일한 PHP 8.5에 JumPHP의 확장(SDL과 이미지·사운드·폰트 모듈, OpenGL, OpenAL, gd, openssl, mbstring…), SDL2, OpenAL Soft가 들어 있어요. 컴퓨터에서 게임을 실행하는 것과 같은 구성이에요.
- 내 게임은 각 버전을 처음 실행할 때(1~2초) 앱의 비공개 저장소에 풀려요. 저장 파일과 옵션은 업데이트해도 그대로 남아요.
- 이름, 아이콘(PWA의 아이콘인
assets/icon.png), 화면 방향(게임의 화면 비율)은game.yaml에서 가져와요.
Play 스토어에서
자세한 내용(키, 휴대폰에서 시험하기, Play Console의 각 항목 입력, 심사, 이후 버전, 함정)은 **Play 스토어에 게시하기, 단계별 안내**에 있어요. 요약하면 다음과 같아요.
- Play Console에서 앱을 만들고(이름, 언어, "게임", 무료) 선언 항목을 채우세요. 개인정보처리방침(게임이 아무것도 수집하지 않는다고 적은 페이지), 콘텐츠 등급, 타겟층, 광고 없음 등이에요.
- Google Play 앱 서명: Google이 휴대폰용 앱에 서명하는 키를 보관해요. 내 키는 업로드가 내게서 왔음을 증명할 뿐이에요(분실하면 Google이 교체해 줄 수 있어요).
- 내부 테스트: 테스트 및 출시 > 내부 테스트 > 새 버전 만들기 >
.aab업로드 > 저장 > 검토 > 출시. 테스터를 추가하면 Google의 링크로 설치해요. - 스토어 등록정보: 설명, 512 × 512 아이콘(
bin/jumphp build가 만들어요:dist/web/icon-512.png), 1024 × 500 이미지, 스크린샷 2장 이상(bin/jumphp shot mon-jeu또는 휴대폰에서 촬영). - 프로덕션: 테스트가 좋으면 그 버전을 승격하세요. Google이 심사해요(몇 시간에서 며칠). 새 개인 계정은 먼저 14일 동안 테스터 12명이 필요해요.
알아 두면 좋은 점
- HTTPS가 동작해요(
$engine->http(),wss://로 하는 온라인 게임). 인증서는 게임과 함께 들어 있어요. - 앱 크기는 30~40 MB예요(프로세서 두 종류를 위한 PHP와 라이브러리).
기술적인 자세한 내용은 내 프로젝트의 docs/android-native.md에 있어요.