首页
学习
活动
专区
圈层
工具
发布

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

通过KMM开发者可以在 iOS 和 Android 应用程序之间共享通用代码,并仅在必要时编写特定于平台的代码。 ...由于KMM还不是特别的成熟,所以建议开发者将Kotlin插件也升级到最新版本,避免出现一些兼容性问题。...源集是一个 Gradle 概念,用于逻辑上组合在一起的多个文件,其中每个组都有自己的依赖项。 在 Kotlin Multiplatform 中,共享模块中的不同源集可以针对不同的平台。 ...可以使用 CocoaPods 或其他依赖项管理器的原生 iOS 项目和使用 Gradle 的 Android 项目中使用。...写在最后 到这里,恭喜你,已经入门了KMM的使用,更多的使用方法需要在实际项目中不断地去总结,去尝试,Jetpack目前也在开发KMM版本,这对KMM发展将会是一个推进~

5.4K21

KotlinNative KMM项目架构

在 KMM 的帮助下,您可以在 iOS 和 Android 应用程序之间共享通用代码,并仅在必要时编写特定于平台的代码。...Android/iOS业务SDK层:主要是包括一些现有的Android/iOS SDK,需要直接依赖现有SDK来开发KMM时,在commonMain expect声明接口,在androidMain、iosMain...当然如果依赖了一些库如ktor网络库,包也会变大,避免这个问题也可以不用依赖ktor,直接依赖现有的网络库来实现一个KMM SDK。...四、依赖现有的Android/iOS SDK开发KMM SDK alog的实现过于简单,使用了android.util.Log、platform.Foundation.NSLog。...上面说到的第1点本地构建,在iosApp本地依赖构建sdkframework时,要将依赖项正确导入 Kotlin/Native 模块,Podfile必须包含use_modular_headers!

3.8K00
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

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

    通过KMM,开发者可以在 iOS 、 Android、Desktop与Web 应用程序之间共享业务逻辑的通用代码,在必要时也可以编写特定于平台的代码。所以,KMM只负责跨平台下的业务逻辑部分。...但是,其实这种观点是不正确的,很多业务逻辑比如日志系统、埋点等业务使用KMM还是非常有利的。 后来Compose Multiplatform的出现弥足了KMM的短板。...社区对KMM的支持 目前官方许多库都已经支持了跨平台,比如我们刚刚使用的网络请求框架Ktor、依赖注入Koin还有序列化组件等。...所以我们我们现在如果想使用Kotlin全平台有两种方式: 使用IDEA创建项目,添加KMM依赖配置 使用Andrioid Studio创建项目,添加Compose Multiplatform的配置 使用官方提供的模板项目...中可以通过使用 UIKitView,在共享用户界面中嵌入复杂的特定于平台的小部件,如地图、 Web 视图、媒体播放器和照相机等。

    2.8K10

    Compose 跨平台现状

    KMM 时就可以实现各自平台的效果。...这里可以看下 ComposePlugin 插件的 RedirectAndroidVariants 类,在 Android 项目编译的时候,会将 jb-compose 依赖替换成 jetpack-compose...当我打开 README 时发现,咋被耍猴了: 开发跨平台应用还需要注意哪些? 既然目前可以支持 Android 和 Desktop,那么,我们在开发界面时需要注意哪些呢?...来实现组件路由,但该组件 jb 并没有移植到 jb-compose 中,所以,无法在两个平台上实现复用,好在浏览 jb-compose 项目的 issue 时找到了一个可替代的方案 Decompose...-8 即可: 资源设置可以查看我的项目:KMPCompose[7] desktop 多语言设置:java中如何实现多语言切换[8] 总结 在整个调研和使用下来,感觉 Compose 跨平台还有很长的路要走

    4.1K30

    干货 | 携程机票 App KMM 跨端生产实践

    KMM Module 工程集成与常规 Android Libraray Module 工程集成一脉相承,整理实践过程中遇到的若干常见问题: 1)在设置 KMM 工程的 target Java 版本时,尽量与需要集成的主工程保持一致...当 KMM Module 仅包含 Koltin 代码,或者所依赖的 iOS ObjC 库文件是单指令集格式时,官方 fat-framework 方案可以正确构建。...但是当所依赖的 iOS ObjC 库文件是多指令集格式时,官方方案就会报错异常。因此我们屏蔽了官方方案 Task,使用自定义指令集合并 Task 实现。...3)我们在 Kotlin/Native 上也无法自己编写基于池化技术的协程调度器,因为它可能会因为挂起时与恢复时所在线程不同而 crash。...首先,在 KMM 工程中,所有的协程只能在主线程开启;其次,在执行需要后台线程执行的任务时,通过专门编写的高阶函数 API 来执行;最后,所有的可变状态(通常是成员变量)必须在主线程更新值。

    4.6K10

    LNK2001: 无法解析的外部符号的几种情况

    一般来说,我们引用第三方库时,需要进行指定依赖项配置,若没有进行相关配置,则编译器会出现“LNK2001: 无法解析的外部符号”错误。...这个是最常见的问题,具体步骤: 项目、属性、链接器、常规、附加库目录:填写附加依赖库所在目录 分号间隔多项 项目、属性、链接器、输入、附加依赖项:填写附加依赖库的名字.lib 空格或分号间隔多项 若已经按照上述步骤进行配置...平台 ”配置,而另外一个项目采用“wind64平台 ”编译配置 3.没有添加指定预编译宏 在使用curl静态库时,却遇到了编译链接错误: 1>testcurl.obj : error LNK2001:...1>testcurl.obj : error LNK2001: unresolved external symbol __imp__curl_easy_cleanup 解决方法是,在自己的项目属性中添加一个预编译宏...,CURL_STATICLIB, 为了避免遇到以上问题建议: 1、引用第三方库时,确认lib库是否使用相同编译平台 2、确认编译选项是否一致。

    10.8K20

    前端打包工具Mako架构解析|得物技术

    在核心打包逻辑中使用Rust,并在Node.js中使用piscina来并行编译文件。在基准测试中,Mako比其他 Rust打包工具和Webpack更快。...热模块替换当文件更改时,Mako将自动更新浏览器中的代码。无需手动刷新页面。Mako已集成React快速刷新,当你更改React组件时,它只会更新组件,而不是整个页面。...通过napi将Mako核心逻辑的Rust代码,经过胶水层,在github workflows中进行交叉编译,编译出多平台的native模块,然后在npm模块中进行引用,再次进行一层封装供用户使用。...有个很有意思的事情是我看到代码中有使用oxc_resolver,一开始有点好奇,以为是什么黑科技,因为oxc和swc是同类型的工具,一般不会出现在同一个项目中。...如果你的项目严重依赖于 Webpack 的社区加载器和插件,你不应该使用 Mako,Rspack 是更好的选择。一家之言,还请各位指正。

    57510

    别具特色的跨平台移动开发 - Kotlin Multiplatform Mobile

    想要在缺少原生开发能力的前提下,纯粹依赖与使用React Native,是一件比较有挑战的事。...而且使用Flutter你可以真正抛弃原生开发,因为它完全不依赖原生的技术与控件。...KMM的实现思路是重用业务。 在Android中开发业务实现,KMM会将你的业务生成iOS类库。你在iOS开发的时候,相当于依赖了一个类库,这个类库提供了本身你业务的很多方法。...在业务重用过程中,数据库SQLite与网络都是支持的,也就是你的业务实现可以使用数据存储查询以及网络等。 而数据存储与网络其实是移动开发中极为重要的两个关键依赖。...而KMM也是我关注的一个移动开发技术方向,因为它一方面重用了业务,另一方面又维持了原生开发,似乎是个挺不错的实现思路。 最近五一假期时,基于KMM做了一个可运行的示例项目。

    1.9K20

    Kotlin Multiplatform 实战记 | QCon

    1 为什么选择 Kotlin 跨平台? 我先介绍一下我们团队的情况,交代清楚我们技术选型的背景。...在日常开发中,会遇到以下几个问题: 基础模块逻辑相对复杂,多端研发成本高 双端逻辑代码膨胀,无法保证完全一致,问题排查难 逻辑代码穿插在各个模块中,现有跨端复用方案迁移成本高 这些问题可能很多存量 App...cinterop 是 Kotlin Native 支持的能力,KMM 工程的编译使用了 gradle 工具链,其中对 iOS 来说,我们使用了 Kotlin CocoaPods 插件。...) 3 Kotlin Multiplatform 在阿里巴巴的实践 1688 日志 我们在日志建设上使用了 Kotlin 收拢双端逻辑。...在开发维护搜索逻辑的时候,我们遇到过好几次由于双端逻辑不一致,出现问题很难排查的情况。为了追求双端逻辑强一致,我们把搜索筛选业务的请求策略、场景管理、筛选模型、埋点策略封装在了 Kotlin 中。

    2.1K10

    如何用c语言做个阅读器?

    编译libHaru这个开源库,需要其它的开源作为依赖,下面我们在Windows下编译libHaru。 1,下载zlib库,这个在官方网站上有最新的windows版本bin,不需要编译。...从工程中去掉依赖项(zlib,我们这里直接使用编译好的zlib,不需要编译),在设置从属性中的c++设置好头文件路径,和属性的连接设置好zlib的路径和库名字,编译动态库。...将Makefile.msvc_dll中的zlib和libpng指向目录和库名修改正确,在命令行下执行: nmake -f script\Makefile.msvc_dll即可编译成功。...拷贝好库和头文件到使用的工程,包含头文件时如下: #define HPDF_DLL #include "hpdf.h" #pragma comment (lib, "libhpdf.lib") 这里必须定义...如果没有在工程中设置包含libhpdf.lib(属性设置或者使用#pragma comment (lib, "libhpdf.lib")),则会出现如下错误: font_demo.obj : error

    2.3K50

    说说最近官方公布的 Kotlin 的动态

    为什么会这样呢?因为越往后,Kotlin 自身的体系越庞大,想要做点儿什么的复杂度可想而知的变高,自然版本节奏就没那么好把控了。 功能优先还是版本优先? 显然这个问题在不同的发展阶段是有不同的答案的。...其实这个特性现在也有办法来模拟,就是通过隐式 receiver 的方式来实现,但如果能够有专门的语法来支持的,应该还会有更会玩的用法出现。...也正是如此,Kotlin 协程的 Kotlin Native 版本迟迟没有正式推出多线程版本,在 iOS 上使用 Kotlin 协程目前还受制于所调用的 API 是否本身已经自己支持了异步以及回调的线程切换...至于依赖框架的问题,这恰恰也是 Kotlin 的生存哲学之一,Kotlin 游走于各个平台上,一向是以充分利用所在平台的优势为基础的。...再稍微提一下,KMM 插件尽管支持了很多功能,但对于 iOS 工程却仍然不能有效支持,这主要体现在对于 Swift、Objective-C 的代码无法高亮、调试等问题上,如果需要编辑 SwiftUI 或者其他使用

    1.4K30

    MSBuild的简单介绍与使用

    TargetOutputs" ItemName="AssembliesBuiltByChildProjects" /> 在构造工程中我们可以定义和使用变量...这里还需要强调一点的是,项目级元素(Property)可以在元素下定义,也可以在构造过程中作为外部参数传入,这是一个非常有用的特性,一般编译时选择配置项(Debug或者Release)就是利用这个特性实现的...我们都知道,在一个项目的生成过程中可能需要完成几项不同的任务(比如编译、单元测试、check-in到源代码控制服务器中等),其中每一项任务都可以用Target来表示。...当MSBuild引擎开始执行某项Target时(别忘了Project的DefaultTargets属性),会自动检测它所依赖的那些Target是否已经执行完成,从而避免因为某个生成环节缺失而导致整个生成过程发生意外...你可以通过Project的DefaultTargets属性指定MSBuild引擎从哪(几)个Target开始执行,也可以在调用MSBuild.exe时使用t开关来手动指定将要运行的Target,方法如下

    1.7K50

    开源|携程机票 App KMM 跨端 KV 存储库 MMKV-Kotlin

    2.1 安装与导入 对于 KMM 开发者,在 common source set 中导入 MMKV-Kotlin,在 Gradle 脚本(kts)中添加: dependencies {          ...2.2 初始化 MMKV 在使用前需要进行初始化,由于 MMKV-Android 强依赖于 Context 类型,因此 MMKV-Kotlin 的初始化 API 在两端有所区别,需要在 Android...Gradle 脚本中通过 CocoaPods 依赖 MMKV-iOS,在 iOS source set 中通过其 Objective-C API 完成对 MMKV 的调用。...MMKV-Kotlin 的总体设计见下图: 四、实现简介 在《携程机票 App KMM 跨端生产实践》(参考链接 1)一文的 2.2 小节中我们曾以 MMKV 作为 demo 来介绍 KMM 的...但考虑到 Kotlin/Native 在 iOS 单平台开发中好像并不存在实际使用场景和需求,因此 MMKV-Kotlin 的文档中并没有将这几个 klib 的依赖代码列出。

    2.2K20

    将 Mozilla 源码里的 winEmbed 工程移植到 VC

    编译之,你会发现 N 多错误…… (2)在 VC++ 目录中,include 里加入 源码根/dist/include,Library 里加入 源码根/dist/lib,bin 里加入 源码根/dist...此时的程序也可以在别的机子上运行,但是需要将 xulrunner.exe 及其依赖文件拷到别的机子上并注册 GRE。 程序运行示意图: ?...在自己编译的 xulrunner 环境下跑会产生下面两类错误,先忽略之让程序跑起来。(用官方提供的 xulrunner-sdk 里的程序来注册 GRE 并运行程序无报错) ? ?...为什么要添加预编译选项 XPCOM_GLUE 在原版的 winEmbed 目录下,有 makefile 文件,里面有DEFINES += -DXPCOM_GLUE这么一句。...为什么要添加引入库 xpcomglue.lib,为什么要有(4)步骤 在 winEmbed/makefile 文件里,有 LIBS = \ $(DEPTH)/profile/dirserviceprovider

    1.3K10

    pycharm安装库报错_pycharm安装numpy失败

    本文详细介绍在pycharm中,当我们进行安装库的操作时,出现Installing Packages Failed错误时,应当怎么解决。...错误展示:当导入tqdm包时,发现tqdm的下面有红色的波浪线,将鼠标移到波浪线处,系统显示 Unresolved reference ‘tqdm’ (如下图) 此时我们可以点击Install packages...但是,有时候安装并不会顺利进行,而是会出现Installing Packages Failed提示,如下图: 当我们出现这个问题时,通常有两种解决办法: ①使用Anaconda进行库的安装...第二步,打开Pycharm,新建一个Project,将New environment using设置为conda 第三步,将Conda executable设置为第一步中安装的conda.exe...,点击Creat,即创建了一个conda环境的Project 第四步,同文章开头一样,写入 from tqdm import tqdm,还是会显示同样的错误,此时我们再点击Install

    2.5K20
    领券