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