Java 覆盖应用程序并删除Android上的数据库

Java 覆盖应用程序并删除Android上的数据库,java,android,sqlite,Java,Android,Sqlite,我正在创建多个应用程序,每个应用程序都有相同的软件包,因此如果我安装了一个应用程序,那么它将覆盖另一个应用程序,即其中一个应用程序只能安装在手机中。这听起来可能很奇怪,但这正是应用程序需要的方式。我已经准备好了所有的应用程序,但是我有一个问题,我想在每次安装时删除数据库表,所以如果我安装第二个应用程序,它会覆盖第一个应用程序,但数据库不会被删除。我无法更改版本代码,因为我无法用旧版本覆盖,因此所有应用程序都具有相同的软件包和版本代码 基本上,它应该在应用程序的每次第一次运行时要求输入密码,然后我

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

基本上,它应该在应用程序的每次第一次运行时要求输入密码,然后我创建一个表并将其存储在那里,以确保该用户已通过身份验证,因此对于每个新应用程序,必须再次执行此操作,但在更新时,该表仍保留在那里,因此不会提示输入密码。现在,我如何从数据库中检测和删除该表。即使我使用SharedReferences而不是数据库,它们仍会保留在更新中,我甚至无法检测应用程序是否更新,因为版本代码相同

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

谢谢,


Hamza Manzoor

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

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

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

//我想补充一点:
当然,这可能是bug的来源,但是如果你小心的话,这应该是可行的。如果有人有更好的解决方案,请发布。

您可以在SharedReferences中存储应用程序的单独版本值,并对照列表或数值检查其中的值,然后根据结果做出决定。 您还可以使用Android的内置版本(不是数值而是字符串值)

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

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

//我想补充一点:
当然,这可能是bug的来源,但是如果你小心的话,这应该是可行的。如果有人有更好的解决方案,请发布。

您的应用程序不会通过Google Play机制被覆盖\升级,以防它们具有相同的版本代码。仅通过“adb安装-rd”或某些启用root的侧面加载程序

嗯,正确的行动方式是

  • 像往常一样,每次升级时增加versionCode和DB SCHEMA_版本
  • 在onUpgrade()方法中的DB类(扩展了SQLiteOpenHelper)中,您应该检查DB版本并相应地在Prefs中设置一些变量,稍后在活动中,您将能够启动一个密码对话框(在onCreate()上打开DB,在onResume()上检查Prefs)

您的应用程序不会被覆盖\通过Google Play机制升级,以防它们具有相同的版本代码。仅通过“adb安装-rd”或某些启用root的侧面加载程序

嗯,正确的行动方式是

  • 像往常一样,每次升级时增加versionCode和DB SCHEMA_版本
  • 在onUpgrade()方法中的DB类(扩展了SQLiteOpenHelper)中,您应该检查DB版本并相应地在Prefs中设置一些变量,稍后在活动中,您将能够启动一个密码对话框(在onCreate()上打开DB,在onResume()上检查Prefs)

这些应用程序显然不在google play上,否则我将不得不更改软件包名称和版本代码,如果我更改了版本代码,那么我将无法用较低的版本代码覆盖较高的版本代码。这些应用程序显然不在google play上,否则我将不得不更改软件包名称和版本代码,如果我更改了版本代码,那么我将无法用较低的版本代码覆盖较高的版本代码