ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Hippy Android 3.x SDK 集成指引:环境准备、Maven/本地集成与引擎接入全流程

Hippy Android 3.x SDK 集成指引:环境准备、Maven/本地集成与引擎接入全流程 跨平台移动开发前端【免费下载链接】HippyHippy is designed to easily build cross-platform dynamic apps. 项目地址https://gitcode.com/gh_mirrors/hi/Hippy点击查看免费下载本文以 Hippy 3.x 在 Android 平台上的 SDK 集成为主线完整覆盖 Android Studio 环境配置NDK / CMake / Gradle / AGP / JDK 版本约束、Maven 与本地 AAR 两种集成方式、以及引擎初始化与hippyRootView挂载的核心代码流程。读完本文你可以将 Hippy 3.x SDK 接入现有 Android 工程理解各构建参数的来源可对照仓库内 gradle.properties 与 framework/android/gradle.properties并掌握 3.0 版本引擎初始化的调用链与销毁时序等关键约定。一、Android Studio 环境配置以下文档都假设开发者已经具备一定的 Android 开发经验。在集成 Hippy 3.x SDK 之前需要按仓库工程配置锁定一组工具链版本。这些版本已在工程配置文件中指定其中 NDK 会在第一次 Sync project 时自动安装CMake 需要开发者在Settings Android SDK中手动下载并设置配置项版本NDK_VERSION25.0.8775105CMAKE_VERSION3.22.1GRADLE_VERSION7.4AGP_VERSION7.2.2这些版本号的来源可以在仓库中直接确认根目录 gradle.properties 指定了MIN_VERSION21、COMPILE_VERSION33、TARGET_VERSION30等 SDK 侧参数而 framework/android/gradle.properties 中显式定义了NDK_VERSION25.0.8775105与CMAKE_VERSION3.22.1framework/android/build.gradle 则通过ndkVersion NDK_VERSION、cmake { version CMAKE_VERSION ... }将其应用到构建流程。注意由于暂未对 8.x AGP 及 Gradle 版本作适配请忽略 Android Studio 中弹出的 AGP 升级提示。此外在Settings Build, Execution, Deployment Build Tools Gradle中下载并设置 Version 17 的 JDK 版本完成配置后执行 Sync project 即可完成 Gradle 构建。从源码结构看本仓库采用 CMake 统一驱动 C 模块编译framework/android/build.gradle 中通过-DMODULES${getAllModules().join(;)}将REQUIRED_MODULESsupport, dom与OPTIONAL_MODULESdriver/js, renderer/native见根 gradle.properties拼接成 CMake 参数传入src/main/cpp/CMakeLists.txt因此 CMake 版本锁定是构建成功的必要前提。二、Demo 体验若想快速体验可以直接基于仓库自带的 Android Demo 工程来开发。该 Demo 的源码位于framework/examples/android-demo/src/main/java/com/openhippy/example/下其中HippyEngineWrapper.kt完整演示了从引擎创建、初始化、加载 JS 模块到挂载根视图的全流程是后续章节讲解的参照实现。三、快速接入3.1 创建 Android 工程创建一个 Android 工程SDK 工程支持的minSdkVersion21宿主工程支持的minSdkVersion不能低于该版本。这一约束与根 gradle.properties 中MIN_VERSION21的取值一致。3.2 Maven 集成在 Maven Central 上查询com.tencent.hippy组下的 Hippy 版本后配置build.gradle下面引用 Hippy 的版本号可在 Maven Central 查询此处为文档给出的示例版本implementation com.tencent.hippy:release:3.3.3 implementation androidx.legacy:legacy-support-v4:1.0.0 implementation androidx.recyclerview:recyclerview:1.1.0 implementation androidx.viewpager:viewpager:1.0.0关于坐标com.tencent.hippy:release的构成可以从仓库的发布配置中得到印证framework/android/gradle.properties 中定义了PUBLISH_GROUP_IDcom.tencent.hippy并注明PUBLISH_ARTIFACT_IDrelease对应 release 构建另有hippy-release/hippy-debug两种可选 artifact 命名framework/android/publish.gradle 负责实际的发布逻辑。另外由于 AAR 中通过consumerProguardFiles proguard-rules.pro见 framework/android/build.gradle自动附加混淆规则宿主工程一般无需额外处理 Hippy 的 ProGuard 配置。3.3 本地集成可选如果对 SDK 有二次开发或源码调试需求可以选择本地集成在 hippy-framework 工程运行 Gradle Taskother assembleRelease或者other assembleDebug会在framework/android/build/outputs/aar目录下生成release或者debug模式的android-sdk.aar将android-sdk.aar拷贝到你项目的libs目录下。AAR 产物名android-sdk来源于 framework/android/gradle.properties 中的ARCHIVES_BASE_NAMEandroid-sdkframework/android/build.gradle 的dealAfterAssemble任务在assembleRelease/assembleDebug完成后会统一重命名产物并将 release 产物同步拷贝到 android-demo/libs 供 Demo 使用。注意通过assembleReleasetask 生成的 AAR 默认不携带inspector模块不能在前端通过 Devtools 对代码进行调试。若需要集成inspector请执行assembleDebugtask。这一点与构建脚本一致仅 debug 构建类型的 CMake 参数中包含-DENABLE_INSPECTOR$ENABLE_INSPECTOR而 release 构建没有该项。配置build.gradleapi (name:android-sdk, ext:aar) implementation androidx.legacy:legacy-support-v4:1.0.0 implementation androidx.recyclerview:recyclerview:1.1.0 implementation androidx.viewpager:viewpager:1.0.0需要留意的是本地 AAR 是 fat-aar 产物framework/android/build.gradle 中embed了:serialization、:hippy-support、:vfs、:pool、:devtools-integration以及各 connector 模块framework/android/connector下的 dom、driver、renderer 子模块由根 settings.gradle 动态 include因此本地集成时不要再重复引入这些子模块。3.4 引擎初始化与 hippyRootView 挂载最后一步是在宿主 APP 工程中增加引擎初始化与hippyRootView挂载逻辑。参照 Android Demo 工程中HippyEngineWrapper的实现HippyEngineWrapper.kt完整流程分为四步1构造 EngineInitParams 并创建引擎val initParams EngineInitParams() initParams.context context initParams.debugServerHost debugServerHost // 调试服务器地址调试模式下使用 initParams.debugMode isDebug initParams.enableLog true initParams.logAdapter DefaultLogAdapter() initParams.groupId 1 // 根据前端框架选择核心 JS 资源 initParams.coreJSAssetsPath react/vendor.android.js // 或 vue2/...、vue3/... initParams.codeCacheTag common_1.0 // 建议 tag 拼接 js versiontag 会用来拼接 v8 code cache 文件的路径 initParams.exceptionHandler object : HippyExceptionHandlerAdapter { override fun handleJsException(e: HippyJsException) { LogUtils.e(hippy, e.message) } override fun handleNativeException(e: Exception, haveCaught: Boolean) { LogUtils.e(hippy, e.message) } override fun handleBackgroundTracing(details: String) { LogUtils.e(hippy, details) } } val providers: MutableListHippyAPIProvider ArrayList() providers.add(ExampleAPIProvider()) initParams.providers providers initParams.enableTurbo true val hippyEngine HippyEngine.create(initParams)引擎入口为 HippyEngine.java 中的public static HippyEngine create(EngineInitParams params)。2初始化引擎hippyEngine.initEngine(object : EngineListener { override fun onInitialized(statusCode: EngineInitStatus, msg: String?) { if (statusCode ! EngineInitStatus.STATUS_OK) return // 初始化成功后继续 loadModule } })3加载 JS 模块并获取 rootViewval loadParams ModuleLoadParams() loadParams.context context loadParams.componentName Demo loadParams.codeCacheTag Demo_1.0 // 建议 tag 拼接 js version loadParams.jsAssetsPath react/index.android.js // 业务 bundle 路径 loadParams.jsFilePath null loadParams.jsParams HippyMap() loadParams.jsParams.pushString(msgFromNative, Hi js developer, I come from native code!) hippyRootView hippyEngine.loadModule(loadParams, object : ModuleListener { override fun onLoadCompleted(statusCode: ModuleLoadStatus, msg: String?) { /* ... */ } override fun onJsException(exception: HippyJsException): Boolean true override fun onFirstViewAdded() { /* 第一个 view 挂载到 Hippy root view 的时机 */ } override fun onFirstContentfulPaint() { /* ... */ } })从 HippyEngineManagerImpl.java 的抽象声明可以看到3.0 中loadModule直接返回ViewGroup类型宿主拿到hippyRootView后即可将其添加到自己的容器视图中。4页面销毁fun destroy() { hippyEngine.destroyModule(hippyRootView) { result, e - hippyEngine.destroyEngine() } hippyRootView null }destroyModule的接口签名为void destroyModule(Nullable ViewGroup rootView, NonNull CallbackBoolean callback)必须等待销毁完成回调后才能调用destroyEngine()。四、3.0 版本集成的关键约定结合 3.0 架构升级指引 中的 Android 章节接入 3.0 SDK 时还有以下约定需要注意初始化回调线程变更3.0 中onInitialized回调直接在子线程执行并继续执行loadModule效率更高。此前 2.0 在 callback 中对hippyRootView相关的 UI 操作开发者需要自己切到 UI 线程保证——Demo 中的loadCallbackTask正是通过UIThreadUtils.isOnUiThread()判断后决定是否runOnUiThread的典型处理。引擎销毁时序destroyEngine需要等destroyModule执行完成回调以后才能调用否则可能存在 CRASH 风险上文的销毁示例即标准写法。接口解耦destroyModule参数以及loadModule返回值均使用系统ViewGroup类型替代 SDK 内部视图类型减少宿主对 SDK 的耦合。onFirstViewAdded回调loadModule的ModuleListener简化了onLoadCompleted不再返回 root view 参数并新增onFirstViewAdded回调返回第一个 view 挂载到 Hippy root view 的时机可用于撤除占位视图等场景。图片加载体系重构2.0 中的HippyImageLoader必设项已被移除图片数据的网络拉取与解码解耦统一走 vfs 模块分发网络请求最终由 HttpAdapter 处理新增可选的ImageDecoderAdapter引擎初始化时通过imageDecoderAdapter参数设置提供preDecode/afterDecode/destroyIfNeeded接口以支持自定义格式图片解码。资源请求 Processor引擎初始化参数新增public ListProcessor processors;可用于自定义资源请求处理链详见 VFS 特性文档。组件事件发送全局事件仍使用HippyEngine暴露的sendEvent接口UI Component 事件则使用 3.0 新增工具类EventUtils封装的sendComponentEvent(Nullable View view, NonNull String eventName, Nullable Object params)接口标注MainThread。Render node 缓存特性3.0 重新实现了性能更好的 render node 缓存接口如recordSnapshot/replaySnapshot见 HippyEngine.java 及 RenderNode Snapshot 文档Demo 的recordRenderNodeSnapshot/replaySnapshot用法可作为参考。五、小结与延伸阅读按本文流程完成接入后宿主工程即可跑通「创建引擎 → 初始化 → 加载模块 → 挂载 rootView → 按回调时序销毁」的完整链路。建议进一步阅读以下仓库文档以深入各专题Hippy 3.0 架构升级指引2.0 到 3.0 的差异与升级验证关注点Native 集成文档 与 原生适配文档自定义模块 / 组件接入VFS 特性 与 RenderNode Snapshot资源分发与快照缓存特性调试文档基于 inspector 的 Devtools 调试方式。赞分享跨平台移动开发前端【免费下载链接】HippyHippy is designed to easily build cross-platform dynamic apps. 项目地址https://gitcode.com/gh_mirrors/hi/Hippy点击查看免费下载相关推荐Agones与游戏引擎集成Unity、Unreal等主流引擎的完整接入指南Agones是一个专为Kubernetes设计的开源游戏服务器编排平台它为多人在线游戏提供了专用的游戏服务器管理和自动扩缩容解决方案。通过Agones游戏开游戏开发云原生Flowable多引擎集成BPMN流程引擎实战Flowable多引擎集成BPMN流程引擎实战 本文深入探讨了Flowable BPMN流程引擎的核心功能与实践应用。BPMN 2.0作为业务流程建模的行业标后端工作流自动化流程编排Waves API完全手册开发者必知的接口调用与集成技巧Waves API完全手册开发者必知的接口调用与集成技巧 Waves区块链节点提供了功能丰富的API接口帮助开发者快速构建去中心化应用和服务。本文将详细介绍区块链后端上一篇突破模态壁垒Ming-UniVision开创连续表征驱动的多模态AI新纪元下一篇GPT-OSS核心协议解密Harmony格式架构解析与开发指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表