Android部署APK,重新安装而不是更新

时间:2012-04-08 18:57:56

标签: android

我想发送我的apk的更新,但我做了一些数据库更改,这将使应用程序崩溃。

因此用户必须卸载然后重新安装它。有没有办法部署apk,所以这是自动完成的。

或清除先前安装的应用数据。

4 个答案:

答案 0 :(得分:2)

您可以提供onUpgrade()方法然后执行alter table SQL请参阅:http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html,这需要您更改数据库版本号,以便在应用启动时检测到。如果您的架构确实不同并且您想要保存现有数据,那么您应该将数据复制到临时表,删除并创建架构并将其重新复制。

答案 1 :(得分:0)

没有人会忽略/不会阅读您在“新内容”部分中提供的任何说明,而且您无法自动执行此操作。

您应该在应用内优雅地升级数据库。 OpenHelper类提供了执行此操作所需的所有功能。

http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html

答案 2 :(得分:0)

正如其他答案所示,您应该覆盖onUpate()方法以获得完美的用户体验。重新安装和清理很好......对我来说就像1980风格和Android的设计方式我几乎不怀疑它的支持。

因此,为了回答原始问题,我不认为可以通过其他应用程序管理应用程序。虽然我对执行此任务的任何方法缺乏了解,但我认为这不再是基础结构的问题。

Android是基于unix的系统,每个应用程序都在此系统中注册为用户。在此环境中很好地设置了用户权限,这意味着另一个用户(应用程序)无法轻松访问其他应用程序的数据,因此无法注入/劫持/优化代码。 例外是例如外部存储如SD卡。在这里,具有正确权限的每个应用程序都可以随心所欲地转发。

然而,回到实际系统,有一些方法可以授予应用程序访问外部包的权限。然而,根据我的阅读,似乎更多的是设计用于共享特定信息和设置。我怀疑那里会发现卸载程序。

在完成之前,我想到了你的新应用程序可能会要求旧版本删除自身而不启动除非已经完成的想法。对于这种方法,您可以在此处找到更多信息。 Is it possible to programmatically uninstall a package in Android

尽管如此,我还建议您使用onUpdate()解决方案,因为它是系统设计的方式,因此用户的体验将更加令人满意并且不那么复杂。

答案 3 :(得分:0)

我有类似的问题。在我的情况下,我的应用程序从资产加载了一个数据库,并在升级数据库时没有改变。我要解决的是改变数据库文件名(在assets文件夹中)并且工作得很好,就像我做了另一个db一样。这不是修复它的最佳方法,但它解决了这个问题。