我想为我的Android应用程序创建一个PRO版本,并想知道如何构建我的存储库。
知道我有一个主干和功能分支。我想把专业版放在另一个分支中,但也许有更好的方法?例如,也许我应该创建两个分支 - 一个用于免费版本,另一个用于专业版?
专业版将具有其他功能,并且无广告,例如。我不想在专业版中包含AdMob库。
在这种情况下,您对构建存储库的最佳方法有什么经验或建议吗?
编辑: 我想我已经在这个主题中找到了最适合我应用的解决方案:http://groups.google.com/group/android-developers/browse_thread/thread/4ad3d67f735f16d7/948b4f9eee2490a3
这里讨论的技巧是关于另一个应用程序,它只用于解锁实际应用程序中的PRO功能。解锁应用程序在市场上支付,实际应用程序仅检查设备上是否存在它。
答案 0 :(得分:15)
我知道你已经做出了决定,但我有另一个可能对其他人有帮助的建议。
我在我的存储库中使用git。创建和维护分支非常容易。我有我的主“专业”存储库和一个“免费”分支。我对主服务器进行了所有代码更改。我的“自由”分支只是因触发“自由”行为的任何变化而不同。 每当我完成对代码的更改时,我将其提交给主分支,然后切换到自由分支并使用“rebase”命令将其与主代码进行匹配。
它回滚使其表现为“免费”版本的更改,应用我对master进行的更改,然后重新应用“free”更改。
我不需要维护两个版本。我不必记得切换一些开关,或来回做出相同的改变。它非常漂亮,我喜欢它比触发专业行为的第二个应用程序更好,因为我可以删除相关版本不需要的库。
答案 1 :(得分:11)
我建议不要维护两个分支,但要有运行时或编译时间开关来禁用免费版本的PRO功能。您甚至可以在构建时删除不需要的DLL。
维持两个分支意味着在两个地方解决问题,这将成为一个问题,因为分支不可避免地分歧。
答案 2 :(得分:7)
我在eclipse中找到了一种简单的方法。一旦我发现它,我感到非常惊讶。
此方法假定您使用的是全局验证方法。例如,我创建了一个类,将用户连接到我的域上托管的数据库,该类确定用户何时首次安装应用程序。对于任何专业活动,我检查LicenseClass.isValidLicense(),它比较日期,如果小于所需的天数,则返回true。在isValidLicense()函数中,我检查Application.IS_PRO是否设置为true,如果是,则返回true。
所以现在你可以经常进行尽可能多的更改,而你所要做的就是重新编译两者。唯一需要记住的是,你在com.app.free清单中所做的更改必须反映在专业版中。但是任何应用程序都是如此,因为Android应用程序要求您声明要使用哪些活动,无论如何。
注意:您可以删除在项目创建时自动生成的所有资产和资源(不要删除res文件夹本身),因为它们不会被使用。此外,唯一需要的类文件是步骤3中的MyApplication文件。这意味着您也可以删除自动生成的MainActivity.class,因为它也从未使用过。您还可以删除专业版中使用的任何标签。 EX:我有一个BuyPro活动,如果验证失败则会打开。由于验证在专业版中永远不会失败,因此不需要。当然,所有这些删除都是可选的,只是让你知道我学到了什么。
缺点:到目前为止我发现的唯一一个问题是你不能将switch语句与资源变量一起使用,因为它们不再是常量。因此,当您将项目用作库时,如果在专业版中声明了同名变量,则会自动覆盖您在strings.xml文件中创建的任何变量。对我来说,这不是骗局,因为我不喜欢在java中使用switch状态,因为它们限制你只需要切换int类型而且它们需要常量值。这意味着在java中我通常不管怎么说...其他的staments。如果您将光标放在开关关键字上并按Ctrl + 1然后单击转换为if else,Eclipse实际上将帮助转换switch语句。此外,我发现资源被覆盖是非常有用的,因为你可以做一些事情,比如将app_name从“app free”更改为“app pro”,或者上传一个新的drawable来说明应用程序图标,只需在该位置创建新版本它存在于免费的应用程序中。 EX:如果res / values / string.xml包含100个字符串变量,但是你需要或想要在专业版中更改的是app_name,只需重新创建res / values / string.xml(NOT copy)并添加app_name变量。现在将覆盖免费版本中的app_name变量,这意味着pro版本中的string.xml文件只需要包含1变量而不是100,因为它是唯一更改的变量。十分简单。 : - )
编辑:我发现eclipse不允许你导出.apk用于库,因此你必须在免费版本中将其作为库添加到专业版中后取消选中“Is Library”选项。据我所知,这样做的唯一原因是eclipse不会警告你关于switch语句的问题。除此之外它似乎工作正常。
答案 3 :(得分:1)
使用public static final boolean IS_PRO
的单个版本可以确定免费/专业行为。
编辑:
包装的东西。比如说,你的所有课程都在com.myapp.android.free
下
然后,在AndroidManifest.xml中,您为付费版本声明package = "com.myapp.android"
,为免费版本声明package="com.myapp.android.free"
。
如果您使用活动,服务等的全名,则无需更改任何其他内容。
我不打算从付费版本中删除未使用的库。如果你这样做,你必须手动完成。