4 ポイント 投稿者 GN⁺ 2024-09-23 | 1件のコメント | WhatsAppで共有
  • Flappy Bird、Java/KotlinなしのCのみ、軽量APK(armeabi-v7a +arm64-v8a) < 100キロバイト

歴史:

  • 2021年に rawdrawandroid リポジトリを発見
  • できるだけ小さいAPKサイズのシンプルなゲームを作りたいという動機が生まれる
  • Flappy Bird ゲームのクローンを作ることに決定
  • 最初の試みは C++ と ImGui を使って進めたが失敗
    • APKサイズは約1メガバイトだった
    • ゲームがクラッシュする可能性があった
    • APKには armeabi-v7a ライブラリのみが含まれていた
    • プロジェクト構造が複雑で整理されていなかった

動機:

  • 2024年9月14日、Raylib の Discord チャンネルで C# で Flappy Bird を作った人を見かける
  • C言語で Android 向けAPKサイズを100キロバイト以下にするというアイデアに挑戦したくなる
  • 今日ではAPKサイズが500メガバイトに達する状況で、100キロバイト以下に保つのは非常に難しい
  • 最終的には成功したが、簡単ではなかった

実装:

  • 最初は C で Hello World をコンパイルし、ライブラリをAPKにパッケージしてUSB経由でデバイスへ転送
  • ゲームのリソースの検討を開始
  • 当初は ogg 形式の音を使っていたが問題が発生し、その後 mp3 形式に変更して圧縮
  • BASS を使って音を再生しようとしたが重かったため、OpenSLES を学んで MP3 形式を問題なく読み込めるようにした
  • png 画像を使用し、stb_image より軽量な upng を見つけてデコードの問題を解決
  • OpenGL ES 2 + シェーダーでレンダリング、OpenSLES で音声再生、upng で png デコード、Android Native Activity を使用

ビルド:

  • Visual Studio 2022 をダウンロード
    • Visual Studio Installer を開く
    • "Edit" をクリック
    • C++ クラシック アプリケーション開発、C++ モバイル アプリケーション開発の項目を選択
  • Android Studio をダウンロード(apktool、sdk、ndk が必要)
    • NDK 25.2.9519653 をインストール(上位バージョンも使用可能)
  • プロジェクト設定は "Debug ARM" になっているが、build.bat でパスの修正が必要
  • CTRL + B でコンパイル

著作権:

  • 著作権は主張しない。ゲームとリソースの権利は DotGEARS にある

インスピレーション:

  • rawdrawandroid
  • Flapper
  • Raylib
  • ImGui

GN⁺ のまとめ:

  • このプロジェクトは、C言語で Android 向け Flappy Bird ゲームを作ろうとする挑戦的な試み
  • APKサイズを100キロバイト以下に保ちながら、ゲーム実装に成功
  • OpenGL ES 2、OpenSLES、upng などのさまざまな技術を使ってリソースを最適化
  • このプロジェクトは、ソフトウェアエンジニアに小型で効率的なゲーム開発に関する洞察を提供
  • 類似機能を持つプロジェクトとして Raylib と rawdrawandroid がある

1件のコメント

 
GN⁺ 2024-09-23
Hacker Newsの意見
  • App Storeに「10MB以下のアプリ」フィルターがあればいいのに

    • 小さいアプリのほうが高速で、広告やマイクロ課金も少ない
    • 3MBの温度計アプリのほうが、150MBの温度計アプリより満足感がある
  • なぜ人々がFlappy Birdをプレイするのかについて文献レビューを書いた経験の共有

  • Nimで似たようなプロジェクトを2020年に公開した経験の共有

  • コードは4k loc以下

    457 android_native_app_glue.c
    360 audio.c
    802 game.c
    201 init.c
    93 main.c
    39 mouse.c
    38 shaders.c
    229 texture.c
    1377 upng.c
    27 utils.c
    3623 total
    
  • Super Mario Brosは40KBだった

  • Android APKを作るにはJavaのグルーコードが必要だと思っていた

  • 1MB以下のAndroidアプリを見るのは本当にクール

    • 古いHTCでも実行できる
    • おめでとう
  • 「Floppy Bird」という名前にしていたらよかったかもしれない

    • 3.5インチのフロッピーディスクに収まる
  • 既存の膨れ上がったサードパーティ製コンポーネントではなく、「丁寧に作り込まれた」プログラム/ゲーム/アプリを見るのは新鮮で気持ちがいい

  • rawdrawandroidを使ってAndroid上でCアプリケーションを書く技術が、raylib(および他のCフレームワーク)でも使えるのか気になる

    • Termuxを通じてAndroid上でAndroid向けのC開発環境を使えるのか気になる