如何维护一款应用的付费和免费版本

17
我已经建立了一个免费版本的游戏应用程序,现在已经上市,名称类似于com.mycompany.myfreegame。现在我想制作一个付费版本。毫无疑问,未来几年两个版本都需要进行微调和错误修复,因此我希望将免费版和付费版信息的编码尽可能地封装起来,以便可以同时修复两个版本中的错误。
如果整个版本之间的差异在运行时处理,则可以在源代码中设置单个标志,问题就解决了。不幸的是,还有两件事需要考虑:
  1. 两个版本之间的包名称需要不同。
  2. 某些xml需要不同。例如,免费版本需要线性布局来容纳广告,而付费版本不需要。
实现这个目标的最简单方法是什么?

处理应用程序的注册状态不是更容易吗?这将允许您拥有一个单一的项目,而您所需要做的就是在付费版本中“隐藏”广告。 - Security Hound
或者使用市场内的“应用内购买”? - Eonasdan
5个回答

7
我认为我首先尝试的方法是在Eclipse中使用3个项目:一个用于游戏的每个版本,以及一个包含所有共享代码的库项目。库项目将是您所有核心游戏玩法代码的位置,而特定于版本的项目则管理加载不同的布局,在免费版本中放置广告,并向付费版本添加级别/功能/帽子等。
您可能可以通过使用Ant任务的编译器标志来实现单个代码库的目标,但这超出了我的能力范围。

2
这是我过去一直采用的解决方案。尽管现在,我会认真考虑应用内购买升级。 - Michael A.

4
我认为你想要的是一个库项目http://developer.android.com/guide/developing/projects/index.html#LibraryProjects 从该网页中得知: 如果您正在创建一个既有免费版本又有付费版本的应用程序。您可以将两个版本共同使用的部分移动到库项目中。这两个依赖项目,具有不同的包名称,将引用库项目并仅提供两个应用程序版本之间的差异。 另一个与此非常相似的问题似乎有一个不错的讨论和答案:Multiple Apps with a shared code base 编辑:这里有一个关于如何实现库项目的链接。http://developer.android.com/guide/developing/projects/projects-eclipse.html 关于不同版本略有不同,库项目可以适应。首先构建库项目,然后构建父项目(使用库的项目),最后将它们合并在一起。两个项目都可以定义相同的资源标识符,最后构建的项目(父项目)具有优先权(覆盖)。因此,您可以在父/调用应用程序中覆盖字符串/布局(可能还有更多,不确定?)。
例如:假设您有两个项目,免费和付费。您可以创建一个带有默认实现(免费版)的字符串,并在付费版(父应用程序)中覆盖它。
共享库中的代码Strings.xml文件:
<string name="AppName">My Application (Free)</string>

父应用程序中的代码 Strings.xml 文件:

<string name="AppName">My Application Premium</string>

3
我会选择 Maven。您可以定义一个带有三个子项目的父项目,例如:
  • Common
  • Paid
  • Free
Maven 允许使用不同的配置文件,同时拥有相同的代码库。
例如,我目前有一个项目中使用了两个数据库,因此所有应用程序配置文件都保留在公共项目中,而数据库配置文件和类则保留在每个项目文件夹中。当我在父级中进行构建时,每个子项目都会被构建,单元测试通过等等...
此外,这只是 Maven 的千万优点之一!
编辑:我刚刚发现,您可以使用 android-plugin 来使用 Maven,它还具有很棒的功能。

1
+1 - 我使用Maven来管理我的Android应用程序的构建步骤和依赖关系管理... 初始配置有点困难,但现在一切都设置好了,它运行得非常好。 - Jesse Webb

1

作为一个已经做过这个的人,Android Studio中的Gradle集成(特别是Mac OS版本!)很不稳定,不可靠,远远远远没有达到Beta质量。现在不要使用它。它会变得更好,但现在还不行。 - Delyan
是的,还有许多漏洞,但可以在生产中使用。 - galex
例如,Android Studio已经成功地与我们的产品Glextor AppManager一起在生产中使用。该产品通过Gradle一步构建为付费、免费和一些合作伙伴版本。但是,我们不得不使用模板化menifest和一些Java文件来实现它。 - galex

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接