android - 使用 Kotlin 多平台实现相机库

标签 android ios kotlin multiplatform kotlin-multiplatform

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

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

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

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

  • 我知道在创建类时可以使用“expect”键,但是据我了解,公共(public)模块和 native 模块将始终是单独的类。我的意思是,如果我在公共(public)模块中创建一个类,我可以使用“expect”定义该类的方法,然后在 native 中定义它们吗?

  • 我的库可以有 list 吗?

  • 最后,有谁知道一个真实的例子可以真正解释更复杂的情况吗?

谢谢

最佳答案

好的,让我们逐一分析您的问题。

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

关于android - 使用 Kotlin 多平台实现相机库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58707299/

相关文章:

android - 如何在flutter中将ImageCache保存到磁盘?

ios - 为什么ios上传文件时没有调用nodejs multer上的onParseEnd回调?

ios - 包含在 UIPopoverController 中时的 UINavigationBar 外观代理

android - 删除原生 android 中的循环依赖

java - 打开相机拍摄照片或画廊选择图像后,应用程序语言(语言环境)自动重置为默认值

ios - OpenGLES : render buffer parameters in landscape orientation

java-native-interface - Kotlin/Native 自己能用吗?

android - 多个异常 : Unable to start activity, Unable to instantiate fragment, Error inflating class

kotlin - 使用 "when"而不是 "if-else"有任何性能成本吗?

java - 使 Mapbox 标记可点击并返回标记的 ID