覆盖app并删除Android上的数据库

时间:2014-12-11 20:41:39

标签: java android sqlite

我正在创建多个应用,每个应用都有相同的包,所以如果我安装一个,那么它应该覆盖另一个,即其中一个应用只能安装在手机中。这可能听起来很奇怪,但这是应用程序需要的方式。我已准备好所有应用程序,但我有这个问题,我想在每次安装时删除数据库表,所以如果我安装第二个应用程序,它会覆盖第一个但数据库不会被删除。我无法更改VersionCode,因为我无法使用旧版本覆盖,因此所有应用程序都具有相同的包和相同的版本代码。

基本上它应该在应用程序的每次首次运行时都要求输入密码,然后我创建一个表并将其存储在那里,以便对该用户进行身份验证,因此对于每个新应用程序,这必须再次完成,但在更新时,表仍然存在那导致没有提示密码。现在我如何从数据库中检测和删除表。即使我使用共享偏好而不是数据库,它们仍保留在更新中,我甚至无法检测应用程序是否因版本代码相同而更新。

如果有人能给我一个解决方案或提示,我将非常感激。

谢谢,

Hamza Manzoor

2 个答案:

答案 0 :(得分:3)

您可以在SharedPreferences中存储应用程序的单独版本值,并根据列表或数值检查其中的值,并根据结果进行决定。 您也可以使用Android的内置版本(不是nummrical值,而是字符串值)。

如果您使用SharedPreferences解决方案,则可以使用一种算法来获取版本值。假设一个应用程序编号为“A”,另一个应用程序编号为“B”,另一个应用程序编号为“C”。然后你将应用程序的真实版本附加到那个,即“A1.0”或“B2.4”,......(你明白了)。这样Android就不知道当前正在安装什么应用程序。

每当你启动一个应用程序时,只需检查第一个值。如果这与您知道的应用程序的正常值不同,则它已被替换。否则,请检查版本值,看看是否需要更新数据库。

//我可以添加: 当然这可能是bug的来源,但是如果你小心这应该可行。如果有人有更好的解决方案,请发帖。

答案 1 :(得分:1)

如果您的应用具有相同的版本代码,则不会通过Google Play机制覆盖\升级。只有通过" adb install -rd"或者一些支持root的侧载器。

恕我直言,正确的行动方式是

  • 像往常一样在每次升级时增加versionCode和DB SCHEMA_VERSION
  • 在你的DB类(扩展SQLiteOpenHelper)的onUpgrade()方法中你应该检查数据库版本并相应地在Prefs中设置一些变量,稍后在Activity中你将能够触发密码对话框(在onCreate上打开数据库) (),检查onResume()上的prefs。