从 Android 应用程序中删除功能的安全方法

Safety way to remove functionality from Android app

我有 2 个版本的应用程序 - 免费版和专业版(口味)。现在我为 Pro 版本添加了一些额外的功能。使其功能不适用于免费版本的安全和正确方法是什么?例如,如果我只是删除 "Free" 布局上的一些按钮 - 是否足够,或者我必须覆盖所有 java 代码以使其不包含在免费版本中?如果有人 "hack" 免费应用程序和 return 从专业版布局,有可能吗? 搜索没有给我结果。 谢谢

更新: 需要说明的是,这个问题与产品口味和 gradle 系统无关——我知道有关它的基本信息。这个问题是否可以通过简单地在编译的 apk 中替换一些变量来破解应用程序,例如布尔变量或字符串(并使其成为 "Pro")。例如,在 "true" 上的某些地方替换 "false" 并获得具有完整功能的专业版。我对此一无所知,但出于某些原因我认为这是可能的(因为它是 java,我认为)。对不起我的英语。

我想你使用 Android Studio 进行开发?然后,您可以配置等级构建文件来构建两种不同风格的应用程序。查看 documentation 以了解如何完成此操作的详细说明。

两个选项:

  1. 如果你有一个服务器组件,你可以有一个注册功能,让服务器告诉应用程序是否允许用户使用专业版。

  2. 推荐的方式是In App Purchase。 Goole为此提供了 api s,您可以借助 Google In App Purchase SDK查看详细信息。在此基础上,您可以启用专业版功能。

https://developer.android.com/google/play/billing/index.html

您应该考虑使用常量或静态方法实现 class,这会在每个风味源集中区分您的免费版或专业版的功能。

也许一个 BuildConfig 字段就足够了。您可以在 gradle 文件中生成它:

 productFlavors {
    pro {
        buildConfigField "boolean", "PRO", "true"
    }

并通过

访问它
BuildConfig.PRO

另一种方法是访问风味:

BuildConfig.FLAVOR.equals("pro")

我会在 Android Studio 上将这两种风格作为单独的模块。

在您的情况下,例如您有一个 Activity(及其布局)MyActivity.java 有专业版和免费版。专业版有树形按钮,免费版只有两个。

因此,您可以将 MyActivity.java 包含在主模块中,但您将有两个布局文件,一个在 pro 模块中(此布局将包含三个按钮),另一个在内部免费模块(另一方面,此模块仅包含两个按钮)。

在 MyActivity.java 代码中,您可以区分您使用的是免费版还是专业版,并满足所有条件。

另一种选择是有两个 MyActivity.java 类(每个风味模块一个)和相应的实现。