2011-12-06 17 views
3

私は、Windows/MacからAndroidにC++で書かれたかなり大きなゲームエンジンを移植しています。ゲームのための資産を読み込むための既存のコードがたくさんあります。さらに、ファイルシステムコール(ファイルが存在することを確認するためにstat'ing、ディレクトリ内のすべてのファイルとディレクトリを調べる)のかなりのコードがあります。ファイルシステムを経由してAndroid NDKのアセットにアクセスする

今、私はできるだけ早く何かを稼働させることに集中しているので、私はこれをたくさん書き直す必要はありません。既存の標準C++ファイルシステムAPIの使用を最小限に抑えて、ゲーム資産をデバイスに入れてアクセスする良い方法は何でしょうか?

すでにAsset Manager APIを使用して基本的なサポートが実装されていますが、これはファイルシステムコールをサポートしていないため、1MBのアセットサイズの制限がある程度私を苦しめてしまうのではないかと心配しています。

OBBも見ましたが、OBBファイルを作成するツールは、現在のSDK/NDKの一部ではないようです。さもなければ、それは完全であるように見える。

すべてのファイルをパッケージ化し、アプリを初めて実行したときにSDカードでファイルを抽出するのは恐ろしいことですか?あるいは、これに対処するより良い方法がありますか?

アップデート:私はまた、デバイスの広範な上で実行することができるというのは非常に心配していないよ、私は特に、おそらく10.1" サムスンギャラクシータブ、やや新しいタブレットで探しています

答えて

0

私たちは似たに走りました。私たちは(データファイルの重い)アプリケーションを開発する際に問題が発生し、APKを小さく保ち、最初にデータファイルをダウンロードすることになりました。どちらかの方法でダウンロードする必要がありますが、小さなAPKが動作します限られたデータプランや電話機でのインターネット接続が遅い場合は、コンピュータから直接ファイルをコピーする方法を試すことができます。

apps-for-androidの「Downloader」サンプルアプリ(混乱して「サンプル」に埋め込まれています)は、ほぼ完全に実装されたソリューションです。データファイルの詳細をプラグインし、残りの処理をするだけです。

+0

お返事ありがとうございます!私は古い携帯電話をサポートすることについてあまり心配していません(将来的に考えるべきことを知っておいても良いですが)。新しいタブレットモデルでこれを実行しようとしています。また、私は実際にJavaコードを必要としないソリューションを探しています。私が実装してきたネイティブ・アクティビティのC/C++だけです。 – matt

0

私はAndroidファイルシステムに多量のネイティブコードを入れることに依存するアプリを書いた。私はファイルを「リソース」としてAPKにパッケージ化することでこれを行いました。それらをSDカードにプッシュするのではなく、アプリケーションのプライベートネームスペース、I.Eに入れることができます。 /data/data/com.yourdomain.yourapp/nativeFolder。

詳細については、this questionへの回答を参照してください。

最初の実行時にパッケージを解凍するだけで簡単にパッケージ化することは簡単ですし、再度心配する必要はありません。また、それらはアプリケーションの名前空間の下にあるので、誰かがあなたのアプリを削除することを決定したときに削除する必要があります。

編集: このメソッドは、アプリのプライベートエリアに何かを配置するために使用できます。 /data/data/com.yourdomain.yourapp/

私の知る限り、アプリケーションはこのエリア内のすべてのフォルダとサブフォルダを作成するアプリケーションでなければなりません。幸いにもこれはかなり簡単です。たとえば、あなたのアプリがフォルダを作るようにするには:ほとんどのLinuxシェルと同様に動作します。私は資産フォルダを歩き、APKにパッケージングし、対応するディレクトリを作成し、すべてのネイティブファイルをそれらのディレクトリにコピーしました。

あなたが関心を持っているのは、限定されたAndroidシェルです。あなたが望むかもしれない多くのコマンドが存在しません。 stat for example isn't availableなので、あなたのネイティブコードがシステムコールを作ることができなければ、これはすべて間違っているかもしれません。

+0

私はネイティブコードを抽出しようとしているわけではありません。コンパイルしてロードするだけで、簡単にアクセスできるようにしたいゲームのアセット(XML記述、アートアセットなど)です。そのタイプのデータに適した別のフォルダがありますか? – matt

+0

私の更新を見てください。あなたは、アプリのフォルダ内の任意の場所を解凍してアクセス可能にすることができます。 statはアンドロイドシェルが知っているコマンドではありません。これがプロジェクトの概念タイプ1の証明であれば、おそらくアンドロイド用にコンパイルしてsystem/binに収めることができます。 – sarwar

関連する問題