我有一个 Android 应用程序,它是一个付费应用程序,我想制作一个免费版本。免费版的源代码将有 95% 相同。我正在使用git
源代码控制,我最初的想法是创建一个free
分支,master
以便我可以轻松地将付费版本的更改合并到免费版本中。
free
考虑到分支中的某些更改永远不会合并回,这是正确的策略master
吗?
其他选项包括:
- 为免费版本创建另一个存储库
- 保留所有内容
master
并创建免费和付费版本都使用的库代码
我有一个 Android 应用程序,它是一个付费应用程序,我想制作一个免费版本。免费版的源代码将有 95% 相同。我正在使用git
源代码控制,我最初的想法是创建一个free
分支,master
以便我可以轻松地将付费版本的更改合并到免费版本中。
free
考虑到分支中的某些更改永远不会合并回,这是正确的策略master
吗?
其他选项包括:
master
并创建免费和付费版本都使用的库代码我更愿意将代码放在一起,并在分支上使用条件编译和/或“付费”插件库。分支应该代表开发过程中源代码树的转移。不应使用分支来维护单独的代码库。
您可以创建付费大师和免费大师。使用git flow技术来管理您的新功能和错误修复。
使用gradle 构建系统,您可以为您的应用程序创建不同的“风格”。
android {
...
defaultConfig { ... }
signingConfigs { ... }
buildTypes { ... }
productFlavors {
paid {
applicationId "donturner.app.paid"
versionName "1.0-paid"
}
free {
applicationId "donturner.app.free"
versionName "1.0-free"
}
}
}
然后,您可以为这些构建风格创建额外的源文件夹,这些文件夹可用于提供不同的实现。例如。app/src/free/java/ClassWithDifferences.java
将提供“免费”实施app/src/paid/java/ClassWithDifferences.java
。
注意:代码在app/src/main/
所有口味之间共享;所以一定没有app/src/main/java/ClassWithDifferences.java
。并确保正确使用这些风味,例如,只存在于免费风味中的类不得在 main 中引用,也不得在付费中引用。