输入项目名称,选择对应的配置 在 iOS 框架分发列表中,选择常规框架选项 (这里为了简单演示,实际项目根据所需选择即可)。点击Finish就创建了一个KMM的项目。...项目结构 创建完的KMM项目结构如下图所示。...这个结果来自shared模块中commonMain下的Greeting文件,代码如下所示。...} } 在iOS的手机上运行则会显示iOS版本号,这里交给读者自己去尝试了。因为我的电脑配置不允许我安装Xcode......写在最后 到这里,恭喜你,已经入门了KMM的使用,更多的使用方法需要在实际项目中不断地去总结,去尝试,Jetpack目前也在开发KMM版本,这对KMM发展将会是一个推进~
[KMM构建.png] 二、KMM项目架构 项目架构主要分为原生系统层、Android/iOS业务SDK层、KMM SDK层、KMM业务逻辑SDK层、iOS sdkframework层、Android/...6.1 sdkframework模块的iosMain需要有一个kotlin文件 如果iosMain没有kotlin文件,将无法生成 iOS framework,为其添加一个文件即可,如SDKTest.kt...// 加个类,避免Framework没生成 class SDKTest { fun test() { } } 6.2 生成头文件sdkframework.h时,把注释也带上 生成头文件...来导出到sdkframework.h头文件中 sdkframework依赖了utils、alog、PlatformMMKV、business,需要添加export,把这几个模块的类和方法导出到sdkframework.h...头文件中,这样iosApp才可以使用这几个模块的类和方法。
安装好插件后,打开Android Studio我们可以直接创建支持KMM的项目。 创建的时候会让我们填写模块的信息 创建好项目后,生成的项目目录结构是这个样子的。...expect与actual 我们要依赖Kotlin中的expect与actual关键字。expect是我们期望实现的方式,actual是实现方式,有点类似接口与实现类。...那么到这里呢,KMM我们就了解的差不多了,从上面的了解可以看出 其实KMM当前是可以使用在实际项目中的,不过我们可以再等等,Kotlin的RoadMap中说今年会发布正式版本,我们可以一起期待一下。...我们可以借助KMM插件在Android Studio中快速的创建KMM项目,但是当前如果我们想快速创建Compose Multiplatform 项目只能借助新版的IDEA。...中可以通过使用 UIKitView,在共享用户界面中嵌入复杂的特定于平台的小部件,如地图、 Web 视图、媒体播放器和照相机等。
2)配置 KMM 工程编译打包生成的产物导入至 Xcode 工程,使得 Objective-C 代码可以访问调用 Kotlin 代码。...我们首先选择了两个官方库:kotlinx.coroutines 与 kotlinx.serialization,当前 Kotlin 生态中的绝大部分第三方库都只能支持 Kotlin/JVM,能用于 KMM...由于框架是根据 class 对象来生成 Java 对象或 Objective-C 对象,而在 KMM 工程中我们无法拿到 Kotlin 类的 class 对象(问题的根源将在3.3 小节讨论),因此当前的网络框架无法支持生成...3.3 Kotlin 类的根级超类与 Objective-C 类的根级超类不兼容 在 Kotlin 中,所有类的根级超类是 Any。...当我们把 KMM 工程打包生成 iOS 端的 framework 之后,我们查看其内部的头文件可知,所有 Kotlin 类的跟级超类叫做KotlinBase,KotlinBase 在 KMM 工程中不可见
KMM的实现思路是重用业务。 在Android中开发业务实现,KMM会将你的业务生成iOS类库。你在iOS开发的时候,相当于依赖了一个类库,这个类库提供了本身你业务的很多方法。...KMM官网:https://kotlinlang.org/lp/mobile/ myddd-kmm-scoffold示例项目发布 我一直在关注与调研移动开发的技术,对iOS的SwiftUI,Android...而KMM也是我关注的一个移动开发技术方向,因为它一方面重用了业务,另一方面又维持了原生开发,似乎是个挺不错的实现思路。 最近五一假期时,基于KMM做了一个可运行的示例项目。...最终的效果参照如下: 现将这个项目的源码纳入myddd中开源出来。...• github: https://github.com/mydddorg • Gitee: https://github.com/mydddorg 未来 对于KMM这个技术,我也仍然在学习与尝试中,
这里可以看下 ComposePlugin 插件的 RedirectAndroidVariants 类,在 Android 项目编译的时候,会将 jb-compose 依赖替换成 jetpack-compose...❞ 这里面有个小插曲,在我看 compose-jb 项目的 sample 时,看到 todoapp[3] 有 iOS 项目,难道 jb 开始支持 iOS 了?...,但如果 Android 项目有用到如 AndResGuard[6] 等资源混淆的话,则这块代码将会报错,需要做 keep 处理。...如果项目有资源混淆需求的话, 建议直接定义获取图片的方法,如: 3、多语言统一 多语言的实现与图片资源设置类似: 在运行 desktop 项目时遇到中文多语言乱码问题,解决办法是将项目编码改成 UTF...-8 即可: 资源设置可以查看我的项目:KMPCompose[7] desktop 多语言设置:java中如何实现多语言切换[8] 总结 在整个调研和使用下来,感觉 Compose 跨平台还有很长的路要走
第2天技术总结:技术项目工作,包括项目进展、遇到的问题及解决方案等。...:我们有一个布尔变量 isMorning,表示当前是否是早上。...使用三元表达式决定 greeting 应该是 "Good morning" 还是 "Good evening"。使用 qDebug() 打印出 greeting 的值。...这个示例展示了如何在 Qt 中使用三元表达式来处理 QString 对象,从而根据条件生成不同的字符串。...范围:可以表示从 U+0000 到 U+FFFF 的 Unicode 字符。使用场景:主要用于 Qt 的字符串类(如 QString),这些类支持 Unicode 字符串操作。
Android Studio创建一个KMM项目,如果你不知道如何创建一个KMM项目,可以参照之前的这篇文章KMM的初次尝试~ ,项目目录结构如下所示。...创建好KMM项目后我们需要添加Compose跨平台的相关配置。...不过这是KMM的iOS项目,接下来我们看如何使用Compose编写iOS页面。...一个尴尬的问题 我一直认为存在一个比较尴尬的问题,那就是像上面实现一个完整的双端网络请求功能需要用到KMM + Compose-jb,但是KMM与Compose-jb并不是一个东西,但是用的时候呢基本上都是一起用...Compose-jb很久之前已经发了稳定版本只是Compose-iOS目前还没有开放出来,而KMM当前还处于试验阶段,不过在2023年Kotlin的RoadMap中,Kotlin已经表示将会在23年中发布第一个稳定版本的
如下通过一个简单的示例展示如何在Java语言中基于gRPC实现一个C/S架构的通信模型。...使用步骤 安装protobuf编译器 下载并安装protobuf编译器,并将其bin路径添加到PATH变量中,如:D:\opt\protoc-3.13.0-win64\bin。...= "HelloWordProto"; // 当java_multiple_files=false时生成的多个message类的包装类名 option java_package...// 通过message声明一个实体类 string greeting = 1; // 类对象属性 } message HelloResponse...即可生成对应的java类。
以下这个例子,是java调用c++输出hello world的例子。也是我根据博客做的实验的记录。...我们在native method里实现的方法的名字必须也是greeting 第三步:编写C/C++本地代码,生成动态链接库文件 在visual studio(或VC++)中创建dll项目。...笔者用的是vs。 ? 创建dll项目 笔者此时用的项目名为Win32Project1。所以你应该在目录中能看到Win32Project1.cpp。...请把上面生成的头文件nativeTest_NativeTest.h放在工程目录中(与Win32Project1.cpp在同一目录下),然后将其添加入项目。 ?...jni.h在JDK安装目录下的include中。 同时得将include/win32中的两个头文件jawt_md.h、jni_md.h也导入到vs中,放在同上的路径。
1 类和继承 1.1 class类 JavaScript 语言中,生成实例对象的传统方法是通过构造函数。...class Box{ static a(){ return "我是Box类中的,实例方法,无须实例化,可直接调用!"...} } // 通过类名直接调用 // 我是Box类中的,实例方法,无须实例化,可直接调用!...这就是为什么 ES6 的继承必须先调用super()方法,因为这一步会生成一个继承父类的this对象,没有这一步就无法继承父类。 注意,这意味着新建子类实例时,父类的构造函数必定会先运行一次。...如何在一个文件模块中获取其他文件模块的内容?
创建一个demo工程,参考下面的命令,这样的工程会自带一个web服务类HobbyResource.java: mvn "io.quarkus:quarkus-maven-plugin:create"...在环境变量中应该写成GREETING_MESSAGE 打开控制台,执行以下命令,即可在当前会话中设置环境变量: export GREETING_MESSAGE="from Environment.../resources/application.properties文件中的greeting.message配置项删除 MicroProfile是一个 Java 微服务开发的基础编程模型,它致力于定义企业...quarkus提供了一个生成UUID的方式,可以低成本解决上述问题,如下所示,应用启动时,${quarkus.uuid}会生成一个UUID,此时的greeting.message的值也是唯一的 greeting.message...,接下来的文章与本篇是配套的,会详细说明如何在代码中使用这些配置
三、设计思路 Android/iOS插件PluginCodelabPlugin只需要实现KMM Module的接口,不写任何逻辑,把逻辑通过接口放在KMM Module中。...1、定义接口中间层用于转发数据 如参考Flutter插件的MethodCall、MethodChannel,定义CommonMethodCall数据类、CommonMethodChannel.Result...fun notImplemented() } } 2、在KMM中的commonMain实现CommonCodelabPlugin插件的公共逻辑 CommonCodelabPlugin需要初始化并启动...使用KMM开发插件的好处是公共逻辑都使用kotlin写,一般公共逻辑比较简单适合使用kotlin写,便于维护。而且,实现了KMM写插件,Flutter写UI。...四、参考链接 本文地址:https://www.cnblogs.com/liqw/p/15477079.html Github项目地址:kmm-flutter-plugin
最近几周团队的 KMM 进度推进了不少,已经陆续把几个小业务需求迁移到了 KMM。 其实万事开头难,最初的时候许多公共团队基础类库都没有桥接到 KMM,导致好像啥业务都没法着手开始。...然后我在 Android 的主工程中编写这些桥接接口的实现,以及对 KMM 中业务逻辑的调用。...在 Android 上完成基本的测试,能跑通之后,由我的一位同事(也是小组 leader)在 iOS 主工程中编写类似我在 Android 主工程中编写的代码(Objective-C)。...对象的 API,通常的左右是来生成一个对象(和 Java 中使用 class 的方式相似),那么这样的 API 可能对 Kotlin 类不兼容。...但奇怪的是,在 Kotlin 工程中如果直接声明一个类继承自 NSObject,可以用 class() 函数来获取自身的 class 对象,但普通的 Kotlin 类则没有这个函数。
如果此时VSCode崩溃(我遇到了),则可能意味着你没有最新版本。如果你的VSCode崩溃,请查看下面的故障排除部分。否则,请更新你的VSCode,完成后,单击屏幕左侧边栏中的扩展名。...3.点击下拉列表中的JavaScript。 4.单击新建文件夹New Folder,然后将项目命名为所需名称。我将我的名字命名为demoContract。...扩展程序将询问你生成测试文件的语言。选择JavaScript。...生成测试完成扩展后,你可以从demoContract目录运行npm test,也可以从MyContract-demoContract@0.0.2.test.js文件中单击VSCode UI中的运行测试按钮...,如gif所示。
携程机票移动端团队在2021年介绍过 KMM 技术在机票产线的落地情况(参考链接 1),2022 年年中开源了团队首个 KMM 项目—— MMKV-Kotlin(参考链接 2),并撰文(参考链接 3)详述...如果你准备从 0 打造一个 KMM app 或者你是某项目的基础架构团队的成员,我非常建议你尝试 SQLDelight。...在我的构思中,我希望 DSL 的设计可以尽量还原 SQL 语法,并且能最大程度的减少用户编写的样板代码。...它反序列化的原理是它通过 KCP 处理注解,并生成了每个被注解类的 KSerializer,KSerializer 是一个辅助类,它包含被注解类的属性名,属性类型等信息,kotlinx.serialization...由于目前我们是本地编译发布,而 Kotlin 当前不支持类 Unix 系统和 Windows 系统的交差编译,因此 SQLlin 暂时还不支持 Windows 平台。
当你导入 trpc 并输入 trpc. 时,将会提示出服务端定义好的 greeting 函数,如下图所示。...你如果同时调用了多次 greeting 函数,如 pages/index.tsx const result1 = trpc.greeting.useQuery({ name: 'kuizuo1' })...在我印象中,RPC 框架通常是可以跨语言进行调用的,比如 gRPC 框架,然而tRPC 目前只能在 Typescript 项目中进行调用,我倒是希望能向 gRPC 那个方向发展,不过不同语言间的类型安全又是个大麻烦...此时就可以使用 Migrate,通过命令的方式自动为我们生成当前版本下的 sql 文件,而需要用到的也通过命令的形式运行 sql 文件。...(至于如何创建 Github OAuth Apps,在我之前的文章以及外面诸多文章中都有介绍到,这里不在演示了,附上配置图) 首先在 server/auth.ts 中 导入 server/auth.ts
当你导入 trpc 并输入 trpc. 时,将会提示出服务端定义好的 greeting 函数,如下图所示。...greeting 函数,如const result1 = trpc.greeting.useQuery({ name: 'kuizuo1' })const result2 = trpc.greeting.useQuery...在我印象中,RPC 框架通常是可以跨语言进行调用的,比如 gRPC 框架,然而tRPC 目前只能在 Typescript 项目中进行调用,我倒是希望能向 gRPC 那个方向发展,不过不同语言间的类型安全又是个大麻烦...此时就可以使用 Migrate,通过命令的方式自动为我们生成当前版本下的 sql 文件,而需要用到的也通过命令的形式运行 sql 文件。...(至于如何创建 Github OAuth Apps,在我之前的文章以及外面诸多文章中都有介绍到,这里不在演示了,附上配置图)图片首先在server/auth.ts 中 导入import CredentialsProvider
Spring Boot Actuator 是 Spring Boot 的一个子项目。通过它,可以很轻易地为应用提供多种生产级服务。本教程中,你将通过构建一个应用来学习如何添加这些服务。 1....你需要准备什么 大约 15 分钟时间 一个喜欢的 IDE 或文本编辑器 JDK 1.8 或更高版本 Gradle 4+ 或 Maven 3.2+ 还可以直接将代码导入到 IDE 中: Spring Tool...创建目录结构 在工作目录中,创建如下所示的子目录结构;例如,在类 UNIX 系统中,可使用 mkdir -p src/main/java/hello 命令创建。...创建目录结构 在工作目录中,创建如下所示的子目录结构;例如,在类 UNIX 系统中,可使用 mkdir -p src/main/java/hello 命令创建。...使用 IDE 构建 阅读如何将本教程代码直接导入到 Spring Tool Suite 阅读如何在 IntelliJ IDEA 中使用本教程代码 6.
你需要的 大约15分钟 你喜欢的文本编辑器(我这里用了vscode)或者IDE jdk1.8+ Gradle 4+ 或 Maven 3.2+ 你也可以直接把你的代码导入到你的ide中 Spring Tool...这3个包算是完整的项目基本上都要用到的。 然后是spring-boot-maven-plugin插件。他提供了很多便捷的特性。 把用到的所有依赖打包成一个整体,这样方便服务的执行以及分发。...创建一个资源表示类 定义好了pom就可以开始写代码了。 先想一下服务的交互是怎么样的。 服务处理/greeting过的来的get请求,可能会有一个name参数。...@SpringBootApplication是一个简便的注解,它添加了下面这些东西: @Configuration 定义这个类是bean的来源类。...编译生成可执行的jar 你可以通过命令行的Maven或者Gradle来运行程序。或者你可以把程序编译生成一个可执行的jar文件。这个jar文件包含了必须的依赖,类,资源文件。这方便于分发部署。
领取专属 10元无门槛券
手把手带您无忧上云