Kuikly Android接入指南如何在现有项目中快速集成跨端页面【免费下载链接】KuiklyUI基于KMP技术的高性能、全平台开发框架具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意本仓库为Github仓库镜像PR或Issue请移步至Github发起感谢支持项目地址: https://gitcode.com/Tencent-TDS/KuiklyUI本文手把手讲解Kuikly Android 接入全流程以你现有的 Android 工程为例按 6 个步骤完成Kuikly 跨端页面集成——添加渲染器依赖、实现承载容器、配置必选适配器、编写测试页面验证。Kuikly 是基于 KMPKotlin Multiplatform的高性能跨端开发框架一份 Kotlin 页面代码即可同时运行在 Android、iOS 与鸿蒙上。 快速导航一、先认识 Kuikly跨端页面如何跑在 Android 上二、集成准备用脚手架插件 3 步创建 Kuikly KMP 工程三、添加 Kuikly 渲染器依赖只需几行 Gradle 代码四、实现承载容器Activity 与 View 两种接入方式五、实现必选适配器图片、日志、路由、线程四件套六、编写 TestPage 验证集成是否成功七、把 Kuikly 业务代码集成到现有工程八、收尾配置AndroidManifest、混淆与键盘九、调试与性能排查技巧常见问题 FAQ一、先认识 Kuikly跨端页面如何跑在 Android 上在开始 Kuikly Android 接入之前先用 1 分钟理解它的架构后面每一步配置都会豁然开朗Core 层Kotlin 声明式 UI 框架BuildTree、FlexBox 布局引擎、测量引擎完全平台无关你的页面代码就写在这里Render 层把 Core 层生成的 UI 树映射为各平台的原生视图。Android 上由core-render-android模块负责直接复用原生 View 体系所以性能接近原生callNative / callKotlinKotlin 与原生之间的双向调用通道配合 Module/Adapter 机制实现网络、存储等能力复用。这种分层带来三个直接好处统一代码库一套 Kotlin 写多端页面、极致性能内置模式渲染接近原生、动态灵活支持 JS 动态化模式页面可热更新。二、集成准备用脚手架插件 3 步创建 Kuikly KMP 工程Kuikly 接入分为两侧KMP 跨端侧写业务页面和Android 宿主侧本文重点。跨端侧可以先用 Kuikly 脚手架插件一键创建工程。1️⃣ 安装插件在 Android Studio 中安装 Kotlin 与 Kotlin Multiplatform Mobile 插件。2️⃣ 新建工程File - New - New Project选择Kuikly Project Template模板。3️⃣ 检查版本号新建后请将各配置文件中 Kuikly 版本号统一为最新版本shared/build.gradle.kts、androidApp/build.gradle.kts、iosApp/Podfile等各端版本号必须保持一致2.5.0 版本起需要添加腾讯云 maven 源。创建完成后的工程结构如下其中shared 模块就是你编写跨端页面代码的地方 跨端侧的完整接入说明见官方文档 docs/QuickStart/common.md三、添加 Kuikly 渲染器依赖只需几行 Gradle 代码在宿主工程中承载 Kuikly 页面的模块通常是 app 模块的build.gradle中添加两个依赖dependencies { implementation(com.tencent.kuikly-open:core-render-android:KUIKLY版本) // 渲染器 implementation(com.tencent.kuikly-open:core:KUIKLY版本) // 核心库 }⚠️两个关键注意点core-render-android与core的版本号必须和 KMP 跨端工程使用的 Kuikly 版本完全一致否则会出现兼容性问题最新版本号可在 docs/ChangeLog/changelog.md 查看2.5.0 版本后需要添加 maven 源maven(https://mirrors.tencent.com/repository/maven-tencent/)。渲染器模块的源码位于 core-render-android/它会把 Kuikly 的 UI 树翻译成 Android 原生 ViewKRView、KRListView、KRScrollView 等。四、实现承载容器Activity 与 View 两种接入方式方式 AActivity 接入整页场景最常用新建一个KuiklyRenderActivity作为 Kuikly 页面的承载容器核心流程是创建处理器 → 实例化 Delegator → 打开页面 → 转发生命周期四步override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 1. 创建页面打开的封装处理器pageName 从 Intent 中读取 contextCodeHandler ContextCodeHandler(pageName) // 2. 实例化 Kuikly 委托者 kuiklyRenderViewDelegator contextCodeHandler.initContextHandler() // 3. 找到布局中用于承载 Kuikly 的容器 Viewhr_container hrContainerView findViewById(R.id.hr_container) // 4. 打开 Kuikly 页面contextCode 传 pageName 为页面名pageData 为参数 contextCodeHandler.openPage(this, hrContainerView, pageName, createPageData()) } // 5~7. 在 onResume/onPause/onDestroy 中分别转发 // onResume() - delegator.onResume() // onPause() - delegator.onPause() // onDestroy()- delegator.onDetach()完整可运行实现可参考示例工程源码KuiklyRenderActivity.kt 与 ContextCodeHandler.kt。方式 BView 粒度接入混合场景如果需要在一个原生 Activity/Fragment 中嵌入一个或多个 Kuikly 子视图如瀑布流卡片、Banner 混合流可以直接使用KuiklyBaseViewval delegate object : KuiklyRenderViewBaseDelegatorDelegate { /* ... */ } kuiklyView KuiklyBaseView(this, delegate) kuiklyView?.onAttach(, yourPageName, mapOf()) // 加载 Kuikly 页面 rootView.addView(kuiklyView)对比项Activity 方式View 方式容器Delegator 管理KuiklyBaseView继承 FrameLayout生命周期由 Delegator 自动管理需手动调用onResume/onPause/onDetach尺寸自动撑满通过LayoutParams自行指定代理协议KuiklyRenderViewBaseDelegatorDelegate相同能力一致 卡片式瀑布流混合示例每个 ViewHolder 中各嵌入一个 KuiklyBaseView见 NativeAppWaterfallActivity.kt 与 NativeMixKuiklyViewDemoActivity.kt官方文档 docs/QuickStart/android.md 中有更完整的说明。五、实现必选适配器图片、日志、路由、线程四件套Kuikly 为了灵活与可扩展不内置图片下载、日志、路由等能力而是通过适配器Adapter模式委托给宿主 App 实现。共提供 9 类适配器接入优先级如下适配器作用是否必须图片加载适配器为 Image 组件提供下载解码能力✅ 必须日志适配器框架与业务的日志输出✅ 必须页面路由适配器Kuikly 页面间跳转 / 打开新容器✅ 必须线程适配器提供子线程Kuikly 不自行建线程✅ 必须异常适配器业务异常的统一处理推荐颜色转换 / 自定义字体 / APNG / PAG按需扩展能力按需各适配器的可运行示例都放在示例工程的 adapter 目录下直接对照改写即可图片KRImageAdapter.kt日志KRLogAdapter.kt路由KRRouterAdapter.kt线程KRThreadAdapter.kt异常KRUncaughtExceptionHandlerAdapter.kt实现完成后通过KuiklyRenderAdapterManager统一注入with(KuiklyRenderAdapterManager) { krImageAdapter KRImageAdapter krLogAdapter KRLogAdapter krUncaughtExceptionHandlerAdapter KRExceptionAdapter krRouterAdapter KRRouterAdapter krThreadAdapter KRThreadAdapter() } 两个实用细节图片适配器的fetchDrawable可能在非 UI 线程被调用注意线程安全使用 Compose 场景时建议在KRThreadAdapter的stackSize()返回8 * 1024 * 10248MB避免布局嵌套过深导致StackOverflowException。六、编写 TestPage 验证集成是否成功平台侧接入完成后回到 KMP 工程的shared模块新建一个最小的测试页面Page(test) class TestPage : Pager() { override fun body(): ViewBuilder { attr { allCenter(); backgroundColor(Color.WHITE) } Text { attr { fontSize(20f); color(Color.GREEN); text(Hello Kuikly) } } } }然后在合适的时机跳转到容器指定pageName为testKuiklyRenderActivity.start(context, test, JSONObject())运行后看到绿色的 Hello Kuikly 字样就说明Kuikly Android 接入已成功 。七、把 Kuikly 业务代码集成到现有工程业务代码写好之后在KMP 业务工程中执行./gradlew :shared:bundleDebugAar产物位于shared/build/output/aar可选择远程依赖发布到 Maven或本地依赖集成到现有工程。aar 本地开发模式强烈推荐在宿主工程settings.gradle中配置后把 Kuikly 业务工程以源码形式引入宿主在宿主工程中直接改 Kuikly 代码、即时编译验证无需反复打 AAR。只需在宿主工程local.properties中添加本地业务工程路径kuikly.biz.dir/path/to/kuikly-business-project完整配置步骤见 docs/DevGuide/android-dev.md。八、收尾配置AndroidManifest、混淆与键盘1. AndroidManifest.xml为承载容器 Activity 添加activity android:name.KuiklyRenderActivity android:windowSoftInputModestateUnspecified|adjustNothing /stateUnspecified避免输入框默认抢焦点让 Kuikly 页面自控焦点adjustNothing键盘弹起时不压缩 Activity 布局Kuikly 可通过keyboardHeightChange事件实现更精确的键盘规避。2. 混淆规则core-render-android已内置consumer-rules.pro引入依赖时自动生效一般无需手动配置如开启 R8 仍出现类被混淆问题可参考 core-render-android/consumer-rules.pro 补充保留规则。3. Compose 混合场景若 Android 上同时使用 Kuikly Compose 与原生 Jetpack Compose需参考 docs/Compose/faq.md 配置enableConsumeSnapshot避免状态丢失或 ANR。纯 Kuikly Compose 项目保持默认即可。九、调试与性能排查技巧Kuikly 业务代码就是普通 Kotlin 代码在 Android Studio 中可以直接断点调试KMP 工程运行androidApp即可排查启动性能时用 AS 的 ProfilerMethod Trace观察消息队列线程——其中HRContextQueueHandlerThread 就是 Kuikly 线程可以看到页面创建过程中执行了哪些任务、是否有耗时操作常见启动慢的原因created中同步等待网络请求、首屏拉取数据过多、同步 Module 调用耗时过长等系统性的分析思路可参考 docs/DevGuide/android-start-guide.md。常见问题 FAQQ1页面打开白屏 / 报兼容性问题90% 是版本不一致——请核对 KMP 工程与宿主工程的 Kuikly 版本号core、core-render-android、KMP 侧三者完全相同。Q2Image 组件图片不显示图片加载适配器是必须实现的检查KuiklyRenderAdapterManager.krImageAdapter是否已设置且fetchDrawable实现正确。Q3View 方式接入后页面不刷新View 方式的生命周期需要手动转发在宿主onResume/onPause/onDestroy中分别调用kuiklyView.onResume()/onPause()/onDetach()漏掉任一都会导致状态异常。Q4传参pageData要自己包一层param吗不需要。直接传扁平的MapString, Any或JSONObject框架内部会自动包裹。Q5Kuikly 线程是什么任务会卡死 App 吗Kuikly 复用宿主提供的子线程执行任务由线程适配器决定不会自行创建线程若业务在生命周期回调中做了耗时同步操作才会阻塞页面创建这是接入后最需要自查的一点。按照以上 6 个步骤完成Kuikly Android 接入后你的现有 Android 工程就拥有了运行跨端页面的能力——同一份 Kotlin 页面代码稍作壳工程配置即可平移到 iOS 与鸿蒙。更多组件 API 可查阅 docs/API/开发进阶内容见 docs/DevGuide/。【免费下载链接】KuiklyUI基于KMP技术的高性能、全平台开发框架具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意本仓库为Github仓库镜像PR或Issue请移步至Github发起感谢支持项目地址: https://gitcode.com/Tencent-TDS/KuiklyUI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
空间数据格式全解析:矢量、栅格、点云与转换实践 你有没有被一堆文件后缀搞到崩溃的瞬间?处理过空间数据的人,基本都经历过这个阶段:客户丢来一个文件夹,里面是.shp、.dbf、.prj、.cpg,你打开发现属性表乱码;同事给了一个GeoJSON,你用ArcGIS打开… · 2026/9/26 21:05:47
M4A本质解析:容器、编码与压缩的三维认知 1. 项目概述:从“手机里一堆.m4a文件打不开”说起你有没有过这样的经历:下载了一段播客,文件名是“episode-045.m4a”,双击打不开;微信语音转文字后导出的音频也是.m4a,发给长辈却提示“不支持该格式”&… · 2026/9/26 21:05:47
Codex 控制浏览器报错全排查:MCP 链路、双开冲突与五步定位法 老哥们,Codex 控不住浏览器这事,我最近也撞上了。不是一次两次,是折腾了大半天的程度。Codex 本身跑得好好的,对话、写代码、改文件都没问题,但只要让它去操作浏览器,它就卡住、报错、或者干脆说“我做不到… · 2026/9/26 21:05:47
Java面试核心指南:Spring Boot与AI技术栈考点全解析 1. 面试前线:先看清面试官到底在考什么做了这么多年Java,也面试过不少人,我有个特别强烈的感受:大部分候选人不是不会,而是不知道面试官问某个问题的时候,到底在等什么样的答案。比如面试官问“Spring Boot… · 2026/9/26 21:32:43
用AI搞定角色UI和音效:独立游戏开发者的完整工作流 第六期来聊聊最让独立开发者头大的美术和声音。前面几期我们基本把玩法逻辑、数值、关卡结构跑通了,但游戏放在那儿总觉得少了点什么——角色画面像半成品,按按钮没声音,战斗放技能像在默剧里表演。这期标题写得很直白:用AI完成角… · 2026/9/26 21:32:43
飞牛NAS部署云微WOC实战:Docker容器化微信运营中台 1. 项目概述:为什么在飞牛NAS上跑云微WOC不是“折腾”,而是刚需落地 云微WOC——这个缩写背后,是微信生态里一个真实存在的、被大量中小商户和私域运营团队反复验证过的轻量级服务架构。它不是什么黑科技,也不是破解微信的旁门左道… · 2026/9/26 21:32:43
GitHub API速率限制全解析与实战应对指南 1. 项目概述:当GitHub API突然“拒收”你的请求时,你在和谁打交道?“Rate limit exceeded”——这行红色报错,对任何写过自动化脚本、CI/CD流水线、数据采集工具或开源协作工具的开发者来说,都不陌生。它不是语法错误&… · 2026/9/26 21:32:43
C#与C++上位机开发全面对比:从语法差异到互操作实践 在工控和桌面开发这个圈子里,C#和C就像一对天天见面的兄弟:一个负责快速搭界面、写业务逻辑,一个负责跟硬件死磕、榨干性能。我这些年做过不少上位机项目,从西门子PLC通讯到视觉检测,几乎每个项目都是在两门语言之间来… · 2026/9/26 21:32:43
GitLab新建分支的底层原理与工程实践指南 1. 为什么“新建 GitLab 分支”不是点一下就完事的体力活 “新建 GitLab 分支”这六个字,看起来像极了办公软件里点个“新建文档”——鼠标悬停、左键轻点、输入名字、回车确认。但如果你真这么干过,大概率会在五分钟后盯着终端里一串红色报错发呆&#… · 2026/9/26 21:32:37
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46