使用 Kotlin 多平台实现相机库

Posted

技术标签:

【中文标题】使用 Kotlin 多平台实现相机库【英文标题】:Implement camera lib with Kotlin multiplatform 【发布时间】:2020-03-01 14:07:13 【问题描述】:

我试图了解什么结构应该有一个多平台库。在互联网上查看我已经看到了大量解释如何制作日志或“hello world”的示例,但缺乏复杂的示例,即使在 official documentation 中也是如此(重要的是要注意我只对移动平台,iosandroid)。

所以我想创建一个简单地打开相机的示例(作为一个库,而不是作为一个多平台应用程序),只是为了了解如何使用一个真实的功能,这也是本机的。现在我在official example之后创建了一个项目,所以它有一个通用模块(使用expect),一个用于Android,一个用于iOS(使用实际),现在这些是我的疑问:

我已经看到 iOS 模块也在 Kotlin 中,据我所知是 Kotlin/Native。我的项目是否应该在 Swift 中也有一个包装器,还是该库没有 Swift 代码?如果应该,它应该在项目结构中的什么位置?

同样在 Android 模块中,我注意到我无法导入“Activity”类或“Intent”类,我需要打开相机,为什么?此代码是否仅限于没有 Android 库的 Java?它也应该有一个Android的包装器吗?如果是这样,我该如何配置这个包装器?

我知道在创建类时可以使用“expect”键,但据我所知,通用模块和本机模块将始终是分开的类。我的意思是,如果我在 common 模块中创建一个类,我可以使用“expect”定义这个类的方法,然后在 native 中定义它们吗?

我的库可以有清单吗?

最后,有没有人知道一个可以真正解释更复杂情况的真实示例?

谢谢

【问题讨论】:

【参考方案1】:

好的,让我们一一解决你的问题。

    我建议你看看this 示例 该 iOS 模块因此生成了一个 Objective-C 框架。 Xcode 项目可以像使用任何其他非 Kotlin 框架一样使用它。 好像无法使用 Android SDK 是使用jvm("android") 目标的结果 android() 一个。要使用 android 目标,除了 kotlin-multiplatform 之外,还必须应用 android Gradle 插件。 我 认为你想做这样的事情:只是普通的类 common 中的声明及其扩展函数 expect 修饰符。然后在特定平台中实现它 代码。 我想是的。 我还建议您看看 this 和 this,也许这些例子对你来说已经够复杂了。?

【讨论】:

好的,我看看例子,看看我能不能更好地理解结构,谢谢!

以上是关于使用 Kotlin 多平台实现相机库的主要内容,如果未能解决你的问题,请参考以下文章

将 .klib 库添加到 kotlin 多平台

使用多平台模拟 kotlin 中的常见测试

无法在 commonMain 中为 kotlin 多平台使用依赖项

将 kotlin 多平台库发布到 Maven Central(InvalidMavenPublicationException 多个工件具有相同的......)

从 ktor 提供 kotlin 多平台 javascript

Kotlin 通用库可在多个 MPP 中重用