使用 Kotlin 多平台实现相机库
Posted
技术标签:
【中文标题】使用 Kotlin 多平台实现相机库【英文标题】:Implement camera lib with Kotlin multiplatform 【发布时间】:2020-03-01 14:07:13 【问题描述】:我试图了解什么结构应该有一个多平台库。在互联网上查看我已经看到了大量解释如何制作日志或“hello world”的示例,但缺乏复杂的示例,即使在 official documentation 中也是如此(重要的是要注意我只对移动平台,ios 和 android)。
所以我想创建一个简单地打开相机的示例(作为一个库,而不是作为一个多平台应用程序),只是为了了解如何使用一个真实的功能,这也是本机的。现在我在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 多平台实现相机库的主要内容,如果未能解决你的问题,请参考以下文章
无法在 commonMain 中为 kotlin 多平台使用依赖项
将 kotlin 多平台库发布到 Maven Central(InvalidMavenPublicationException 多个工件具有相同的......)