Android 和 Web App 共享 Kotlin 代码

Posted

技术标签:

【中文标题】Android 和 Web App 共享 Kotlin 代码【英文标题】:Android and Web App sharing Kotlin code 【发布时间】:2018-08-01 16:44:33 【问题描述】:

Kotlin 的主要“卖点”之一似乎是它能够编译为 JVM 或 android 以及 Web 的 javascript。为了利用这一点,应该有一个代码库,其中一些文件在 Android 应用程序和浏览器 Web 应用程序之间共享。

但是,到目前为止,我几乎没有发现关于如何设置这样的东西的详细信息,特别是在使用 Android Studio 及其底层 Gradle 设置时,从运行 Android Studio New 开始项目向导。我不介意我是否只能在命令行上构建 Web 应用程序,但我想维护 Android Studio 提供的 Android 调试连接。到目前为止,我对 Gradle 及其使用的典型习语知之甚少。

我确信我不是第一个有这个想法的人,所以我想知道一些关于如何设置它的最佳实践。我想到的问题包括:

我是在一个构建文件中混合kotlin2jskotlin-android 插件,还是需要多个构建文件(也许我应该说“模块”或“项目”,除非我不知道哪个)? 如果我有多个构建文件,应该是两个(一个 Android 一个 Web)还是三个(一个用于共享内容)? 如果是两个构建文件,如何引用共享源? 如果是三个构建文件,我应该使用哪个插件来共享一个? 是否需要将我的源代码拆分到三个不同的源代码树上?是否有任何约定如何调用它们? 是否需要将我的类分成三组包,或者不同目标的代码可以共存于同一个包中? 我需要调整哪些配置设置才能让 IDE 了解我的项目布局?

除其他外,我已阅读以下相关文档:

https://kotlinlang.org/docs/reference/using-gradle.html https://docs.gradle.org/current/userguide/intro_multi_project_builds.html https://docs.gradle.org/current/userguide/composite_builds.html https://kotlinlang.org/docs/tutorials/kotlin-android.html

【问题讨论】:

刚刚找到kotlinlang.org/docs/reference/multiplatform.html,这似乎是我问题的关键。在我把它写成我自己的答案之前,仍然需要尝试一下。 【参考方案1】:

我建议使用IDEA wizard 为您创建一个简单的多平台项目(文件 -> 新建 -> 项目 -> Kotlin -> Kotlin (Multiplatform - experimental))。社区版就足够了。

回答您的问题:

    不要混合插件。你为你的通用代码创建一个单独的模块,并为它使用'kotlin-platform-common'插件。

    三个模块,特殊插件'kotlin-platform-common'

    使用常识进行源拆分。将您想要/能够重用的任何内容放入公共代码中。将特定于平台的代码放入平台模块中。

    没有包限制。如果你愿意,你可以把所有东西放在同一个包里 =)

    很确定它应该可以正常工作。如果没有,请尝试重新导入。

【讨论】:

以上是关于Android 和 Web App 共享 Kotlin 代码的主要内容,如果未能解决你的问题,请参考以下文章

Android 应用程序共享相同 UID 的问题

与.NET Web应用程序和.NET Mobile App共享数据库

推荐两份学习 Kotlin 和机器学习的资料

React-Native 开发 android & ios App,共享一份代码

图书推荐:Kotlin从入门到进阶实战

用 Mapbox Android SDK 做一款共享单车 App—— 消费者端