【问题标题】:Using Kotlin in Android library distributed as AAR在作为 AAR 分发的 Android 库中使用 Kotlin
【发布时间】:2016-12-16 11:50:40
【问题描述】:

甚至可以使用 Kotlin 编写库吗?

我看到的问题是它将取决于 kotlin-stdlibkotlin-runtime 的特定版本,并强制库的用户使用相同的版本。

我正在考虑使用jarjar 重新打包它们,但是,如何将它们包含在 fatjar 类型的发行版中?在解压后的 aar 中,我看到了 /libs 目录 - 有没有办法使用它?

【问题讨论】:

  • 查看here 以更好地了解 gradle 如何构建应用程序。同样描述了类路径上的插件。我建议不要在分发库时构建fatJar,这会导致版本问题。
  • Android 兵工厂中有基于 Kotlin 的库,所以想必是有可能的。我个人没怎么玩过 Kotlin,所以我不知道他们是怎么做的。但除非kotlin-stdlibkotlin-runtime 非常小,否则如果嵌入它们,您的库可能会变得相当大。 AAR 中的libs/ 用于本机库(.so 文件)IIRC。
  • 感谢您的 cmets!看起来现有的库只包含依赖项:compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
  • @R.Zagórski:我理解您的建议,这就是我正在考虑更改包名称的原因。
  • @atok :你为什么不写你的评论作为答案。有用。会有帮助的

标签: android kotlin aar


【解决方案1】:

根据 cmets,有几个可用的 .aar 库是用 Kotlin 编写的,例如 MapMe

确实在this GitHub repo 中有一个此类库的精选列表

您可以通过检查build.gradle 来发现它们确实包含对kotlin-stdlib 的依赖。

这不是轻量级依赖:.jar 大小约为 1MB。如果你创建一个空白项目,编译.apk,并将其上传到method count site,它会涉及6086方法。

但是,如果消费项目已经使用 Kotlin,他们将已经承担了额外类的负担。由于他们将在他们的build.gradle 中明确包含kotlin-stdlib 作为依赖项,因此可能会强制将库中的依赖项解析为他们的版本。这不太可能导致stdlib 出现问题。

即使消费者在他们的项目中没有使用 Kotlin,积极使用 Proguard 也可以消除未使用的方法。 official Kotlin website explains

占用空间:Kotlin 有一个非常紧凑的运行时库,可以通过使用 ProGuard 进一步减少。在实际应用中,Kotlin 运行时只添加了几百个方法,而 .apk 文件的大小不到 100K。

第二个语句的来源是blog post on Medium,因此您的里程可能会有所不同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-24
    • 2019-08-02
    • 2017-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多