アプリケーションのベータ版を作成しました。Webからダウンロードできます(Playマーケットには公開しません)。新しいバージョンがリリースされるときに、Playマーケットにアクセスせずにこのアプリケーションを更新することは可能ですか?
5 に答える
絶対。ただし、アプリがサーバーにホームコールするためのメカニズムを構築する必要があります。新しいバージョンのアプリがあるかどうかを確認し、ある場合は、アプリをプルダウンしてインストールします。更新をプルダウンする必要があると判断したら、次のAsyncTaskのようなものでそれを行うことができます。
protected String doInBackground(String... sUrl) {
String path = "/sdcard/YourApp.apk";
try {
URL url = new URL(sUrl[0]);
URLConnection connection = url.openConnection();
connection.connect();
int fileLength = connection.getContentLength();
// download the file
InputStream input = new BufferedInputStream(url.openStream());
OutputStream output = new FileOutputStream(path);
byte data[] = new byte[1024];
long total = 0;
int count;
while ((count = input.read(data)) != -1) {
total += count;
publishProgress((int) (total * 100 / fileLength));
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
} catch (Exception e) {
Log.e("YourApp", "Well that didn't work out so well...");
Log.e("YourApp", e.getMessage());
}
return path;
}
// begin the installation by opening the resulting file
@Override
protected void onPostExecute(String path) {
Intent i = new Intent();
i.setAction(Intent.ACTION_VIEW);
i.setDataAndType(Uri.fromFile(new File(path)), "application/vnd.android.package-archive" );
Log.d("Lofting", "About to install new .apk");
this.context.startActivity(i);
}
はい、可能です。おおまかにできることは次のとおりです。
現在のアプリケーションのversionCodeを取得します
PackageInfo packageInfo = getPackageManager().getPackageInfo(context.getPackageName(), 0); int curVersionCode = packageInfo.versionCode;
apkファイルをホストするサーバーを用意し、最新のアプリケーションバージョンコードを表す整数を1つだけ含む単純なプレーンファイルを作成します。
アプリが起動したら(または更新を確認するときはいつでも)、サーバーから(つまり、HTTPリクエストを介して)最新のversionCodeを取得し、現在のアプリのバージョンと比較します。
新しいバージョンがある場合は、apkをダウンロードしてインストールします(ユーザーにダイアログが表示されます)。
編集:
これには@Blumerのコードを使用できます。
可能ですが、ユーザーは設定で「非マーケットアプリケーション/不明なソースのインストールを許可する」を有効にする必要があることに注意してください。
参考までに、これについてはhttp://blog.vivekpanyam.com/evolve-seamlessly-deploy-android-apps-to-users/?hnで読んだばかりです。
Evolveは、Androidデベロッパー向けのライブラリであり、Google Playを経由したり、ユーザーにアップデートのダウンロードを依頼したりすることなく、アプリの新しいバージョンをデプロイできます。これは、リフレクションと動的バイトコード生成を使用して、Androidを「だまして」新しいコードを実行させることで機能します。
そのアルファは、しかし、それは多くのフープを介して可能であるようです。悪意のあるソフトウェアを除いて、その価値があるかどうかは疑問です。
アプリ内アップデートの公式サポート/ライブラリGooglePlayコア
- アプリ内アップデートは、アクティブユーザーにアプリのアップデートを促すPlayCoreライブラリ機能です。アプリ内アップデート機能は、Android 5.0(APIレベル21)以降を実行しているデバイスでサポートされており、アプリでPlayCoreライブラリバージョン1.5.0以降を使用する必要があります。さらに、アプリ内アップデートは、Androidモバイルデバイス、Androidタブレット、およびChromeOSデバイスでのみサポートされます。
以下は更新フローの種類です
- 柔軟な更新(サンプル画面)
- 即時更新(サンプル画面)