android - 使用 Kotlin 多平台实现相机库
问题描述
我试图了解什么结构应该有一个多平台库。在网上查了很多例子,解释了如何制作日志或“hello world”,但缺乏复杂的例子,即使在官方文档中(重要的是要注意我只对移动设备感兴趣)平台、iOS 和 Android)。
所以我想创建一个简单地打开相机的示例(作为一个库,而不是作为一个多平台应用程序),只是为了了解如何使用一个真实的功能,这也是本机的。现在我按照官方示例创建了一个项目,所以它有一个通用模块(使用期望),一个用于Android,一个用于iOS(使用实际),现在这些是我的疑问:
据我所知,我已经看到 iOS 模块也在 Kotlin、Kotlin/Native 中。我的项目应该在 Swift 中也有一个包装器,还是该库没有 Swift 代码?如果应该,它应该在项目结构中的什么位置?
同样在 Android 模块中,我注意到我无法导入“Activity”类或“Intent”类,我需要打开相机,为什么?此代码是否仅限于没有 Android 库的 Java?它也应该有一个Android的包装器吗?如果是这样,我该如何配置这个包装器?
我知道在创建类时可以使用“expect”键,但据我了解,通用模块和本机模块将始终是分开的类。我的意思是,如果我在公共模块中创建一个类,我可以使用“expect”定义这个类的方法,然后在本机中定义它们吗?
我的库可以有清单吗?
最后,有没有人知道一个真正解释更复杂情况的真实例子?
谢谢
解决方案
好的,让我们一一解决您的问题。
- 我建议你看看这个例子
- iOS 模块因此生成了一个 Objective-C 框架。Xcode 项目可以像使用任何其他非 Kotlin 起源的框架一样使用它。
- 看起来无法使用 Android SDK 是使用
jvm("android")
目标而不是目标的结果android()
。要使用 android 目标,除了 kotlin-multiplatform 之一之外,还必须应用 android Gradle 插件。 - 我想你想做这样的事情:只是普通的类声明,
common
以及带有expect
修饰符的扩展函数。然后在特定于平台的代码中实现它。 - 我认同。
- 我还建议您看一下 this和this,也许这些示例对您来说已经足够复杂了。
推荐阅读
- pdfbox - 关于 Apache PDFBox 和 PDF 认证的问题
- javascript - 为什么 splice 函数中的变量 i 递减?
- python - 带有 CherryPy 的 Django - ModuleNotFound 错误
- angular - 使用 @ngtools/webpack 在 Angular 11 + Webpack 4 中实现 AOT
- angular - 隐藏在 kendo kendo-sortable angular 中拖动时的弹出窗口
- java - 当用户完成验证码时,如何让 selenium 检测到?
- mysql - MYSQL JOIN 和 SUM - 我做错了什么?
- python - 如何以编程方式将excel工作表复制到新的工作表
- javascript - 如何将 ondragstart="drag(event)" 添加到动态创建的元素 (li)?
- laravel - Laravel Eloquent Postgresql Select with Case,然后按 Case 结果过滤