ネイティブ コード、つまり C++ ファイルから画像やサウンド ファイルなどのリソースに直接アクセスする方法を知りたいです。実際、asset_manager_jni.h メソッドの使用に役立つ例を探しています。
提案を探しています。前もって感謝します。
よろしくお願いします。
アトゥル・プラカシュ・シン
ネイティブ コード、つまり C++ ファイルから画像やサウンド ファイルなどのリソースに直接アクセスする方法を知りたいです。実際、asset_manager_jni.h メソッドの使用に役立つ例を探しています。
提案を探しています。前もって感謝します。
よろしくお願いします。
アトゥル・プラカシュ・シン
さて、あなたはstdio.hにアクセスできます。したがって、既知の場所(SDカードなど)にある場合は、それをパスとして使用できます。また、ネット上には、stdio(fopen、fcloseなど)を使用するためのホットに関するチュートリアルがたくさんあります。
問題は、apk自体にバンドルするリソース(res / rawまたはassetsのいずれか)が、インストール後もapk内にとどまるということです。さらに悪いことに、デフォルトでは圧縮されているため、読み取ることができません。これは回避できます。最も簡単な方法は、アセットの名前を.mp3拡張子に変更することです(または他にもあります)。これは、実際にmp3ファイルであるかどうかに関係なく、デフォルトでは.mp3が圧縮されていないためです。使用できる拡張機能は他にもあります。また、すべてのアセットに最後に.mp3を付けたくない場合に、データを圧縮しないようにツールに指示する方法もあります。
したがって、ここではいくつかの選択肢があります。
最初の実行時にネットからリソースをダウンロードし、目立たない場所に配置し(ダウンロードを実行するときに、SDKからそのパスを取得するのがおそらく最善です)、それを使用します。
リソースをapkに保存します(assetsフォルダーの.mp3拡張子を覚えておいてください)。最初の実行時に、アクセスできる(ユーザーを煩わせない)フォルダーにアセットを抽出し、そこからリソースを使用します。
(私がすること)あなたのリソースをapk(再び.mp3)に保存し、jniを使用してapkから直接読み取ります。はい、jniは少し遅いですが、とにかくファイルシステムからそれほど多くを読み取ってはいけません。確かに、パフォーマンスが重要なポイントではありません。Nvidiaには、使用できる非常に便利なコードがいくつかあります。ここで見つけることができます。覚えていれば、サンプルコードにあります。libsフォルダー内には、apk自体からも読み取ることを除いて、stdioに一致する使用可能ないくつかの優れた汎用ライブラリがあります。
それが役に立てば幸い。
私はこのトリックを一度使用しました:
mv $file lib/lib%${file}.so