0

これは難しい問題です。ある時点でアプリに含まれていた SDK があるとします。このアプリはかなり前から市場に出回っていますが、SDK は最新バージョンから統合されています。そのため、顧客が SDK を含むアプリにアクセスするには、次の 2 つの方法があります。

  1. その人は以前にアプリを持っていなかったので、最新バージョンをダウンロードします
  2. その人は、SDK なしで古いバージョンのアプリを既にインストールしており、SDK を使用して新しいバージョンに更新しています。

アプリが初めて開かれたとき、SDK はアプリがインストールされたか更新されたかをどのように判断できるのでしょうか?

成功せずに私が考えたいくつかのこと:

  • アプリのインストール時に作成され、その時点から変更されていないファイルを検索できます。最終変更フィールドを調べるだけで、アプリがいつインストールされたかがわかります。lib-file は data/data/ で見つけましたが、アプリが更新されるたびに更新されるため、使用できません。編集: ファイルが変更されていないことをインポートする理由は、ファイルの作成時間にアクセスする方法がないためです。そのため、最終変更 == 作成時間であることを確認する必要があります

  • SDK は Android 1.6 と互換性があるはずなので、API 9 より前であり、PackageInfo.firstInstallTime フィールドにアクセスできません。

  • APK自体を見るためにデータ/アプリにアクセスできるとは思いませんが、できたとしても、アプリを更新するたびにAPKが置き換えられるため、last-modifiedは最終更新の時間を教えてくれます。インストールではありません。

ご協力いただきありがとうございます。

4

1 に答える 1

0

いくつかのことが思い浮かびます:

バージョン番号を共有設定に保存します。最初のインストールと呼び、値が設定されていない場合は、現在のバージョン番号を設定します (これは最初のインストールでのみ発生し、おそらく Application クラスで発生します)。後で設定を確認して、現在のバージョンと比較できます。アプリの更新を投稿するときにバージョン コードをインクリメントする必要があるため、更新時にまだ最初のバージョン コードがあり、それを現在のものと比較します。

ファイルが存在しない場合は、SDCard にファイルを作成します (mnt/sdcard/Android/data/com.my.package.name/ にあるのが最適です)。バージョンコードなどで名前を付けます。必要に応じて、バージョン コードと時刻が作成されます。そのフォルダーの良い点は、アプリを更新すると保持されますが、アンインストールすると削除されることです (短所: API レベル 8 以降で機能を利用できると思います。確認する必要があります)。

ファイルと同じですが、電話メモリの data/data/com.package.name フォルダーにあります (データベースもそこに保持され、ルート化されていない限り、それにアクセスできるのはアプリだけです)。アンインストールし、更新時に保持します。

データベース ヘルパーを使用して、バージョン コードとタイムスタンプを内部に格納します。DB ヘルパーには、データベースのバージョンを追跡する方法があります。

于 2012-07-23T14:28:30.177 に答える