如何隐藏Android库中的函数定义

Posted

技术标签:

【中文标题】如何隐藏Android库中的函数定义【英文标题】:How to hide definitions of functions in Android library 【发布时间】:2022-01-08 01:23:36 【问题描述】:

我开发了一些算法来使用心率计算与健康相关的参数。我想把它交给其他开发者。但不想暴露功能的实现。就像 ios 使用框架一样。有没有像这样在 android 中创建框架的解决方案?

【问题讨论】:

【参考方案1】:

Android 的构建系统 (Gradle) 允许定义对其他工件/库的依赖项。

iOS 上的库相当于 Android 上的 jar 文件。

iOS 上的框架相当于 Android 上的 aar 文件(aar = Android 存档)。

https://developer.android.com/studio/projects/android-library 详细解释了库是如何创建的。 有多种方法可以将库链接到项目:

该库是项目中的一个库模块,在这种情况下,它是同一代码库的一部分,该库的使用者(其他开发人员)将看到实现的详细信息 库作为 jar 或 aar 文件链接(您将创建 jar/aar 文件并将其提交到项目 repo),在这种情况下,库的使用者将看不到实现的详细信息(稍后会详细介绍) 该库发布到 Maven 存储库(公共或私有),消费者只需将其定义为项目依赖项(典型的 implementation("group:artifact:version") 依赖项),有很多文章解释了 Maven 存储库的发布或工件,其中一篇是我自己的文章:https://medium.com/nerd-for-tech/the-better-maven-central-90d7e529d606

注意:无论你做什么,库的使用者仍然可以看到实现的细节,因为 IDE 可以反编译代码。根据您要隐藏实施细节的原因,有不同的解决方案:

代码是专有的,需要作为知识产权保护:使用 ProGuard 甚至 DexGuard 进行混淆 我不希望我的库的使用者使用未记录的功能:正确设计库,例如通过针对隐藏具体类的接口进行编码,例如使用工厂类或依赖注入检索

【讨论】:

以上是关于如何隐藏Android库中的函数定义的主要内容,如果未能解决你的问题,请参考以下文章

C标准库中的函数定义在哪里?

java - 如何在spring boot java中编写一个函数来处理JPA存储库中的自定义查询?

如何确定某个函数在Linux内核代码中的位置

如何在节点 js 的库中收集用户定义的函数? [复制]

在外部 JavaScript 库中定义函数时如何检查未定义? (Angular4/5)

如何链接到共享库中定义的 [abi:cxx11] 函数?