2011-07-19 4 views
4

ネイティブコード、つまりC++ファイルから画像、サウンドファイルなどのリソースに直接アクセスするにはどうすればよいか知りたい。実際に私はasset_manager_jni.hメソッドの使用に役立つ例を探しています。Android-NDKを使用してネイティブコードからリソース(サウンド、画像など)に直接アクセスするにはどうすればよいですか?

提案を探しています。前もって感謝します。

アトゥールプラカシュ・シン

答えて

6

さて、あなたは、stdio.hのへのアクセス権を持っています。したがって、既知の場所(SDカードなど)にある場合は、そのパスとして使用できます。そして、stdio(fopen、fcloseなど)を使いこなすためのネットに関するチュートリアルがたくさんあります。

問題は、apk自体にバンドルしたリソース(res/raw、またはassetsのいずれか)は、インストール後にapk内にとどまります。もっと悪いのは、デフォルトでは、圧縮されて読みにくくなることです。これは避けることができます。最も簡単な方法は、アセットの名前を.mp3拡張子(または他のものもあります)に変更することです。これは、mp3ファイルであるかどうかにかかわらず、.mp3が圧縮されていないためです)。あなたが使用できる他の拡張機能や、最後に.mp3を使ってすべてのアセットに名前を付けるのが好きでない場合は、データを圧縮しないようツールに指示する方法があります。

だから、あなたはここにいくつかの選択肢があります。

  1. は(それはときに、SDKからそのパスを取得するには、おそらく最善です控えめな場所に入れて、あなたの最初の実行でネットからあなたのリソースをダウンロードダウンロードを行います)、それを使用してください。

  2. リソースをapkに保存します(.mp3拡張子、assetsフォルダを覚えておいてください)。最初の実行時には、アクセス権を持つフォルダにアセットを抽出し(ユーザーには迷惑をかけないでください)、そこからリソースを使用します。

  3. (私がやること)あなたのリソースをapk(.mp3)に再度保存し、jniを使ってapkから直接読み込みます。はい、jniは少し遅いですが、とにかくファイルシステムからそれほど多くのことを読んではいけません。確かにパフォーマンスの重要なポイントではありません。 Nvidiaには役に立つ便利なコードがあります。hereがあります。覚えていればサンプルコードにあります。 libsフォルダの中には、apkから読み込む以外は、stdioにマッチする良い汎用ライブラリがあります。

希望します。いいですね

mv $file lib/lib%${file}.so 
+0

: – Emmanuel

1

私は一度、このトリックを使用しました。私が今必要とするのは、写真、ビデオ、音楽などを見つけることができるディレクトリ構造です。電話で写真を撮ると、通常どのフォルダに移動するのですか?
関連する問題