有没有办法在Android上自动更新应用程序?

时间:2010-06-16 22:57:39

标签: android updates

我正在开发一种很可能预装在设备上的应用程序。它也可以在Google Play上播放。有没有办法更新那些未通过Google Play下载的实例,因为Google Play不会通知用户有关更新的信息。

我正在考虑,suggested here,尝试定期联系我的网站,当有更新时,请下载它。

有没有办法自动执行此更新,甚至是静默更新,以便用户无需执行任何操作(如手动运行包)。或者,当我的网站显示更新可用时,通过Google Play向用户提供更新,即使它未通过市场安装(编辑:此Google播放选项会更好,因为用户不必检查“允许安装非市场来源“。)

10 个答案:

答案 0 :(得分:43)

我有同样的问题,现在我检查我的应用程序的开头是否在我的配置xml中有新版本。

我将实际版本与代码“< app_version> 1.1< / app_version>”进行比较我的configuration.xml 如果用户继续升级

,我会问自定义的AlertDialog
Intent intent = new Intent(Intent.ACTION_VIEW ,Uri.parse(myapk_link));
startActivity(intent);    

下载后,用户必须手动运行包。

如果您从Android市场中选择更新,请使用:

Intent intent = new Intent(Intent.ACTION_VIEW ,Uri.parse("market://details?id=com.package.name"));
startActivity(intent);  

com.package.name必须是您应用的“套餐”

Intent intent = new Intent(Intent.ACTION_VIEW ,Uri.parse("market://search?q=" + APP_NAME));
startActivity(intent);  

答案 1 :(得分:8)

找到了一种有效的方法。为搜索我的应用的市场触发意图。

使用OpenIntent Newsreader测试,因为很容易找到旧版本.apk。 Market找到一个应用程序,当用户点击安装时,将旧版本替换为Market中的版本。我认为对于用户来说,比手动下载.apk并运行它更容易。

Intent intent = new Intent(Intent.ACTION_VIEW ,Uri.parse("market://search?q=" + APPLICATION_NAME));
startActivity(intent);  

答案 2 :(得分:7)

  

是否有办法更新未通过Google Play下载的实例,因为Google Play不会通知用户有关更新的信息。

老问题,新答案:

在深入研究完全相同的问题(在设备上预装应用程序,如何通过Google-Play提供更新)后,我在support.google.com上找到了此信息*:

  

如果符合以下条件,Google Play可以管理预装应用程序的更新:

     
      
  • 预加载的应用需要位于系统分区
  •   
  • 预加载的应用需要免费
  •   
  • 预加载的应用需要使用与Google Play中发布的应用相同的签名进行签名
  •   
  • 预装和更新的应用的包名称必须相同
  •   
  • 更新后的应用的版本代码需要大于预装应用
  • 的版本代码   

*截至2015-04-13

答案 3 :(得分:4)

  

我正在开发一个应用程序   很可能会预先安装   设备

然后,您需要与设备制造商交谈并向他们询问您的问题。鉴于他们的设备和将分发它的运营商,没有其他人能够告诉你什么是不可能的。答案将在很大程度上取决于他们如何创建固件,您的应用程序是固件的一部分还是“安装”为普通应用程序,他们与运营商的安排是对于固件更新,您甚至可能无法对此事进行投票。

答案 4 :(得分:2)

这里是最新版本更新的选项

https://developer.android.com/guide/app-bundle/in-app-updates#update_readiness

尝试使用该google库从应用程序进行更新

// Obtain a reference to the nHrs0 member
val nHrs0Member = Program::class.members.find { it.name == "nHrs0" }

// Since it is a property (var), we can and must cast it to
// KMutableProperty to use it
val nHrs0Property = nHrs0Member as KMutableProperty

// Kotlin properties are not really JVM fields. They consists
// of a getter (for 'val' and 'var') and a setter (only for
// 'var'). So to set this property, we need to obtain a reference
// to the setter
val nHrs0Setter = nHrs0Property.setter

// Create an instance to perform our operations on
val p = Program()

// Use our setter to set the property "nHrs0" on
// instance 'p' to 5
nHrs0Setter.call(p, 5)

// Prove that the property was set
println("p.nHrs0=${p.nHrs0}") // Prints p.nHrs0=5

我希望这会帮助任何人

答案 5 :(得分:1)

如果在设备上捆绑应用程序的任何人都能正确处理它,那么应用程序仍然会有市场链接(即使是系统应用程序),如果有新版本,Market会提示用户升级它。毕竟,这正是预装在手机上的GMail这样的应用所发生的事情。

答案 6 :(得分:0)

您无法自动安装或升级软件包。只有Android Market能够做到这一点(即它默默地自我更新)。

您当然可以下载软件包并触发Intent进行安装,但用户必须启用“允许非市场应用”选项,他们仍需手动批准安装/升级。

可能需要调查的地方是谷歌地图如何做到这一点。这通常是预先安装的,但我相信它总是在Android Market应用中显示为更新。 packages.xml或清单中是否有特殊标志,我不知道。

答案 7 :(得分:0)

有一项很好的服务可以帮助您的应用自我更新。看看https://www.pushlink.com

在此产品中,有一种NINJA模式,允许在没有用户交互的情况下执行更新。

对于其他"模式",启用"安装非市场应用"仍然需要。如果未启用,安装过程将要求它并将用户重定向到应用程序设置,之后,用户可以安装该应用程序。

答案 8 :(得分:0)

如果您可以将应用程序签名为系统应用程序,则可以完全自动更新应用程序。我们为特定硬件编写了一个应用程序,我们创建了一个制造商为我们签名的更新应用程序。更新应用程序在设备启动时运行,检查应用程序的当前版本和新版本,并在必要时安装新版本。

该用例将是一个自助服务终端应用,在一个品牌和型号的平板电脑上,没有Google Play。

答案 9 :(得分:0)

Google在2018年Android开发者峰会上宣布了面向开发人员的android应用内更新api,因此您可以在此处阅读整个故事并就此问题进行更新。Android in-app update api details