发布时间:2026/8/27 12:37:39
[间章] 关于重写platform判断平台的一些尝试 在开发shine_image思考的时候我在空闲时间写下这两段代码。主要是借用rust来对宿主平台进行判断。由于flutter本身的platform判断不了鸿蒙与各家厂商的系统ui而我是能不写双端代码就不写的原则所以简单的尝试了下倒是没想到成功的如此简单。首先我们先在rust侧编写一个enum。pub enum Platform { Unknown, Android, Ios, Windows, Unix, MacIntel, MacApple, Wasm, HarmonyOSVersion2, HarmonyOSVersion3, }就是各个系统我判断了HarmonyOS系统其实如果你想判断miuiemuiflyme烂橘子之类的都是可以的后面会说明。由于不做处理HarmonyOS会被默认识别为Android但它又是个很特别的系统所以重视一些。然后我们通过rust的cfg!()宏进行判断宿主环境。由于cfg支持的平台只有图中这些所以直接判断HarmonyOS的想法是不现实的。而通过std::env::args获取的系统标识经过实测emui与HarmonyOS是一致的。也就没法用它来判断。于是我想到安卓的getprop命令在rust侧能否拿到它实际查询了一下发现用std::process::Command确实是可以拿到prop信息的这里我编写了一个check_description()方法并将它输出到flutter侧。拿我的魅族17pro测试在页面输出如图看到了很多熟悉的prop了吧这里的ro.build.flyme.version就可以用来判断是否是flyme平台类似于emuimiui也可以通过ro.build.version.emui与ro.miui.ui.version.name之类的进行判断总之这些第三方厂商ui都会往里面塞一些自己家的信息。而HarmonyOS中会有哪些信息值得我们重视的呢打印HarmonyOS的prop我们会发现这两项以hw_sc开头的prop。前者开发过ets或者ark-ui的大概就很熟悉它是鸿蒙的api版本根据我个人的ets开发经历在api4以上就是HarmonyOS了而api8以上则是最新的HarmonyOS 3.0。那么剩下的就很简单了编写一个platform()方法该方法返回一个Platform的enum。pub fn platform() - Platform { if cfg!(windows) { Platform::Windows } else if cfg!(target_os android) { let output Command::new(getprop) .arg(hw_sc.build.os.apiversion) .output() .expect(获取prop失败); let android_text String::from_utf8(output.stdout).expect(u8字符转换为string出现错误); let use_text android_text.trim(); if use_text.is_empty() { return Platform::Android; } let android_number use_text.parse::i32().expect(字符串转换为整形出现错误); if android_number 4 android_number 8{ return Platform::HarmonyOSVersion2; }else if android_number 8 { return Platform::HarmonyOSVersion3; } else { return Platform::Android; } } else if cfg!(target_os ios) { Platform::Ios } else if cfg!(all(target_os macos, target_arch aarch64)) { Platform::MacApple } else if cfg!(target_os macos) { Platform::MacIntel } else if cfg!(target_family wasm) { Platform::Wasm } else if cfg!(unix) { Platform::Unix } else { Platform::Unknown } }这样我们就成功的实现了编写一个我们自己的platform事不宜迟我们赶紧测试一下吧这里我找了两个拥有HarmonyOS设备的朋友。一个是HarmonyOS 3.0一个是HarmonyOS 2.0。我们编写个简单的text()输出的页面打印的结果如下:而使用HarmonyOS 2.0的设备朋友忘了截图设备信息了直接上输出页面的图:最后试试我的flyme会不会误识别:看来没问题。那么这个自建的platform有什么用呢如果你需要针对HarmonyOS或者某些特定的厂商ui平台调用其特有的api或是处理特定平台的bug那么它可能就会帮很大的忙。关于platform的探索就到这了明天还得继续忙活我的shine_image的逻辑呢不过如果大家喜欢这样的间章的话之后我也会时不时出一点间章的文章毕竟我还是蛮喜欢折腾奇奇怪怪的东西。我建立了一个flutter的初始项目体验小工程把我文章写的一些东西展示在这边并且用户可以看到它运作正常我打算将它打包在apk在下篇文章的时候提供给有想要试玩的小伙伴玩一玩。作者琼八万链接https://juejin.cn/post/7182638122901962811最后如果想要成为架构师或想突破20~30K薪资范畴那就不要局限在编码业务要会选型、扩展提升编程思维。此外良好的职业规划也很重要学习的习惯很重要但是最重要的还是要能持之以恒任何不能坚持落实的计划都是空谈。如果你没有方向这里给大家分享一套由阿里高级架构师编写的《Android八大模块进阶笔记》帮大家将杂乱、零散、碎片化的知识进行体系化的整理让大家系统而高效地掌握Android开发的各个知识点。相对于我们平时看的碎片化内容这份笔记的知识点更系统化更容易理解和记忆是严格按照知识体系编排的。全套视频资料一、面试合集二、源码解析合集三、开源框架合集欢迎大家一键三连支持若需要文中资料直接点击文末CSDN官方认证微信卡片免费领取↓↓↓

相关新闻

2026/8/27 12:37:38

Android:解决 MVI 架构实战痛点

说在前头: 纪晓岚问和珅,为何他们往灾民粥里掺沙子,和珅道:“你是有所不知啊,如不掺沙子,灾民怕是一口粥也喝不上啊”。 同理,架构的存在是为 “在实际开发过程中消除不可预期问题”&#xff0c…

2026/8/27 12:37:38

Jetpack Compose : 一学就会的自定义下拉刷新加载更多

前言 一个成熟Androider的标志是自定义下拉刷新&加载更多😁 自定义下拉刷新你会怎么做? 因为我这个人比较懒(其实就是菜),所以直接拿Compose自带的下拉刷新来修改。 这里先上效果图,第一张是Compose…

2026/8/27 12:37:38

腾讯、阿里团队共同出品,Android音视频开发进阶指南

随着5G时代的到来,短视频逐步占据了人们的日常生活。现在,也有越来越多的公司高薪招聘音视频开发的人才,一个稍有经验的音视频人才现在可能会有3-4家公司抢着要。因此,对音视频人才的需求也从小众变成了大众,这更多的是…

2026/8/27 13:27:43

低成本搭建医疗管理系统,低代码平台成企业首选

上个月,我一个开诊所的朋友跟我抱怨,说想上一套管理系统,结果问了一圈,动辄几十万起步,还得等上大半年。他那小本经营,哪扛得住这个?其实不只是他,很多医疗相关企业都有这个痛点。买…

2026/8/27 13:27:43

政企转型必备,程序员力荐的低代码管理平台选型指南

兄弟们,最近是不是被各种“数字化转型”搞得头大?尤其咱们搞技术的,在政企项目里,最怕听到“需求又变了”、“这个月底能上线吗”。传统开发模式,业务部门等不起,咱们开发兄弟也熬不起。我去年就经历过一个…

2026/8/27 13:27:43

基于RWKV的中文网文生成实战:从模型原理到LoRA微调

简介:在自然语言处理与AI写作工具快速演进的今天,生成式模型的长文本建模能力成为核心议题。传统Transformer架构的自注意力机制虽在语义理解上表现出色,却受限于平方级计算复杂度,难以支撑小说、网文等超长文本的高效生成。RWKV作…

2026/8/27 13:27:43

解密prompt系列26. 人类思考vs模型思考:抽象和发散思维

前言 在Chain of Thought出来后,出现过许多的优化方案例如Tree of thought, Graph of Thought, Algorithm of Thought等等,不过这些优化的出发点都更加"Machine Like",而非"Human Like", 哈哈不是说机器化不好,仅仅是对A…

2026/8/27 13:27:43

Physical AI经验工程:构建机器人全链路数据基建的实践指南

之前在机器人项目里做数据闭环时,最头疼的不是模型训练,而是“经验”本身很难被采集、标注、回放和复用。同一个搬运动作,老师傅做出来是丝滑的,模型学出来却是抖动的;同样的导航策略,仿真环境里跑得很好&a…

2026/8/27 13:22:42

数字压力传感器如何提升设计灵活性:接口、封装与选型指南

1. 从模拟到数字:压力传感器这颗料到底帮工程师省了什么做嵌入式硬件这些年,我对传感器选型最大的感触是:一颗料的选择,往往不只是封装和 pin 脚的替换,而是整个设计思路的变化。标题里这句"Digital Pressure Sen…

2026/8/26 9:13:28

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/27 10:58:22

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/27 7:46:21

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/27 0:01:16

Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用

1. 项目概述:从零构建一个企业级的AI服务网关 最近在帮一个做内容审核的团队做技术架构升级,他们原来的业务里,每天有几十万张图片和短视频需要过审,最初是接了几个开源的AI模型自己部署,但效果和性能一直不太稳定。后…

2026/8/27 0:01:16

LeetCode Hot100(51-60)算法精解与面试技巧

1. 题目背景与核心价值"hot100(51-60)"这个标题看起来像是某个编程题库或算法练习集中的一组题目编号。在技术社区中,类似命名通常指向LeetCode、牛客网等平台的热门题目集合。作为刷过300题的算法老手,我理解这类题目的核心价值在于&#xff…

2026/8/27 0:01:16

CRC校验实战:从模2除法到HJ212协议排错

1. 为什么一个“校验码”能扛住工业现场90%的数据 corruption? 你有没有遇到过这样的场景:嵌入式设备通过RS-485上传温湿度数据,上位机偶尔收到一帧乱码——温度显示成-273℃,湿度跳到999%,但串口波形看起来完全正常&a…

2026/8/26 19:34:06

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/26 19:17:08

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/26 19:34:05

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…