我在 android 市场上有一个付费应用程序,但是,我想发布一个免费的广告支持版本。
我认为最简单的方法是在我的 subversion 存储库上设置一个分支,其中包含添加广告的附加代码。但是,当我将其提交到 android 市场时,他们需要唯一的包名称。这个解决方案不再适用于我,因为我必须更改每个类文件的包,这会使合并主干和分支非常痛苦。
我可以将这两个项目放在一起,共享补丁,但使用不同的包的最佳方式是什么?
我在 android 市场上有一个付费应用程序,但是,我想发布一个免费的广告支持版本。
我认为最简单的方法是在我的 subversion 存储库上设置一个分支,其中包含添加广告的附加代码。但是,当我将其提交到 android 市场时,他们需要唯一的包名称。这个解决方案不再适用于我,因为我必须更改每个类文件的包,这会使合并主干和分支非常痛苦。
我可以将这两个项目放在一起,共享补丁,但使用不同的包的最佳方式是什么?
只有您的应用程序包必须是唯一的。见这里。那就是在清单文件中声明的包。您可以将大部分代码com.mydomain.myapp
放在com.mydomain.myapp.free
.
如果你真的想分开,最好的方法是将它设置为同一个存储库的两个部分。这样,您至少可以跨不同分支合并更改。如果你想让事情完全分开,那么你将做很多修补补丁文件。
我已经这样做了,坦率地说,这在实践中并不是一个很好的策略。更好的是,特别是在编译环境中,免费和付费有一个单独的构建过程,所以有一个代码库而不是两个。如果有两个代码库,事情就会不同。
版本控制是管理此类事情的一种糟糕方式。您最终会遇到维护噩梦 - 两个独立的应用程序需要几乎相同。
您是否考虑过多项目解决方案?(警告:我实际上并没有这样做,但它似乎可行,而且我认为 Android 会允许它。我稍后会尝试并确定。)将所有应用程序代码编译到主项目jar中。然后创建两个单独的 Android 应用程序,一个用于您的付费版本,一个用于免费版本。这将解决您的包命名问题。除了您的广告版本将包含支持广告的代码外,这些应用程序只会将几乎所有内容委托给主 jar。
您可能还会发现关于类似主题的讨论很有趣。
使用 a 构建您的应用程序feature toggle
可以让您实现目标,但您可能需要重新编写大量代码。
通过在 .ini 文件中定义 2(我建议 3)功能容器环境,例如:
[paid]
features.ads = false
features.featureOne = true
features.featureTwo = true
features.premiumFeature = true
features.underDevFeature = false
features.debug = false;
[free:paid]
features.ads = true
features.premiumFeature = false
; And the optionnal third
[development:paid]
features.debug = true
features.underDevFeature = true
这样,您就有了一个统一的版本,并且在您的版本控制源中只需要一个分支
然后,在您的特定脚本中,您必须检查该功能是否被授权,如果没有,则不显示它