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