如何在颠覆中将应用的免费/付费版本分开

Mal*_*ist 5 svn version-control android

我在Android市场上有一个付费应用程序,但是,我想发布一个免费的广告支持版本.

我认为最简单的方法是在我的subversion存储库上设置一个分支,其中包含添加广告的附加代码.但是,当我将其提交到Android市场时,它们需要唯一的包名.这个解决方案不再适用于我,因为我必须更改每个类文件的包,这会使合并主干和分支非常痛苦.

我可以将这两个项目保持在一起,共享补丁,但使用不同的包的最佳方式是什么?

小智 8

你考虑过编译器指令了吗?

例:

#define FREE
// ...
#if FREE
Console.WriteLine("Free version");
#else
Console.WriteLine("Paid version");
#endif
Run Code Online (Sandbox Code Playgroud)

您可以保留完全相同的代码库,并使用两个单独的构建脚本或可参数构建脚本来定位两个构建.

msbuild /p:DefineConstants=FREE
Run Code Online (Sandbox Code Playgroud)

要使用Java,请阅读本文此内容.也许这个.


Kar*_*ldt 5

只有您的应用程序包必须是唯一的.看到这里.这是您的清单文件中声明的包.您可以拥有大部分代码com.mydomain.myapp,并且只有不同的主要活动com.mydomain.myapp.free.


Wya*_*ett 3

如果您确实想分开,最好的方法是将其设置为同一存储库的两个部分。这样您至少可以合并不同分支之间的更改。如果你想让事情完全分开,那么你将需要做大量的补丁文件。

我已经这样做了,坦率地说,这在实践中并不是一个很好的策略。更好的是,特别是在编译环境中,免费和付费有一个单独的构建过程,这样就有一个代码库而不是两个。如果有两个代码库,事情就会有所不同。