首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

谷歌社区说|聊聊Compose跨平台与KMM

,不会涉及跨平台底层原理,比如为什么可以跨平台这些深奥道理。...为什么不讲这些呢?原因很复杂,简单说就是不会。...KMM更像是营销术语,我们不用纠结Mobile这个词,你要知道是,下文我们所说KMM就是指Kotlin跨平台不仅限于移动端就行了。 KMM可以简化多平台应用程序开发。...通过KMM,开发者可以在 iOS 、 Android、Desktop与Web 应用程序之间共享业务逻辑通用代码,在必要时也可以编写特定于平台代码。所以,KMM只负责跨平台下业务逻辑部分。...社区对KMM支持 目前官方许多库都已经支持了跨平台,比如我们刚刚使用网络请求框架Ktor、依赖注入Koin还有序列化组件等。

44410

KMM跨平台开发入门,看这一篇就够了~

KMM却与之相反,接下来让我们来一起了解一下吧~ 什么是KMM KMMKotlin Multiplatform Mobile 是一个 SDK,旨在简化跨平台移动应用程序开发。...通过KMM开发者可以在 iOS 和 Android 应用程序之间共享通用代码,并仅在必要时编写特定于平台代码。 ...KMMHelloWorld 环境配置 这里假设,你已经有了一台Mac、安装了高版本AndroidStudio(这里不会介绍Xcode配置), 在AndroidStudio搜索插件Kotlin Multiplatform...源集是一个 Gradle 概念,用于逻辑上组合在一起多个文件,其中每个组都有自己依赖项。 在 Kotlin Multiplatform ,共享模块不同源集可以针对不同平台。 ...} } 在iOS手机上运行则会显示iOS版本号,这里交给读者自己去尝试了。因为电脑配置不允许安装Xcode...

4.2K20
您找到你想要的搜索结果了吗?
是的
没有找到

KMM 求生日记二:KotlinNative 被踩

最近几周团队 KMM 进度推进了不少,已经陆续把几个小业务需求迁移到了 KMM。 其实万事开头难,最初时候许多公共团队基础类库都没有桥接到 KMM,导致好像啥业务都没法着手开始。...然后在 Android 主工程编写这些桥接接口实现,以及对 KMM 业务逻辑调用。...在 Android 上完成基本测试,能跑通之后,由我一位同事(也是小组 leader)在 iOS 主工程编写类似在 Android 主工程编写代码(Objective-C)。...,一旦对其进行更改(无论是否在别的线程进行),都会抛出 InvalidMutabilityException 异常。...如果我们在运行对其进行修改,会直接抛出 InvalidMutabilityException 异常并 crash。由于警告存在,上面这段代码很容易让开发者发现问题。

2.3K10

Android Koin2基本使用那件事儿

首先什么是KOIN? 适用于 Kotlin 开发人员实用轻量级依赖注入框架。 用纯 Kotlin 编写,仅使用功能分辨率:无代理,无代码生成,无反射。...本文主要讲解 Koin (2.0.1) 在AndroidX使用,所以直接添加 koin-android 依赖 首先添加 Koin Android 基本依赖 // Koin for Android...,这时需要每次都给它个新(使用factory): val girlModule = module { factory { Girl() } } 依赖对象有了,得让 Koin 知道,所以需要在我们...理解是使用范围,类似于生命周期,我们可以控制它存活范围。 来个其他栗子换个口味,先奉上效果图: ?...scope 就已经 close 了,这时再 getScope 将抛出异常: override fun onActivityResult(requestCode: Int, resultCode: Int

1.6K10

浅谈KotlinChecked Exception机制

Kotlin是没有Checked Exception机制,这意味着我们使用Kotlin进行上述文件流操作时,即使不捕获或者抛出异常,也可以正常编译通过。...你是这么想,上一层的人也是这么想,更过分是,他可能还会在抛出异常基础之上,再增加一点其他异常继续往上抛出。...又或者,他可能会在当前异常抛出链上再加一把火,为抛出100个异常做出贡献。。。...那么至于为什么取消Checked Exception并不会成为导致程序出现更多异常原因,想分成以下几个点讨论。 第一,Kotlin并没有阻止你去捕获潜在异常,只是不强制要求你去捕获而已。...事实上,可能绝大多数Java程序员甚至都不知道为什么捕获这个异常,只知道编译器提醒必须捕获

1.4K43

Hello World —— 使用 Kotlin 开发跨平台应用

原文作者:Aman Bansal 原文地址:Create Hello World App with KMM - Android & IOS 译者:秉心说 在移动开发领域,Android 和 iOS 版本应用程序通常会有很多共同点...所以我们为什么不只写一次业务逻辑代码,在不同平台上共享呢? 有了这个想法之后,Jetbrains 带来了 Kotlin Multiplatform Project 。...为 Android/iOS 应用程序业务逻辑代码使用单一代码库,仅在需要时候编写平台特定代码,例如实现原生 UI,使用平台特定 API 等等。 KMM 可以和你工程无缝集成。...实现 iosMain 下存储 iOS 特定代码,包括 actual 实现 每一个源集都有自己依赖,Kotlin 标准库依赖会自动添加到所有源集,你不需要在编译脚本声明。...不知道你怎么看 KMM,在评论区留下看法吧! 最后打个广告,推荐一波小专栏,面向面试 Android 复习笔记 ,目前已经输出六篇文章,感兴趣可以给个订阅,点击文末 阅读原文 可直达。

1.9K20

Kotlin 协程】协程异常处理 ④ ( Android 协程中出现异常导致应用崩溃 | Android 协程中使用协程异常处理器捕获异常 | Android 全局异常处理器 )

-- 在前几篇博客示例 , 协程 如果出现异常 , 没有进行捕获 , 则程序直接崩溃 , 这种情况下需要进行 异常捕获 以 避免 Android 应用程序崩溃 ; 示例代码 : package...java.lang.IllegalArgumentException 三、Android 全局异常处理器 ---- Android 全局异常处理器 , 可以 获取 所有的 协程 中产生 没有被捕获异常...处理捕获异常 " + "\n协程上下文 ${context}" + "\n抛出异常 ${exception}") } } ⑤...全局异常处理器 处理捕获异常 协程上下文 [StandaloneCoroutine{Cancelling}@8252a7e, Dispatchers.Default...处理捕获异常 , 但是程序依然崩溃 , 可以在 全局异常处理器 获取到异常信息 ;

1.2K10

dotnet 警惕 async void 线程顶层异常

应用程序设计里面,不单是 dotnet 应用程序,绝大部分都会遵循让应用在出现未处理异常状态时终结原则。...通常来说就是捕获异常导致进程闪退 在 dotnet 里面,有一个隐藏陷阱,那就是 async void 将会在没有线程同步上下文情况下,被当成线程顶层。...如果在 async void 里面发生任何捕获异常,严重的话将会导致进程闪退 如以下代码,在当前执行线程没有线程同步上下文情况下,抛出异常将会让进程闪退 async void Foo() {...在大部分应用里面,一般都是应该在此捕获所有异常,除非可以无视应用进程闪退问题 以下是另外更多行为细节 在 dotnet 里面的 async void 抛出捕获异常,将会进入到 AppDomain...将 async void 改为 async Task 然后抛出捕获异常,此时如果方法返回 Task 没有被任何等待,将会在 Task 对象被 GC 时进入 TaskScheduler.UnobservedTaskException

16140

Android注解三大框架Dagger、Hilt 和 Koin 有何不同?

在这个例子,没有任何区别。Hilt 是一个内部使用 Dagger 库,向你展示类是由 Dagger 生成。...如果我们忘记为 CompositeAdapter 类添加工厂,应用将会成功构建,但是会抛出 RuntimeException 一旦我们请求获取这个类实例。...测试数据编写方式可以模拟多个级别的传递依赖关系,因此它不仅仅是具有 4 个类虚拟应用程序。 image.png 如您所见,Dagger 对启动性能几乎没有影响。...另一方面,在 Koin ,我们可以看到它花费了很多时间。在 Dagger 中注入依赖也比在 Koin 快一些。 总结 正如我在本文开始时所说这里目标不是告诉您要使用哪个库。...在两个不同大项目中都使用了 Koin 和 Dagger。老实说,认为选择 Dagger 还是 Koin 并不重要,重要是能够让你编写干净、简单且易于单元测试代码。

1.9K40

Android基于DataBinding+Koin实现MVVM模式页面快速开发框架

更多关于 DataBinding 介绍请查阅 Google 官方文档:DataBinding[1] Koin 是一个基于 Kotlin DSL 实现轻量级依赖注入框架,相比于 Dagger2,...Koin 无反射、无代码生成且使用更简单;借助该库可轻松在基于 kotlin Android 应用开发实现依赖注入,降低代码耦合性。...为了帮助大家更好理解画了一个简单时序图: 从时序图中可以发现核心实现是在 BaseBindingActivity onCreate ,主要分为以下三步: • 调用 createDataBinding...,并转换为 VM 类型 return injectViewModel() as VM }catch (e:Exception){ // 抛出异常...viewModel.bind(this) return viewModel }catch (e:Exception){ // 抛出异常

1.4K20

破解 Kotlin 协程(4) - 异常处理篇

,我们只需要在我们代码捕获就可以了,这样做好处就是,请求全流程异常都可以在一个 try...catch......原来协程 ③ 抛出捕获异常,进入了异常完成状态,它与父协程 ② 之间遵循默认作用域规则,因此 ③ 会通知它父协程也就是 ② 取消,② 根据作用域规则通知父协程 ① 也就是整个作用域取消,这是一个自下而上一次传播...,出现捕获异常会尝试传递给父协程并尝试取消父协程。...不同之处在于, launch 捕获异常与 async 处理方式不同, launch 会直接抛出给父协程,如果没有父协程(顶级作用域中)或者处于 supervisorScope 父协程不响应,那么就交给上下文中指定...这一块儿稍微显得有点儿复杂,但仔细理一下主要有三条线: 协程内部异常处理流程:launch 会在内部出现捕获异常时尝试触发对父协程取消,能否取消要看作用域定义,如果取消成功,那么异常传递给父协程

1.3K10

协程取消和异常 | 异常处理详解

处理异常‍ 协程使用一般 Kotlin 语法处理异常: try/catch 或内建工具方法,比如 runCatching (其内部还是使用了 try/catch) 前面讲到,所有捕获异常一定会被抛出...Launch 使用 launch 时,异常会在它发生第一时间被抛出,这样您就可以将抛出异常代码包裹到 try/catch ,就像下面的示例这样: scope.launch { try {...这就是为什么没有必要将它也包裹进 try/catch ,await 将会抛出 async 协程中产生所有异常。...codeThatCanThrowExceptions() } deferred.await() } catch(e: Exception) { // async 抛出异常将不会在这里被捕获...内部协程会在异常出现时传播异常并传递给它父级,由于父级并不知道 handler 存在,异常就没有被抛出。 优雅地处理程序异常是提供良好用户体验关键,在事情不如预期般发展时尤其如此。

1K20

只会用 Spring Boot 创建微服务?那你就 OUT 了,还有这 4 种替代方案!

首先,Koin 启动,然后初始化所需依赖并调用startServer()方法—-其中创建了一个WebServer类型对象,应用程序配置和路由设置传递到该对象; 启动应用程序后在Consul注册: object...在 Koin ,模块类似于 Spring 框架应用程序上下文。...因此,在 Helidon 和 Ktor 服务使用了Java类库方式Consul 客户端。...此外,starter和auto-configuration概念简化了开发 2、专家多,文档详细 想很多人都会同意 Spring 在不久将来仍将是 Java/Kotlin开发领域领先框架。...微框架功能有限,这会减慢开发速度。 不敢判断这个或那个框架会不会在近期“大更新”,所以在我看来,目前最好继续观察,使用熟悉框架解决工作问题。

5.9K20

Kotlin Multiplatform 实战记 | QCon

1 为什么选择 Kotlin 跨平台? 先介绍一下我们团队情况,交代清楚我们技术选型背景。...在下文中,我会多次提到 KMM 这个简称,这里先简单讲一下 KMM 是什么: 基于 KMP(Kotlin Multiplatform)派生,全称 Kotlin Multiplatform Mobile。...cinterop 是 Kotlin Native 支持能力,KMM 工程编译使用了 gradle 工具链,其中对 iOS 来说,我们使用了 Kotlin CocoaPods 插件。...饿了么商家端 饿了么商家端也深度使用了 Kotlin 收拢双端逻辑,还使用了 Redux 管理数据流。这里就不展开细讲了,详细内容可以查看 PPT,会在文末给出链接。...对于常规业务开发来说,更推荐 MVP 设计法则,把 M 和 P 层收拢在 Kotlin

1.4K10

Kotlin | 关于协程异常处理,你想知道都在这里

异常传递给父协程 (重复上述过程,直到根协程关闭) 举个例子,比如下面这段代码: 在上图中,我们创建了 两个子协程A,B,并在 A 抛出异常,查看结果如右图所示, 当子协程A异常被终止时,我们子协程...(如果异常没有被捕获),而后者将不会向上传递,会在调用处直接暴漏。...但需要注意是,CoroutineExceptionHandler 仅在捕获异常上调用,也即这个异常没有任何方式处理时(比如在源头tryCatch了),由于协程是结构化,当子协程发生异常时,它会优先将异常委托给父协程区处理...结果是不能 为什么? 不是已经使用了 SupervisorJob() 吗?...你可能会想,这还不简单吗,上面不是已经提过了,如果根协程或者scope没有设置 CoroutineExceptionHandler,异常会被直接抛出,所以这里肯定异常了啊。

75120

Kotlin 安装和语言基本组成

为什么要学 Kotlin 要想知道为什么 Kotlin 广受欢迎,首先要理解 Java 在现代软件开发领域中所扮演角色。...Kotlin 从这些经验教训受益良多,而 Java(和其他语言,比如 Scala)某些早期设计却愈显陈旧。脱胎于旧语言,Kotlin 解决了它们很多痛点,进化成了一门优秀语言。...异常处理理念 Java 把异常分为受检查异常和运行期异常,编译器强制要求受检查异常必须捕获抛出。事实上经过多年实践,开发者发现即便是捕获了那些受检查异常处理起来也力不从心。...受检查异常会使得程序结构变得混乱,代码大量增加。而 Kotlin 把所有的异常都看做是运行期异常,编译器不会强制要求捕获抛出任何异常,开发人员可以酌情考虑是否捕获处理异常。 3....Kotlin 应用程序运行过程 Java 程序运行过程如下图所示,首先由 Java 编译器将 Java 源文件编译成为 class 字节码文件文件),这个过程可以通过 JDK(Java 开发工具包)提供

55030

开源 | 携程机票跨端 Kotlin DSL 数据库框架 SQLlin

携程机票移动端团队在2021年介绍过 KMM 技术在机票产线落地情况(参考链接 1),2022 年年中开源了团队首个 KMM 项目—— MMKV-Kotlin(参考链接 2),并撰文(参考链接 3)详述...例如,在 Android 开发,我们有 Android Framework SQLite Java API,但是开发者们通常会在项目中使用 Jetpack Room 来操作数据库。...在近期调研,在 x86 架构下 SQLDelight 带来包 size 增长为 200 kb,比之前有所改善。...如果你准备从 0 打造一个 KMM app 或者你是某项目的基础架构团队成员,非常建议你尝试 SQLDelight。...在构思希望 DSL 设计可以尽量还原 SQL 语法,并且能最大程度减少用户编写样板代码。

1.5K40

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券