ndk を介して Android のリソースを操作するには – 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