Android C++ でのリソースの操作

ndk を介して Android のリソースを操作するには – C++ にはいくつかのオプションがあります:

<オル>

  • AssetManager を使用して APK ファイルからリソースにアクセスする
  • インターネットからリソースをダウンロードし、アプリケーション ディレクトリに解凍し、標準の C++ メソッドを使用して使用します
  • 複合メソッド – AssetManager 経由で APK 内のリソースを含むアーカイブにアクセスし、それらをアプリケーション ディレクトリに解凍して、標準の C++ メソッドを使用して使用します
  • 次に、Flame Steel Engine ゲーム エンジンで使用される結合アクセス方法について説明します。
    SDL を使用すると、apk からリソースへのアクセスを簡素化できます。ライブラリは AssetManager への呼び出しをラップし、stdio (fopen、fread、fclose など) と同様のインターフェイスを提供します。

    SDL_RWops *io = SDL_RWFromFile("files.fschest", "r");
    
    

    APK からバッファにアーカイブをダウンロードした後、現在の作業ディレクトリをアプリケーション ディレクトリに変更する必要があります。追加のアクセス許可を取得せずにアプリケーションで使用できるようになります。これを行うには、SDL ラッパーを使用します。

    chdir(SDL_AndroidGetInternalStoragePath());
    
    

    次に、fopen、fwrite、fclose を使用して、バッファから現在の作業ディレクトリにアーカイブを書き込みます。アーカイブが C++ にアクセスできるディレクトリに配置されたら、解凍します。 ZIP アーカイブは、2 つのライブラリを組み合わせて使用​​して解凍できます。 minizip と zlib、最初のものはアーカイブの構造を操作でき、2 つ目はデータを解凍します。
    より制御しやすく移植を容易にするために、FSChest (Flame Steel Chest) と呼ばれる独自のゼロ圧縮アーカイブ形式を実装しました。この形式は、ファイルを含むディレクトリのアーカイブと解凍をサポートします。フォルダー階層はサポートされていないため、ファイルのみを操作できます。
    FSChest ライブラリのヘッダーを接続し、アーカイブを解凍します。

    #include "fschest.h" 
    FSCHEST_extractChestToDirectory(archivePath, SDL_AndroidGetInternalStoragePath()); 
    
    

    解凍後、C/C++ インターフェイスはアーカイブのファイルにアクセスできるようになります。したがって、エンジン内のファイルに関するすべての作業を書き直す必要はなく、起動段階でファイルの解凍を追加するだけで済みました。

    ソース

    https://developer.android.com/ndk/参照/グループ/アセット

    ソースコード

    https://gitlab.com/demensdeum/space-ジャガー アクション RPG
    https://gitlab.com/demensdeum/fschest

    Leave a Comment

    Your email address will not be published. Required fields are marked *