<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[唐诺]]></title><description><![CDATA[纸上得来终觉浅，绝知此事要躬行！]]></description><link>https://blog.youkuaiyun.com/zhijiandedaima</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; zhijiandedaima]]></copyright><item><title><![CDATA[5、Android JNI 动态注册中的“签名“详解]]></title><link>https://blog.youkuaiyun.com/zhijiandedaima/article/details/170127823</link><guid>https://blog.youkuaiyun.com/zhijiandedaima/article/details/170127823</guid><author>zhijiandedaima</author><pubDate>Thu, 05 Nov 2026 10:19:40 +0800</pubDate><description><![CDATA[在动态注册中，其中signature（签名）是的字段。本文系统讲清楚：签名是什么、规则如何、怎么获取、为什么必须精确、以及与"APK 签名"的区别。]]></description><category></category></item><item><title><![CDATA[4、集中式动态注册：注册清单集中，方法实现分离]]></title><link>https://blog.youkuaiyun.com/zhijiandedaima/article/details/170127561</link><guid>https://blog.youkuaiyun.com/zhijiandedaima/article/details/170127561</guid><author>zhijiandedaima</author><pubDate>Thu, 05 Nov 2026 10:17:25 +0800</pubDate><description><![CDATA[前文"单文件集中式"把实现也塞进，方法一多文件就膨胀。本篇给出JNI_OnLoad。这是你现有代码的实际形态，也是"集中式"更常见、更可维护的写法。]]></description><category></category></item><item><title><![CDATA[3、Android JNI 动态注册后，新增 Native 方法要改哪些地方]]></title><link>https://blog.youkuaiyun.com/zhijiandedaima/article/details/170125917</link><guid>https://blog.youkuaiyun.com/zhijiandedaima/article/details/170125917</guid><author>zhijiandedaima</author><pubDate>Thu, 05 Nov 2026 09:52:27 +0800</pubDate><description><![CDATA[上一篇给出了动态注册的工程化结构（独立注册中枢 + 各模块实现文件自治）。按照上一篇的结构，答案是，并且几乎不需要触碰注册中枢。]]></description><category></category></item><item><title><![CDATA[1、Android JNI 静态注册 vs 动态注册：差异与防逆向]]></title><link>https://blog.youkuaiyun.com/zhijiandedaima/article/details/170125295</link><guid>https://blog.youkuaiyun.com/zhijiandedaima/article/details/170125295</guid><author>zhijiandedaima</author><pubDate>Thu, 05 Nov 2026 09:50:11 +0800</pubDate><description><![CDATA[防护手段静态注册动态注册Java 混淆后 native 名是否暴露是否能否隐藏 C++ 实现符号很难（名字被规则约束）容易（static能否对注册信息加密基本不能能（类名/方法名/签名运行时解密）能否打乱绑定关系不能能（注册表混淆）商业加固兼容性一般更好若项目对防逆向有要求，动态注册几乎是必选项。它把"契约"从符号表转移到了运行时的数据表，配合加密、符号隐藏、反调试即可显著抬高逆向成本。]]></description><category></category></item><item><title><![CDATA[2、Android JNI 动态注册实战（1）]]></title><link>https://blog.youkuaiyun.com/zhijiandedaima/article/details/170125757</link><guid>https://blog.youkuaiyun.com/zhijiandedaima/article/details/170125757</guid><author>zhijiandedaima</author><pubDate>Thu, 05 Nov 2026 09:49:11 +0800</pubDate><description><![CDATA[设计点收益单一注册中枢JNI_OnLoad只此一处，逻辑集中不分散模块自治注册表各模块自维护，互不干扰清单聚合一眼看清全局绑定关系同一类多次注册天然支持多模块注册到同一 Java 类扩展成本低新增方法只改实现文件；新增模块改清单 + CMake 各一行。]]></description><category></category></item><item><title><![CDATA[Flutter Riverpod 状态管理实践指南]]></title><link>https://blog.youkuaiyun.com/zhijiandedaima/article/details/167465970</link><guid>https://blog.youkuaiyun.com/zhijiandedaima/article/details/167465970</guid><author>zhijiandedaima</author><pubDate>Sat, 10 Oct 2026 09:37:04 +0800</pubDate><description><![CDATA[新建一个文件，比如 counter_provider.dart，使用 @riverpod 注解。这会生成 counter_provider.g.dart，里面包含可直接使用的 counterProvider。Riverpod 的设计目标是让状态管理这件事变得可预测、可测试、可组合。注解版和手动版并不是对立的两条路，而是同一套 API 的两种使用方式。]]></description><category></category></item><item><title><![CDATA[Flutter UI 适配方案对比：从 flutter_screenutil 到原生响应式]]></title><link>https://blog.youkuaiyun.com/zhijiandedaima/article/details/166454820</link><guid>https://blog.youkuaiyun.com/zhijiandedaima/article/details/166454820</guid><author>zhijiandedaima</author><pubDate>Wed, 23 Sep 2026 09:20:07 +0800</pubDate><description><![CDATA[Flutter UI 适配无绝对优劣：若仅限手机端且需像素级还原，flutter_screenutil 快速高效；若需兼容平板、折叠屏或 Web，重视可维护性与无障碍体验，原生响应式更优。前者依赖等比缩放，代码侵入强、难迁移；后者基于空间自适应，支持 const、布局灵活，长期更可持续。建议根据项目边界决策，必要时可分阶段过渡。]]></description><category></category></item><item><title><![CDATA[1、iOS 证书体系核心文件：关系与区别全解析]]></title><link>https://blog.youkuaiyun.com/zhijiandedaima/article/details/164853628</link><guid>https://blog.youkuaiyun.com/zhijiandedaima/article/details/164853628</guid><author>zhijiandedaima</author><pubDate>Thu, 10 Sep 2026 15:35:00 +0800</pubDate><description><![CDATA[本地私钥是 Mac 钥匙串中与证书配对使用的一把“数字钥匙”，它只存在于生成 CSR 的那台 Mac 上，苹果服务器和证书文件里都没有它。没有私钥，证书就是一张“没有印章的身份证”，无法用来签名 App。CSR：申请表，生成时本地产生私钥。本地私钥：Mac 钥匙串中的“数字钥匙”，签名 App 的唯一凭证，只存在于本机，丢了只能重新生成。开发证书：调试用的身份证。发布证书：分发/上架用的身份证。APNs 证书：推送专用的身份证，分开发/生产两套。描述文件。]]></description><category></category></item><item><title><![CDATA[3、iOS 打包证书与描述文件操作详细流程]]></title><link>https://blog.youkuaiyun.com/zhijiandedaima/article/details/164851280</link><guid>https://blog.youkuaiyun.com/zhijiandedaima/article/details/164851280</guid><author>zhijiandedaima</author><pubDate>Thu, 10 Sep 2026 15:07:13 +0800</pubDate><description><![CDATA[本文详细阐述iOS打包证书与描述文件全流程：从生成CSR、创建App ID，到申请开发/发布证书、添加测试设备、创建对应描述文件（Development/Ad Hoc/App Store），并指导导出.p12用于团队协作或APNs推送。最后通过Xcode归档导出IPA，支持蒲公英内测分发或提交App Store。附快速自查清单及工具推荐（如Fastlane match），确保流程清晰、高效，避免因证书缺失或配置错误导致打包失败。]]></description><category></category></item><item><title><![CDATA[BLE蓝牙实时传输：当“只管发送”遇上“底层流控”]]></title><link>https://blog.youkuaiyun.com/zhijiandedaima/article/details/164298455</link><guid>https://blog.youkuaiyun.com/zhijiandedaima/article/details/164298455</guid><author>zhijiandedaima</author><pubDate>Wed, 02 Sep 2026 15:29:14 +0800</pubDate><description><![CDATA[<think>我们需要根据用户要求，生成≤150字的文章摘要。用户提供了完整的文章内容，主题是BLE Notify模式与底层流控机制。需要提炼核心观点。摘要应简洁，不超过150字。总结三个层次？注意字数。我们需生成一段话，涵盖文章主要矛盾：应用层Notify不管，底层协议栈有流控；二者不同层次；物理层ACK和窗口机制；最终统一。控制在150字内。确保不超过150字。可写：文章解析BLE Notify“只管发送”与底层“暂停取数”的矛盾，指出二者分属应用层与协议栈层。应用层调用非阻塞、不等待；底层为物理链路稳]]></description><category></category></item><item><title><![CDATA[Flutter 插件中 C++ 跨端编译之 dart:ffi]]></title><link>https://blog.youkuaiyun.com/zhijiandedaima/article/details/164148155</link><guid>https://blog.youkuaiyun.com/zhijiandedaima/article/details/164148155</guid><author>zhijiandedaima</author><pubDate>Fri, 28 Aug 2026 15:58:48 +0800</pubDate><description><![CDATA[维度AndroidiOS构建工具产物形式独立 .so 动态库静态链接进 Runner 二进制Dart 加载方式编译触发自动.podspec自动纳入编译手动命令通常不需要通常不需要（已集成）]]></description><category></category></item><item><title><![CDATA[Dart FFI 完全指南：从入门到实战]]></title><link>https://blog.youkuaiyun.com/zhijiandedaima/article/details/163942899</link><guid>https://blog.youkuaiyun.com/zhijiandedaima/article/details/163942899</guid><author>zhijiandedaima</author><pubDate>Fri, 21 Aug 2026 11:23:23 +0800</pubDate><description><![CDATA[Dart FFI 实战指南摘要 Dart FFI 是 Dart 与 C/C++ 互操作的核心工具，特别适合 Flutter 中需要高性能计算或复用原生代码的场景。本文从基础概念到实战应用，系统讲解： 核心机制：通过类型映射实现 Dart 调用 C 函数，需注意 C++ 需用 extern "C" 导出符号 两种集成方式： 源码集成（适合自有代码） 预编译库（适合第三方库） 完整开发流程： 编写 C/C++ 代码并编译为动态库 使用 DynamicLibrary 加载库 通过 lookup+asFunctio]]></description><category></category></item><item><title><![CDATA[Flutter BLE高频数据处理方案对比]]></title><link>https://blog.youkuaiyun.com/zhijiandedaima/article/details/163939585</link><guid>https://blog.youkuaiyun.com/zhijiandedaima/article/details/163939585</guid><author>zhijiandedaima</author><pubDate>Fri, 21 Aug 2026 10:37:54 +0800</pubDate><description><![CDATA[本文对比了Flutter BLE开发中处理高频数据（如8kHz心电设备）的三种方案：Dart解析、透传原生层处理、FFI直接调用C++。通过性能、开发成本、维护性和调试难度四个维度的分析，指出方案三（FFI）在高频场景下最优，具备零拷贝、无线程切换优势；方案一适合低频简单场景；方案二因多级拷贝和双端维护成本，不推荐高频使用。最终建议根据数据频率和团队技术栈选择：低频选Dart方案，高频医疗设备优先FFI方案，已有原生SDK可考虑透传方案但需承担性能损耗。]]></description><category></category></item><item><title><![CDATA[技术博客模板与排版规范]]></title><link>https://blog.youkuaiyun.com/zhijiandedaima/article/details/163746538</link><guid>https://blog.youkuaiyun.com/zhijiandedaima/article/details/163746538</guid><author>zhijiandedaima</author><pubDate>Fri, 14 Aug 2026 10:28:43 +0800</pubDate><description><![CDATA[本文提供了技术博客写作的标准化模板，包含标题层级、文本样式、排版格式、内容组织等规范。重点包括：标题不超过四级，代码块须指定语言，中英文间加空格，遵循"概述-概念-展开-注意-总结"结构，代码示例要精简可运行，语言表达需规范统一。适用于各类技术主题文章，并附有质量检查清单和示例。通过标准化排版和内容组织，确保技术博客清晰易读、结构一致。]]></description><category></category></item><item><title><![CDATA[flutter StreamController 完全使用指南]]></title><link>https://blog.youkuaiyun.com/zhijiandedaima/article/details/163746151</link><guid>https://blog.youkuaiyun.com/zhijiandedaima/article/details/163746151</guid><author>zhijiandedaima</author><pubDate>Fri, 14 Aug 2026 10:17:29 +0800</pubDate><description><![CDATA[Dart StreamController 使用摘要 StreamController 是 Dart 中管理异步数据流的核心工具，包含 stream(数据出口)和 sink(数据入口)两部分。它分为单订阅流(单一消费者)和广播流(多消费者)两种类型。 关键点： 单订阅流适合文件读取等单一消费者场景 广播流适合传感器数据等多组件响应场景 通过 sink 可限制外部操作权限 使用完成后必须调用 close 避免内存泄漏 典型应用场景包括： UI事件处理(广播流) 实时数据流(广播流) 单次数据加载(单订阅流) ]]></description><category></category></item><item><title><![CDATA[Android USB ADB 调试方案完全解析]]></title><link>https://blog.youkuaiyun.com/zhijiandedaima/article/details/163474050</link><guid>https://blog.youkuaiyun.com/zhijiandedaima/article/details/163474050</guid><author>zhijiandedaima</author><pubDate>Tue, 04 Aug 2026 14:52:58 +0800</pubDate><description><![CDATA[Android ADB调试方案全面解析 摘要： 本文深入解析Android ADB调试方案，重点介绍ADB的三层架构（客户端-服务端-守护进程）及其工作原理。详细阐述了USB连接建立流程，包括物理连接、协议握手和认证机制。特别探讨了ADB端口转发技术，提供了一套完整的APP内实现ADB TCP服务的实践方案，包括服务端实现、消息边界协议设计和通信管理。文章还涵盖了ADB版本演进历史和现代特性（如无线调试），为开发者提供了从基础到高级的ADB调试技术指南，帮助解决实际开发中的调试挑战。]]></description><category></category></item><item><title><![CDATA[iOS 开发证书与描述文件创建指南]]></title><link>https://blog.youkuaiyun.com/zhijiandedaima/article/details/163368134</link><guid>https://blog.youkuaiyun.com/zhijiandedaima/article/details/163368134</guid><author>zhijiandedaima</author><pubDate>Fri, 31 Jul 2026 15:10:58 +0800</pubDate><description><![CDATA[本文详细介绍了iOS开发中证书（Certificate）和描述文件（Provisioning Profile）的创建流程。证书用于验证开发者身份，分为开发证书和发布证书两种；描述文件则规定了应用可运行的设备和功能。文章从准备工作开始，逐步讲解如何生成CSR文件、创建证书、添加测试设备，以及最终创建描述文件并打包IPA文件。同时还解释了各种文件格式（.cer、.mobileprovision等）及其关系，并提供了常见问题解答。通过这份指南，iOS开发者可以系统地掌握应用打包和分发的核心流程。]]></description><category></category></item><item><title><![CDATA[Android Open Accessory (AOA) 协议完全解析]]></title><link>https://blog.youkuaiyun.com/zhijiandedaima/article/details/163310385</link><guid>https://blog.youkuaiyun.com/zhijiandedaima/article/details/163310385</guid><author>zhijiandedaima</author><pubDate>Wed, 29 Jul 2026 17:40:14 +0800</pubDate><description><![CDATA[文章摘要： Android Open Accessory (AOA) 协议是Google制定的标准，允许Android设备通过USB与外部配件交互，解决早期Android设备无法主动控制外设的问题。核心机制是通过角色反转，让外部配件充当USB主机，Android设备作为从机。协议支持两种模式：Host Mode（Android为主机）和Accessory Mode（外部配件为主机），在供电、控制权、API使用等方面存在差异。AOA有两个版本：AOAv1支持基础通信，AOAv2新增音频流和HID功能。协议握手]]></description><category></category></item><item><title><![CDATA[2、iOS APNs证书获取与配置完全指南]]></title><link>https://blog.youkuaiyun.com/zhijiandedaima/article/details/163246423</link><guid>https://blog.youkuaiyun.com/zhijiandedaima/article/details/163246423</guid><author>zhijiandedaima</author><pubDate>Mon, 27 Jul 2026 16:28:17 +0800</pubDate><description><![CDATA[本文提供了从生成APNs证书到配置友盟+推送功能的完整指南，包含四个关键步骤：生成CSR文件、创建APNs证书、导出.p12文件以及上传至友盟后台。针对每个环节都给出了详细的操作说明和常见问题解答，特别强调了开发环境和生产环境证书的区别及处理方式。文章还总结了常见错误速查表，帮助开发者快速排查问题。通过这份指南，即使是首次接触iOS推送的开发者也能顺利完成APNs证书的配置工作。]]></description><category></category></item><item><title><![CDATA[Flutter Pigeon 跨端通信实战指南]]></title><link>https://blog.youkuaiyun.com/zhijiandedaima/article/details/163101809</link><guid>https://blog.youkuaiyun.com/zhijiandedaima/article/details/163101809</guid><author>zhijiandedaima</author><pubDate>Wed, 22 Jul 2026 11:07:41 +0800</pubDate><description><![CDATA[本文介绍了在Flutter混合开发中使用Pigeon进行跨端通信的实践指南，特别适用于医疗级硬件SDK开发。Pigeon通过"契约优先"的方式，自动生成双端通信代码，解决了传统MethodChannel的字符串匹配和类型安全问题。文章详细阐述了从接口定义、代码生成到项目结构的完整流程，包括配置开发依赖、定义通信协议、执行代码生成及原生端实现等关键步骤。同时提供了标准项目结构设计和核心注意事项，强调禁止修改生成文件、保持接口定义文件纯粹性以及处理高频数据流等要点。Pigeon的强类型机制为医疗级SDK提供了安]]></description><category></category></item></channel></rss>