如何基于密钥限制Android库项目中的类访问?

时间:2018-11-26 10:43:32

标签: java android android-library

我开发了具有不同功能模块的android库。任何想使用该库的应用程序都将基于该许可证密钥获得许可证密钥,我必须限制其他模块的使用。

举例说明-带有 1,2,3,4模块 XYZ SDK 现在的应用程序希望将XYZ SDK用于唯一的1&4模块,因此根据许可证密钥会生成,如何防止访问其他模块(在上述情况下为2&3)?

2 个答案:

答案 0 :(得分:1)

如果遇到同样的情况,我将执行以下操作。

  • 我将分离所有模块,并使它们看起来像独立的插件(参考插件体系结构)
  • 如果我的库中有4个模块,我将与客户端共享4个独立的依赖项和4个许可证密钥
  • 在每次插件/模块初始化时,我将验证许可证密钥(使用服务器或将私钥/秘密密钥存储在android安全存储中),并将结果存储在最终变量中。如果许可证密钥无效,则不会初始化该插件中的其余组件。
  • 对于该插件中的每个公共方法,请验证存储在最终变量中的许可证验证结果。如果验证失败,则以适当的返回类型返回。即使他们访问您的API,这也可以作为无操作操作。

通过这种方式,您可以在运行时控制对模块/插件的访问。

如果您很难将库拆分为插件,则可以按照我上面提到的相同步骤进行操作。您还可以抛出IllegalAccessException,而不仅仅是返回。

答案 1 :(得分:0)

如果您使用的是“设计模式”并遵循“静态工厂”方法,则在初始化库时,基于许可证密钥创建一个方法。

例如,如果您只想访问两个库2,3,则不要初始化其他两个库中的两个库,因此不要初始化,因此无论您要提供什么功能,都可以在初始化阶段定义一个库。

  • 如果您想了解静态工厂,请单击此链接单击here