kotlin - Kotlin 库的公共(public) API 检查

标签 kotlin gradle gradle-plugin

我现在正在编写一个小型 Kotlin 库,想知道是否有办法验证哪些类和函数是公开的。
我基本上想确保该库不会公开任何不属于公共(public) API 的实现细节。
到目前为止,我将所有内容都表示为 internal每当库用户不应该能够访问给定的类/函数时。
这种方法的问题是我可能忘记将某些内容声明为 internal从而向用户暴露一些东西。
当我无意公开一个类/方法时,我想在构建时收到警告/错误。
任何有关如何实现此目标或最佳实践的提示都非常感谢!

最佳答案

Kotlin 1.4-M2 引入了 explicit API mode ,感觉就像你在找什么。显式 API 模式需要您添加 public所有公共(public) API 的可见性修饰符并明确指定返回类型。您可以将 Gradle 插件配置为警告您有关明确的 API 模式违规,甚至使构建失败。
此功能自 Kotlin 1.4 起可用.
此功能仅在目前处于 RC 阶段的 Kotlin 1.4 中可用,但您可以使用 1.4 版本的 Kotlin Gradle 插件和 1.3.x 版本的 stdlib,以从新的 Gradle 插件功能中受益并确保您的库不依赖于不稳定的 3rd 方代码。
Kotlin DSL ( build.gradle.kts ) 的示例:

kotlin {   
   explicitApi() // for strict mode
   // or
   explicitApiWarning() // for warning mode
}
使用 Groovy DSL ( build.gradle ) 的示例:
kotlin {   
   explicitApi = 'strict'
   // or
   explicitApi = 'warning'
}

关于kotlin - Kotlin 库的公共(public) API 检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63120913/

相关文章:

Kotlin - 一种将可变列表公开为不可变列表的优雅方式

java - Kotlin 对象创建和内存管理与 Java 的比较

java - 如何从对象生成 XML

java - Android Studio Gradle 同步 : "Unable to load class..."

Gradle:为什么根项目的 "Could not get unknown property ' com' 错误?

android - Android Kotlin:如何从Firebase删除数据

java - 如何定义多个实体?

Android Studio 卡在 "Tip of the Day"上

android-gradle-plugin - Mac 上没有方法 : com. crashlytics.tools.gradle.CrashlyticsPlugin 的签名

Gradle:无法存储任务输入属性。无法序列化值为 'myInput' 的属性 '[null]'