更多平台,相同承诺:汽车、传感器、商务、视频与构建
[LOADING...]
上周的发版文章是关于在没有"诱饵调包"的情况下资助开源。本周的发版再次考验了这一理念,因为两个新功能直接涉及付费基础设施:Commerce 和 versioned builds。
这种扩张常常让模式变得模糊。平台添加开发者需要的东西,将其置于账户层级之后,随着时间推移,开源部分变差,或者付费部分开始对成功收费。我们不想滑向那种情况,所以本周有用的问题不仅是发布了什么,还包括付费部分如何运作。
Commerce 验证购买并规范化授权,但它不取代 IAP,也不抽取分成。如果配额用尽,验证会降级;Apple 或 Google 的购买仍然能完成。所有人都能获得 Secrets API,因为用量保持低位,将密钥保留在源代码之外不应当是一个奢华功能。Versioned builds 回归了,包括在较低账户层级上的有限访问,而 master 构建让社区能够验证修复,无需等待 nightly 构建件。
这是延续上周的协议:对需要成本运行的服务收费,但保持它们可选、可预测,并且尽可能广泛有用。
发版的其余部分将开源核心向外延伸:车载投影、运动传感器、更丰富的指针输入、可折叠姿态、帧精确视频、样本精确 PCM 混音和定时字幕。手机屏幕仍然是大多数应用的中心,但已不再是应用的全部。一个严肃的产品可能还需要 CarPlay 列表、Android Auto 网格、触控笔绘图表面、触控板缩放、运动手势、一个固定的生产构建,以及一个用于分享或支持的生成视频片段。
以下是发布内容。
CarPlay 和 Android Auto
PR #5281 为 Apple CarPlay 和 Google Android Auto 添加了一个可移植的 com.codename1.car API。重要的前提是:车载平台是基于模板的。它们不允许应用在仪表盘上绘制任意 Codename One Form。您需要描述一个适合驾驶的列表、网格、消息、面板、导航或当前播放模板,Codename One 会将其映射到 CarPlay 上的 CPTemplate 和 Android Auto 上的 androidx.car.app 模板。
[LOADING...]
[LOADING...]
该 API 在不使用时零成本。引用 com.codename1.car 才会告诉构建注入 CarPlay 场景、授权、Android Auto 服务和 AndroidX 依赖。从不接触该包的应用不会携带这些代码。明天的文章将详细介绍模板模型、模拟器仪表盘单元,以及您仍需要从 Apple 和 Google 获得的批准。
运动、输入和真实硬件
PR #5310 添加了 com.codename1.sensors,一个跨平台运动 API,包含加速度计、陀螺仪、磁力计、衍生重力、线性加速度、方向以及常见手势如摇晃、翻转、倾斜、拿起和自由落体。这取代了旧的独立 sensors-codenameone cn1lib,采用核心 API 和核心手势引擎。
PR #5309 补充了现代硬件的另一面:丰富的指针事件、鼠标按钮、滚轮和触控板滚动、触控笔压力和倾斜、可折叠姿态、桌面窗口和外部显示感知。
它们共同使 Codename One 不再仅限于手机。画布现在可以区分手指、鼠标和触控笔。可折叠设备可以围绕铰链分割布局。触控板捏合可以与手机捏合缩放同一个组件。周日的文章将涵盖完整的硬件故事。
Commerce 和 Secrets
PR #5300 添加了 Commerce SDK 和 Secrets API。
Commerce 是围绕 IAP 的可选基础设施。它回答了应用通常需要自己编写的后端问题:"这个用户现在有这个授权吗?"它可以验证收据、规范化跨 Apple 和 Google 的订阅状态、向您的后端发送生命周期 Webhook,并显示收入指标。它不取代 Purchase,而是委托给它。
Secrets API 的容量故意较低,并且对所有用户启用。它在运行时从云保险库获取应用可读的密钥,并缓存在 SecureStorage 中,因此 API 密钥不必存在于代码或二进制文件中。仅服务器端的凭据(如 Commerce 验证使用的 App Store 或 Google Play 密钥)留在服务端,不会提供给应用。
周一的文章主要对 Commerce 进行故障模式分析:它做什么、它拒绝做什么、配额用尽时会发生什么,以及为什么可选验证不是 IAP 税。
[LOADING...]
[LOADING...]
Versioned Builds 回归
Versioned builds 回归了,并且该模式比旧的 Ant 时代点版本方案更适合 Maven。您可以将云构建固定到已发布的 Codename One 版本,或者在需要验证未发布的修复时针对 master 构建。
社区开发者最近要求 nightly 或 daily 构建。针对 master 构建解决了同样的验证问题,而无需等待人为的每日包。您是在要求构建服务器使用当前的开发头版本。
订阅层级限制了 versioned build 的访问,因为旧版本会产生支持摩擦,而不是因为获取几个构建件驱动商业模式。构建越往回追溯,就越难诊断与当前代码的回归。新模式仍然将 versioned builds 的开放程度比以往更向下延伸,包括对基础/免费使用的有限访问,同时为付费团队提供他们实际需要的更长支持窗口。周二的文章将涵盖这个权衡。
视频、音频和字幕
PR #5315 添加了 VideoIO:使用原生编解码器的跨平台视频编码和帧精确解码。它可以将应用渲染的帧加上音频编码为 MP4/WebM/MOV/MKV 格式的容器,枚举编解码器,解码精确帧,重采样可变帧率片段,并将音轨暴露为 PCM。
PR #5317 添加了一个样本精确的 AudioMixer,用于在同一个时钟上混合 PCM 音轨。PR #5319 添加了定时 Whisper 转录,因此生成的视频可以获得 SRT 或 VTT 字幕,而不是纯文本转录。
[LOADING...]
周三的文章展示了这些组件如何配合:渲染帧、混合音频、编码视频、解码帧,并附加定时字幕。
较小但重要的改动
有四个较小的改动值得指出:
- JavaSE 上游 JCEF 和 bundled ffmpeg 媒体。 PR #5294 将模拟器从我们自建的 Chromium 84 CEF 分支迁移到上游预构建的 JCEF。我们以前构建自己的 CEF 分支主要是为了保持 H.264 媒体正常工作。那个构建既漫长又脆弱,并且让我们落后。新方法使用上游 JCEF 处理浏览器,并使用 bundled ffmpeg 处理 Codename One
MediaAPI。 - Skin Designer 现在使用我们的 JavaScript 端口构建。 PR #5303 将 Skin Designer 迁移到本地的 ParparVM JavaScript 目标。Initializr 和 Playground 已经迁移;控制台现在是最后一个 TeaVM 内部工具。这次迁移确实暴露了一个回归,但 JavaScript 端口仍在向生产环境迈进。
- MorphTransition 成长了。 PR #5314 添加了不透明度、旋转、缩放、确定性擦洗以及任意渲染元素。这对 UI 打磨很重要,也对帧导出很重要,因为擦洗使得同一个过渡可以被渲染成生成的视频。
- 定时 Whisper 转录。 PR #5319 也值得再次提及,因为定时片段将转录变成了字幕。该 cn1lib 可以根据片段时间戳渲染 SRT 和 VTT 有效负载。
即将发布的文章
- 周六。 PR #5281。
- 周日。 PRs #5310 和 #5309。
- 周一。 PR #5300。
- 周二。 。
- 周三。 PRs #5315、#5317 和 #5319。
- 周四。 Game Builder 教程系列的最终部分。
总结
本次发版规模庞大,因为应用覆盖范围更广了。它涵盖了汽车、可折叠设备、桌面、传感器、触控笔设备、媒体管道、云验证和更旧的构建时间线。
业务方面需要与 API 方面同样的纪律。云验证应该提供帮助,而不是挟持购买。构建层级应该购买容量和支持窗口,而不是保留自己收入的许可。可选应该意味着可选,尤其是在项目保持开源的情况下。
文章 More Surfaces, Same Deal: Cars, Sensors, Commerce, Video And Builds 最早发布于 foojay。