2016-05-08 8 views
1

アプリが最新バージョンにアップグレードされたシナリオを確認してから、アクションを実行します。アプリのバージョンがユーザーの携帯電話で2.4であるとします。 Playストアから最新バージョン(2.5)にアップグレードします。アップグレード後に最初に実行されたかどうかを確認し、ダイアログを表示します。 (ここでは、最初の起動を確認するためにCheck if application is on its first runのソリューションを使用しています)アプリのアップグレード時にのみダイアログを表示

ただし、このようなシナリオを検証してから、Playストアにアップデートするにはどうすればよいですか。私が試したことはある:

  1. のAndroid Studioからデバッグ/リリースモードでの最新バージョンを実行します
  2. 手動ストアからアプリをインストール。

しかし、私は上記をやっているとき、私は次のエラーを取得: INSTALL_FAILED_UPDATE_INCOMPATIBLE

を私はまた私が持っている古いAPKからアプリをインストールしようとしましたが、同じエラーを取得し確認しながらアップグレード。

ユーザーがアプリを最新バージョンにアップグレードしたときにのみダイアログが表示されることを確認できる方法はありますか?

答えて

2

私は

(アンドロイドデータフォルダに存在)署名は(あなたの解除キーによって署名された)ストアバージョンとデバッグキーで署名されているスタジオ経営のバージョン間で同じではありませんので、あなたがこのエラーを取得していると思います

これはエラーに関するものですので、APKを店舗にアップロードする場合と同様に作成し、リリースキーストアで署名してから、デバイスにインストールしてください(adb installを使用するか、adbをプッシュしてからインストールしてください)。モバイル、またはAPKをモバイルメモリにコピーして、モバイルからインストールするなど)おそらく?

第2部分については、アプリの更新後に第1回のapp/detect first runを検出すると、その答えによって通知されたSharedPreferencesを使用できます。これはアプリケーションのバージョンによってリンクされたり影響を受けたりしないため、十分ではなく、アップグレード後に最初に実行されたものを検出するために必要なものです。

マニフェストファイルandroid:versionCodeに指定するアプリケーションのバージョンコード(整数)を取得し、バージョンをPlayStoreにアップロードするたびに増やす必要があります。

このコードは行いますあなたが必要なもの

//this code gets current version-code (after upgrade it will show new versionCode) 
PackageManager manager = this.getPackageManager(); 
PackageInfo info = manager.getPackageInfo(this.getPackageName(), 0); 
int versionCode = info.versionCode; 
SharedPreferences prefs = this.getSharedPreferences("yourAppName", Context.MODE_PRIVATE); 
if(prefs.getInt("last_version_code", -1) > 0){ 
    if(prefs.getInt("last_version_code", -1) != versionCode){ 
     //save current versionCode: 1st-run after upgrade 
     prefs.edit().putInt("last_version_code", versionCode).commit(); 

     //put show the dialog code here... 
    } //no need for else, because app version did not change... 
}else{ 
    //save current versionCode for 1st-run ever 
    prefs.edit().putInt("last_version_code", versionCode).commit(); 
} 

prefs.getInt("last_version_code", -1)はこれが最後のキーlast_version_codeの環境に値を保存してしまいます(あなたが上のダイアログを表示したいという活動/フラグメントでそれを使用することができます)値がない場合(1回目の実行時)はデフォルトで-1を返します。

ifは、preferences> 0(最初に実行されたものではない)から返された値を確認します。 と、マニフェストの値と同じではありません。それは

あなたはちょうどあなたがあなたのようにそれを使用したい場合は、それが数(最後に保存されたバージョンコード)

を返します。その値を取得しようとversionCodeので、次回の書き込み==-1の場合(UPGRADED)を意味します方法(複数の場所で呼ばれることもある) は、アプリが

public static boolean appWasUpdated(Context context){ 
    //this code gets current version-code (after upgrade it will show new versionCode) 
    PackageManager manager = context.getPackageManager(); 
    PackageInfo info = manager.getPackageInfo(context.getPackageName(), 0); 
    int versionCode = info.versionCode; 
    SharedPreferences prefs = context.getSharedPreferences("yourAppName", Context.MODE_PRIVATE); 
    if(prefs.getInt("last_version_code", -1) > 0){ 
     if(prefs.getInt("last_version_code", -1) != versionCode){ 
      //save current versionCode: 1st-run after upgrade 
      prefs.edit().putInt("last_version_code", versionCode).commit(); 

      return true; 
     } //no need for else, because app version did not change... 
    }else{ 
     //save current versionCode for 1st-run ever 
     prefs.edit().putInt("last_version_code", versionCode).commit(); 
    } 
    return false; 
} 

、ちょうど活動/フラグメントから

if(appWasUpdated(this)){ 
    showMyDialog(); 
} 
を、このメソッドを呼び出すに更新された場合はfalse/trueを返すためにメソッドを作成します
0
  1. あなたのAPKのversionCodeを増やしてください。 Store内のAPKのversionCodeよりも高い値にする必要があります。

  2. 同じキーストアでAPKに署名し、リリースビルドを行います。

  3. 古いAPKをストアからダウンロードします。

  4. 新しいリリースAPKを端末にプッシュします。 adb push myapp.apk /sdcard/0/adb installはこのシナリオでは機能しません。

  5. 新しいAPKを電話機からインストールします。既存のアプリを更新します。

関連する問題