android 维护应用程序的免费和专业版本

6psbrbz9  于 2023-05-21  发布在  Android
关注(0)|答案(5)|浏览(165)

我想为Android创建一个PRO版本的应用程序,并想知道如何构建我的存储库。
因为我知道我有一个 Backbone.js 和特征分支。我想把一个专业版在另一个分支,但也许有一个更好的方法?例如,也许我应该创建两个分支-一个用于免费版本,另一个用于专业版本?
专业版将有额外的功能,并将广告免费,所以例如。我不想在专业版中包含AdMob库。
对于在这种情况下构建存储库的最佳方式,您有什么经验或建议吗?
编辑:我想我已经找到了最好的解决方案(我的应用程序)在这个线程:http://groups.google.com/group/android-developers/browse_thread/thread/4ad3d67f735f16d7/948b4f9eee2490a3
这里讨论的技巧是关于有另一个应用程序,它只服务于在实际应用程序中解锁PRO功能的目的。解锁应用程序在市场上支付,实际应用程序只是检查它在设备上的存在。

iyzzxitl

iyzzxitl1#

我知道你已经做出了决定,但我还有一个建议,可能会帮助别人。
我使用git作为我的仓库。创建和维护分支非常容易。我有我的主“亲”仓库,和一个“免费”分支。我对master进行所有代码更改。我的“free”分支的不同之处仅在于触发“free”行为的任何更改。每当我完成对代码的更改时,我都会将其提交到master分支,然后切换到free分支并使用“rebase”命令将其与master分支同步。
它回滚使其表现为“自由”版本的更改,应用我对master所做的更改,然后重新应用“自由”更改。
我不需要维护两个版本。我不需要记得切换一些开关,或者来回进行相同的更改。这是相当光滑,我喜欢它比第二个应用程序,触发亲的行为,因为我可以剥离出库,不需要的版本的问题。

u5rb5r59

u5rb5r592#

我建议不要维护两个分支,而是使用运行时或编译时开关来禁用免费版本的PRO功能。你甚至可以删除不需要的DLL的建设时。
维护两个分支意味着在两个地方解决问题,随着分支不可避免地出现分歧,这将成为一个更大的问题。

balp4ylt

balp4ylt3#

我在eclipse中找到了一个简单的方法。我很惊讶,当我发现它是多么容易。
1.在www.example.com的项目属性中com.app.free检查“Is Library”为true(在更改此之前,您必须至少编译过一次项目,否则您会收到一个错误,说库项目无法编译,如果您收到此错误,只需取消检查,编译,然后重新检查。
1.创建新项目com.app.pro
1.将com.app.free项目作为库添加到项目的android部分的项目设置中
1.在www.example.com中创建新类MyApplicationcom.app.pro并扩展Application

  1. override onCreate()注意:对于那些复制/粘贴者来说,这与Activity的onCreate(Bundle savedInstanceState)包不一样。您必须删除Bundle参数,因为这是应用程序而不是Activity。
    1.然后添加或设置将在验证方法中读取的静态变量以验证许可证。EXX:IS_PRO = true;则validation方法读取变量,如果IS_PRO为true,则返回true。
    1.将清单内容从www.example.com复制com.app.free到com.app.pro
    1.将android:name=“MyApplication“添加到www.example.com清单中的应用程序标记中com.app.pro
    1.将www.example.com附加com.app.free到所有活动的name属性前面。(这使得应用程序知道您的活动将在库包中找到,该库包是免费版本)EX:android:name=".MainActivity”=> android:name=“com.app.free.MainActivity”
    1.现在编译,你有一个专业版
    此方法假定您使用的是全局验证方法。例如,我创建了一个类,它将用户连接到托管在我的域上的数据库,该数据库确定用户何时首次安装应用程序。对于任何专业活动,我检查LicenseClass.isValidLicense(),它比较日期,如果少于所需的天数,则返回true。在isValidLicense()函数中,我检查Application.IS_PRO是否设置为true,如果是,则返回true。
    所以现在你可以做尽可能多的更改,无论多久,你所要做的就是重新编译两者。唯一需要记住的是,您在www.example.com清单中所做的任何更改com.app.free都必须反映在pro中。但任何应用程序都是如此,因为android应用程序要求你声明你无论如何都要使用哪些活动。
    注意:您可以删除所有在项目创建时自动生成的资产和资源(但不要删除res文件夹本身),因为它们不会被使用。另外,唯一需要的类文件是步骤3中的MyApplication文件。这意味着您还可以删除自动生成的MainActivity.class,因为它也从未使用过。您也可以删除任何标签中不使用的使用在专业版。例:我有一个BuyPro活动,如果验证失败,它将打开。由于验证在专业版中永远不会失败,因此不需要验证。当然,所有这些删除都是可选的,只是让你知道我学到了什么。
    缺点:到目前为止,我发现的唯一缺点是,你不能在资源变量中使用switch语句,因为它们不再是常量。因此,当你使用一个项目作为一个库时,你在strings.xml文件中创建的任何变量都会被自动覆盖,如果你在专业版中声明了一个同名的变量。对我来说,这不是一个缺点,因为我不喜欢在java中使用switch状态,因为它们限制你只能切换int类型,而且它们需要常量值。这意味着在Java中,我通常需要我们,如果…反正都是口头禅。另外,如果您将光标放在switch关键字上并按Ctrl+1,然后单击converttoifelse,Eclipse实际上将帮助转换switch语句。此外,我发现覆盖资源非常有用,因为你可以做一些事情,比如将app_name从“app free”更改为“app pro”,或者上传一个新的drawable,比如说应用图标,只需在免费应用中存在的位置创建新版本。例如:如果res/values/string.xml包含100个字符串变量,但在专业版中您需要或想要更改的只是app_name,只需重新创建res/values/string.xml(不复制)并添加app_name变量。现在免费版中的app_name变量将被覆盖,这意味着专业版中的string.xml文件只需要包含1变量而不是100,因为它是唯一改变的变量。小菜一碟:—)
    编辑:我发现eclipse不允许你导出.apk的库,所以你必须在免费版本中取消选中“Is Library”选项,然后在专业版本中将其添加为库。据我所知,这唯一的作用是导致eclipse不警告您switch语句的问题。除此之外,它似乎工作得很好。
bq9c1y66

bq9c1y664#

有一个单一的版本与public static final boolean IS_PRO,将决定免费/专业的行为。
编辑:
包裹的事。比如说,所有的类都位于com.myapp.android.free下。
然后,在AndroidManifest.xml中,为付费版本声明package= "com.myapp.android",为免费版本声明package="com.myapp.android.free"
如果您使用活动、服务等的全名,则无需更改其他任何内容。
我不会费心从付费版本中删除未使用的库。如果你这样做,你必须手动完成。

nnsrf1az

nnsrf1az5#

我认为要走的路是产品风味/构建变体。请参阅文档,此example

相关问题