如何pipe理Android项目的免费和付费版本?

我决定构build我的免费Android应用程序的付费版本。 付费版本有一些额外的function。 我如何pipe理这两个版本?

  • 是否有可能让他们基于相同的源代码?
  • 如果应用程序需要唯一的软件包名称,我该如何强制付费应用程序来replace免费版本?
  • 如何分贝,偏好和其他私人存储的东西,如何分享他们没有暴露在世界其他地方的所有数据?

任何意见,将有助于pipe理这两个项目,但不直接回答上述问题,也赞赏。

  • 从android应用程序访问外部存储中的某个下载的.sqlite数据库
  • 如何在Android SQlite中添加布尔列
  • webview崩溃NullPointerException android.webkit.WebViewDatabase.initDatabase(WebViewDatabase.java:234)
  • 在现有数据库内容上使用ActiveAndroid
  • 如何使用SQLiteDatabase.CursorFactory
  • Ormlite或sqlite哪个对Android透视图有好处?
  • 虽然一切都closures,SQLite连接泄漏
  • 获取SQLite FTS3表的行ID
  • 有几种方法:

    1. 把你的应用程序的核心放在一个库项目中,并为付费应用程序创build另外两个项目,一个用于免费版本的应用程序。 升级到付费版本意味着用户必须卸载免费版本,并丢失所有的数据。
      这是“古典”的方法。
    2. 让用户进行应用内付款。 用户保留所有的数据库和设置,你只能维护一个应用程序。
      这个选项需要在您的应用程序中包含额外的模块,以及额外的逻辑。
    3. 制作另一个虚拟/空应用程序,这是一个付费应用程序。 这个应用程序的存在意味着用户有一个付费版本。 用户继续使用原始/免费的应用程序。
      你可以简单地使用PackageManager来检查付费应用是否被下载。
      用户保留所有的数据库和设置,你只能维护一个应用程序。 好吧,有两个应用程序,但第二个可以是非常小,简单。
      您不必包含额外的库/代码来进行应用内付款。 您也可以将所有应用程序升级到“专业”版本,只需购买一次。
      我不知道是否所有用户都了解这种模式。 对于开发者来说,这可以用最less的工作来实现,并且用户在升级时保持所有的设置。

    我认为这是可能的,并build议保持在相同的源代码。 否则,你必须支持两个版本的应用程序,而不是只有一个。

    如果你只有一个应用程序,那么你只有一个包名称。

    在当前许可证状态(免费或付费)中创build一个负责应用程序function可用性的类。 这个类应该存储关于许可证状态的信息(免费的,付费的,也许你会在将来添加订阅模式,付费版本可能在一段时间后过期)。 您的应用程序的function仅适用于付费版本检查当前许可证状态。 您也可以根据许可证状态更改应用程序GUI。 例如隐藏付费function的GUI,显示“购买”button或广告等

    而且,如果您只有一个可以免费或付费的应用程序,则无需在付费版本和免费版本之间共享任何内部应用程序数据。