Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何自动更新应用程序;安卓_Android_Android Intent_Installation - Fatal编程技术网

Android 如何自动更新应用程序;安卓

Android 如何自动更新应用程序;安卓,android,android-intent,installation,Android,Android Intent,Installation,我正在构建一个启动器应用程序,我想通过空中更新。我创建了一个服务类,它成功地检查和比较应用程序版本号,以确定是否需要更新。如果比较的apk版本高于当前版本,我会从云服务器下载apk,然后打开对话框进行安装 我面临的冲突是更新不会安装。我收到一个错误。已安装具有冲突签名的同名现有包。我开始怀疑我的方法是否正确。我如何解决这个问题?这就是我正在做的 确认更新后,我会显示一个对话框,按下确认按钮后,我会使用意图解析应用程序URL Intent i = new Intent(Intent.ACTION_

我正在构建一个启动器应用程序,我想通过空中更新。我创建了一个服务类,它成功地检查和比较应用程序版本号,以确定是否需要更新。如果比较的apk版本高于当前版本,我会从云服务器下载apk,然后打开对话框进行安装

我面临的冲突是更新不会安装。我收到一个错误。已安装具有冲突签名的同名现有包。我开始怀疑我的方法是否正确。我如何解决这个问题?这就是我正在做的

确认更新后,我会显示一个对话框,按下确认按钮后,我会使用意图解析应用程序URL

Intent i = new Intent(Intent.ACTION_VIEW);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.setData(Uri.parse(appUrl));
startActivity(i);
finish();
这实际上发布了一个通知,我必须单击并按install on。一旦我这样做了,它就会尝试安装,但随后给出了冲突签名的错误信息


理想情况下,我只想安装它而不必看到通知。提前感谢。

您的设置几乎正确,但还应设置数据类型:

i.setType("application/vnd.android.package-archive")
另外,不要在startActivity之后调用finish。这是不必要的,并且可能会导致具有新意图的问题

签名冲突是另一个问题。看见您尝试安装的APK使用与当前安装的密钥不同的密钥进行签名


最后,没有用户的显式交互就无法安装APK,当然,除非您有root用户。这是出于安全考虑。

我在直接从Android调试桥部署时看到了相同的签名错误。我认为您在这种方法中不会成功,因为:

Android安全始终需要用户授权才能安装更新,除非您是根用户,或者是系统的一部分,如Google Play Store auto update。 Google play总是要终止运行进程才能更新它。如果您的服务和应用程序实际上是独立的安装,即两个APK,那么这可能是可以的。 我在ADB中收到的相同签名错误通常是当系统要求我完全卸载原始签名应用程序时。不能同时安装具有相同签名的两个应用程序;某些东西正在触发Android不执行同一软件包的“升级”。 以下是执行升级的允许方式:
您不必使用Playstore或任何其他应用程序托管服务来管理应用程序升级。您的用户应该在android手机上启用:从未识别的来源安装

对于自动升级,您必须发布具有相同签名的所有APK。如果您只是从Eclipse构建并运行应用程序,那么在DIST文件夹中生成的APK文件将使用调试密钥(每台机器的默认密钥)进行签名

现在,如果您从不同的机器构建相同的代码,调试键值将不同,您将得到错误:在安装新APK时,已安装具有相同名称且签名冲突的现有包

以下是一些解决方案:

始终从同一台机器上释放自动升级的APK这绝对是不可能的 用相同的签名签署所有APK。在Eclipse中:右键单击项目>Android工具>导出已签名的应用程序包
让我试试这个。我认为你和@Forgen都有正确的答案和建议。让我看看这些东西。我试试这个。我从未想过要签署apks,因为这是一个无法通过谷歌下载的启动程序。它被认为是一个操作系统。让我试试这个。