0

私は現在、Android ゲームを開発しています。私の目標は、ゲームの無料/デモ版を作成して、ユーザーが試せるようにすることです。しかし、デモのセーブゲームが完全版に自動的にインポートされることも望んでいます。

私がアプリケーションのプライベート ストレージに保存するセーブゲームは、基本的に複数の Java オブジェクトをマッピングするJSON文字列です。ユーザーは好きなだけ「新しいゲーム」を作成でき、開始した各ゲームには「自動保存」ファイルと「手動保存」ファイルがあります。すべてのファイルを追跡するために、ファイル名といくつかの追加情報 (プレイヤー名など) を含むリストがあります。

基本的に、セーブゲームを扱う小さなファイルがたくさんあります。これは最もエレガントなアプローチではないかもしれませんが、非常にうまく機能します。

ここに私の質問があります:ユーザーがデモ版でゲームを開始したとしましょう (したがって、デモ版のプライベート ストレージに 3 つのファイルが保存されます)。フルバージョンからこれらのファイルにアクセスするにはどうすればよいですか?

2 つのバージョンに大きな違いはありません。デモ版の制限にもかかわらず、それらは実際には同じです。しかし、同じコード ベースを使用することになります。

このフォーラムや他の場所でこの問題についてかなりの質問があったことは知っていますが、適切な解決策を見つけることができませんでした. 私が見つけることができたのは、次のいずれかです。

  • 誰でも読み取り可能なストレージ(SD カードなど)にファイルを保存する、または
  • SharedPreferencesの使用

しかし、私はユーザーがセーブゲームを読み取れるようにしたくない (または、ゲームを台無しにする可能性があるため、それを変更することさえできません)。200 行のコード (JSON に変換された多くの Java オブジェクト) と、これらすべての値とオブジェクトを SharedPreferences に使用されるある種のキーと値の構造にマッピングすることは、私にはまったく不可能に思えます。

これはすべて台無しですか、それとも誰かアイデアがありますか?

お時間を割いていただきありがとうございます。あなたのアイデアをお待ちしております。

  • クリストフ
4

3 に答える 3

2

したがって、2つのソリューションのみが表示されます。

1 つ目は WorldReadable SharedPreferences です。あなたはJsonStringsを保存すると言いました。したがって、json-stringsからオブジェクトを作成できる場合(私はこの種の作業にGsonを使用するのが好きです)、それらをさらに下にマッピングする必要はありません。これらの文字列を単純に保存できますSharedPreferences 内。

2 番目の方法は、ContentProviders を気にしてContentResolverインターフェイスを実装することです。これはあなたのユースケースで想像できる最も安全な方法ですが、そのためには多くのことを実装する必要があります

于 2012-12-07T15:07:04.390 に答える
1

避けられないもの

避けられないことが 2 つあります。

  • ユーザーが電話をルート化することを決定した場合、ユーザーが電話にアクセスするのを防ぐことはできません。それを難し​​くするために何をしてもかまいません。
  • ルート化されていないデバイスで 2 番目のアプリが同じデータ (保存されたゲーム) にアクセスする場合、アプリの外部からユーザーがアクセスするための場所が常に存在します。

難しくするために何ができますか

  • ファイルまたは共有設定に保存する前に、データを暗号化 (つまり、デバイスの IMEI を使用) できます (変更を防止するためのハッシュと一緒に)。
  • データを SQLite データベースに保存し (変更するにはより多くの知識が必要です)、保存する前に暗号化することができます (さらに困難です)。
  • SQLCipherを使用して、暗号化されたデータベースに格納できます (暗号化は透過的です)。

よろしく。

于 2012-12-07T15:24:47.823 に答える
0

共有コンテンツ プロバイダーを使用できます (コンテンツ プロバイダーに関する一般的なドキュメントはこちらhttp://developer.android.com/guide/topics/providers/content-providers.html ) 。

次に、マニフェストでフラグ android:exported="true" を使用してエクスポート可能として宣言する必要があります

例:

<provider android:name="[yourpackage_here].SavegameProvider"
 android:authorities="[yourpackage_here].SavegameProvider"
 android:exported="true" />

新しいアプリ内で開くことができます。

于 2012-12-07T15:23:03.767 に答える