你好我是一个开始Android开发人员使用Windows和eclipse IDE开发java android应用程序.我已经发布了一个游戏,但有一个免费版本的游戏和付费版本.谷歌市场坚持认为不同的版本必须有不同的包名.到目前为止,我一直在使用2个不同的名称重构包,并在每次构建不同版本时更改R资源文件导入.两个版本的代码都是99%相同.有更好的方法吗?
您到处都有关于这个主题的各种讨论,但基本上解决方案类似于复制该项目。
例如(不基于 eclipse):
很难回答这个问题,因为我们不知道您的应用程序的免费版本和非免费版本之间有什么区别。
我假设这些差异可以通过某种全局自由/不自由标志来处理。我的意思是,相同的代码将构成应用程序的两个版本,并且启用或使用哪些部分将取决于某处的某些公共静态数据成员:
if (SomeClass.IS_PAID_APP) {
// add more stuff to menu, etc.
}
Run Code Online (Sandbox Code Playgroud)
如果您可以以这种方式组织您的应用程序,那么您只需要一个代码库。
将其设置为以一种方式(免费或付费,您的选择)构建您的应用程序,并在清单中为该版本的应用程序提供适当的包。
然后,添加执行以下操作的 Ant 任务:
- 将项目目录的树副本复制到临时位置
- 通过搜索和替换将清单副本切换为新的包名称
- 将旧包的 R 版本的所有导入语句切换到新包,再次通过搜索和替换,并再次在副本上,而不是原始包上
- 将您的 IS_PAID_APP (或其他)更改为相反的值(在副本中搜索并替换)
- 为项目副本执行 Ant 构建
- 以不同的名称将二进制文件从该版本复制到主项目的 bin/ 目录(这样就不会破坏 APK 的其他副本)
- 删除步骤 #1 中创建的树副本
如果 Java 有一个预处理器,这会更简单一些。然而,我上面描述的基本技术已经使用了几十年。它很笨重,但是很有效,这意味着您只需处理一组源代码。请注意,Ant
<replace>任务可以很好地处理您的搜索和替换内容。