我编写了该应用程序的 Beta 版。它将可以通过网络下载(我不会将其发布到 Play 市场)。当新版本发布时,是否可以在不访问 Play Market 的情况下更新此应用程序?
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);
}
是的,这是可能的,这大致是你可以做的:
获取当前应用程序版本代码
PackageInfo packageInfo = getPackageManager().getPackageInfo(context.getPackageName(), 0); int curVersionCode = packageInfo.versionCode;
有一个服务器托管apk文件并创建一个简单的纯文件,其中仅包含一个整数,表示最新的应用程序版本代码。
当应用程序启动时(或当您想要检查更新时),从服务器检索最新的版本代码(即通过 HTTP 请求)并将其与当前应用程序版本进行比较。
如果有新版本,请下载apk并安装(将为用户提示一个对话框)。
编辑:
您可以为此使用@Blumer 的代码。
这是可能的,但请记住,用户必须在其设置中启用“允许安装非市场应用程序/未知来源”。
仅供参考,我刚刚在http://blog.vivekpanyam.com/evolve-seamless-deploy-android-apps-to-users/?hn读到了这个
Evolve 是一个供 Android 开发人员使用的库,可让他们部署新版本的应用程序,而无需通过 Google Play 或要求用户下载更新。它通过使用反射和动态字节码生成来“欺骗”Android 运行新代码。
虽然它是 alpha 版,但它似乎可以通过很多箍来实现。我怀疑它是否值得,除了恶意软件..
- 应用内更新是一项Play Core 库功能,可提示活跃用户更新您的应用。运行 Android 5.0(API 级别 21)或更高版本的设备支持应用内更新功能,并且需要您的应用使用Play Core 库版本 1.5.0 或更高版本。此外,仅 Android 移动设备、Android 平板电脑和 Chrome OS 设备支持应用内更新。
以下是更新流程的类型
- 灵活更新(示例屏幕)
- 即时更新(示例屏幕)