开源实验室 张涛的开源实验室 https://www.kymjs.com/ 2025年05月20日 2025年05月20日 Jekyll v4.3.4 【HarmonyOS】TheRouter 鸿蒙版新手入门 TheRouter 鸿蒙版是货拉拉基于HMRouter深度定制的开源路由框架,提供了 Android、iOS、Harmony 三端高一致性使用,在支持平台化应用实现组件化、跨模块调用、动态化等功能的集成等功能基础上,支持动态路由下发、编译时安全检查、路由Path一对多等高度动态能力。 2025年03月23日 https://www.kymjs.com/code/2025/03/23/01 TheRouter code 为 TheRouter 的 AGP8 编译加个速 文章围绕 TheRouter 的 AGP8 编译提速展开,指出 toTransform()方法编译慢且无法增量编译,提出多种解决思路,包括结合 AsmClassVisitorFactory 等,最终通过 toGet()方法、内存缓存及对比等优化,实现增量编译和保障产物结果。 2024年10月31日 https://www.kymjs.com/code/2024/10/31/01 TheRouter code NAS - 玩点有意思的 最近新买了一个NAS,装个黑群晖,感觉可玩的还挺多。 2024年08月05日 https://www.kymjs.com/stickies/2024/08/05/01 生活 3 思绪万千 stickies 动态路由 TheRouter 的设计与实践 这篇文章是我在 2022【GIAC 全球互联网架构大会】分享时所讲内容的文字版本,修改删减了演讲时的冗余言语,现开放给大家阅读,希望能给买不到票参加分享的 开源实验室 读者带来帮助。 2022年11月23日 https://www.kymjs.com/session/2022/11/23/01 TheRouter session 没错,TheRouter 是我写的 路由是现如今移动端开发中必不可少的功能,尤其是企业级APP,可以用于将Intent页面跳转的强依赖关系解耦,同时减少跨团队开发的互相依赖问题。<br> TheRouter 是一整套完全面向模块化开发的解决方案,不仅能支持常规的模块依赖解耦、页面跳转,同时提供了模块化过程中常见问题的解决办法。 2022年09月05日 https://www.kymjs.com/code/2022/09/05/01 TheRouter code 货拉拉 Android 模块化路由框架:TheRouter 路由是现如今移动端开发中必不可少的功能,尤其是企业级APP,可以用于将Intent页面跳转的强依赖关系解耦,同时减少跨团队开发的互相依赖问题。<br> TheRouter 是一整套完全面向模块化开发的解决方案,不仅能支持常规的模块依赖解耦、页面跳转,同时提供了模块化过程中常见问题的解决办法。 2022年09月04日 https://www.kymjs.com/code/2022/09/04/01 TheRouter code 菲律宾这国家到底怎么回事 5月开头,这周其实有两件大事:一件是俄罗斯胜利日大阅兵,大家关心的是普京会说些什么。西方觉得普京会对乌克兰宣战。因为这关系到三件事:这仗会不会打出乌克兰国界外;这仗会打到什么程度;这仗会打多久。<br>但事实证明,它们的格局太低了。普京的演讲,表明了俄罗斯的态度:要终结西方自从大航海时代以来500年的海洋霸权,尤其是近200年来的盎格鲁撒克逊人的霸权。 之前俄罗斯方面就这么宣称过,但红场阅兵不一样:在俄罗斯,它的收视率达到50%以上,这等于普京向全国人民正式宣布了。 2022年05月11日 https://www.kymjs.com/history/2022/05/11/01 菲律宾史 history 印度的穆斯林王朝——德里苏丹 蒙古成吉思汗这个大BUG,说大半个世界被他一锅端都不过分,当时突厥的古尔王朝还有一点残余势力,他们以印度河恒河流域的枢纽,从德里这个城邦为中心建立了一个伊斯兰化的邦国叫德里苏丹国。<br><br>但问题是这个国家它其实不算是个国家,因为他本身的就是四十几个阿富汗突厥贵族为了利益组成的一种诸侯联邦状态。这个状态就有点像我们的战国时期,各个诸侯表面上都说自己是周天子的子民,但实际上都自立为王。当时的德里苏丹国也是这样,内部矛盾很多,要不是印度土著擅长躺平,估计早就像陈胜吴广一样揭竿而起,干翻这个王国了。 2022年05月08日 https://www.kymjs.com/history/2022/05/08/01 印度史 history 学历史有什么用 凡是在朋友圈问我这个问题的,我基本上都是一句话:互联网没有增量了,多学点历史没坏处的。因为手机上解释的多了,我打字累,再加上别人也不一定愿意听,可能纯粹就是随便问一句。 2022年05月04日 https://www.kymjs.com/history/2022/05/04/01 世界史 history 印度的列国时代大一统——孔雀王朝 于是大约在公元前800-600年,相当于中国的春秋时期。这时期印度内部各种各样的种族斗争,被称为列国时代,跟我们的战国时期很像。加上后面的波斯入侵,希腊入侵,孔雀王朝崛起,精彩程度丝毫不亚于我们的战国时期。 2022年05月03日 https://www.kymjs.com/history/2022/05/03/01 印度史 history 印度列国时代的百家争鸣——沙门思潮 大约公元前800年-公元前100年,当时的印度有十六国,正处于列国时代,学术流派百家争鸣。耆那教并不是当时唯一反对婆罗门教的宗教。除了耆那教外,还有佛教、顺世派、不可知论派等等许多思想流派,它们被统称为沙门思潮。 2022年05月02日 https://www.kymjs.com/history/2022/05/02/01 印度史 history 印度真是个神奇的国度——总章 前段时间在研究阿富汗的时候,特意了解了一下中东地区几个国家的历史,看着看着反倒觉得印度是个神奇的存在,因为整个印度的历史基本上就是印度的屈辱史,被各种民族各种国家入侵,然后关键他到现在还能活着。所以特意写一系列文章讲一讲。 2022年05月01日 https://www.kymjs.com/history/2022/05/01/01 印度史 history 某一天,中国真会超过美国吗? 最近一直在苦苦思考这个问题:会不会我们所说的某一天,永远都不会到来? 2022年03月30日 https://www.kymjs.com/stickies/2022/03/30/01 生活 3 思绪万千 stickies 基于 C++ 的 Android 协程设计 在Android 上,Kotlin 用灵活的语法封装出语言层面的协程(coroutine)新颖地解决了异步编程编码复杂的问题。本次分享将带领听众从一个小例子开始,更加深入,自顶向下的理解协程是什么,协程的本质与工作机制,动手设计出一个真正运行时的协程库 2022年02月26日 https://www.kymjs.com/session/2022/02/26/01 C/C++ session Gradle 6.X 上传 aar 到 Nexus 私服 昨天把 gradle 升级到 6.0 以后,发现这傻逼的 google 又直接干 API,以前上报的全部脚本都没法用了。我们原先上报一个 aar,是直接引入。 2021年02月02日 https://www.kymjs.com/pay/2021/02/02/01 Gradle pay 自定义C/C++日志输出函数 在繁杂的项目中,日志打印必不可少。但是编写打印的工作,有时候是无趣的、繁琐的、浪费精力的。<br> 如何能够快速、方便的编写打印;如何清晰、准确的定位;如何简单并优雅的实现;最后才能让我们摆脱这样枯燥的、重复的工作?<br> 网上有很多强大的日志类工具,我也都使用过一些,有时候也并没有理想中的方便。今天我想分享给大家的一套我自己的解决方案。 2020年08月07日 https://www.kymjs.com/code/2020/08/07/01 C/C++ code 扁平化管理,就是管理者的失职 奉劝大家一句:千万不要想不开跑去小公司,尤其是在大厂已经做到高P的,即便小公司给你的许诺更好。因为在小公司呆久了你会发现只可能有两种变化,要么脾气会变的越来越暴躁,要么整个人变得越来越佛系。 2020年06月29日 https://www.kymjs.com/pay/2020/06/29/01 策划与管理 pay 再聊 Git Flow 最近定了一些团队标准的东西,刚好聊到了 Git Flow 这个事,可以拿出来分享一下。 2020年05月29日 https://www.kymjs.com/manager/2020/05/29/01 策划与管理 manager Flutter 设置控件是否可见 共有两种实现比较简单的方式。 第一种比较好理解,将一个控件的透明度设置成0,打到隐藏的目的。第二种办法是使用 SDK 自带的 Offstage 控件包裹。 2020年03月19日 https://www.kymjs.com/note/2020/03/19/01 8 知识碎片 note Flutter 线性布局:Column 和 Row Flutter 线性布局:Column 和 Row 的常用属性 2020年03月18日 https://www.kymjs.com/note/2020/03/18/01 8 知识碎片 note 开源一段 Mac 批量压缩图片的脚本 开源一个批量压缩图片的脚本,支持文件夹递归,可选质量压缩和宽高比压缩,可选设置最大宽高和大小,纯shell脚本实现。 2020年03月17日 https://www.kymjs.com/note/2020/03/17/01 8 知识碎片 note Leader 的自我修养——学会预测 用一句话概括,本文讲的就是:怎样通过自己的专业深度,帮助公司和团队预测未来。<br>很多时候,之所以能够做到预测未来,无非是你掌握的信息比别人要多而已。 2020年03月15日 https://www.kymjs.com/manager/2020/03/15/01 策划与管理 manager 玩玩区块链——概念 继我成功预言了 Kotlin 、Flutter 技术会火起来之后,我相信,下一个会火起来的技术是区块链。<br> 1. 别抬杠,我 14 年开始玩 Kotlin,16 年开始玩 Flutter (虽然看了看实现原理觉得没啥屁用就放弃了)的时候,可能你还不知道这俩名词呢。<br> 2. 别抬杠,我说的火起来的区块链技术是私链+合约(我不想提那俩字,我觉得智障更合适)。<br> 3. 抬杠吧,反正我从来没玩过数字货币,我也不怕被割韭菜。<br> 2019年11月21日 https://www.kymjs.com/code/2019/11/21/01 区块链 code 一条电商 Android 工程化实践 这篇文章是我在 2019【极光开发者大会】技术分享时所讲内容的文字版本,修改删减了演讲时的冗余言语,现免费开放给大家阅读, 希望能给买不到票参加大会的开源实验室读者带来帮助。 2019年11月02日 https://www.kymjs.com/session/2019/11/02/01 Android session 最新版提升 Android 应用编译速度的方法 应用的构建速度会直接影响开发效率,本文将带您通过改造一个 Android 应用: "Google 追踪圣诞老人 (Google Santa Tracker)" 来为大家提供十个小技巧,帮助提升应用的 Gradle 构建速度,当我们应用了所有的小技巧之后,该演示应用的构建速度快了三倍以上。 2019年08月15日 https://www.kymjs.com/note/2019/08/15/01 8 知识碎片 note Beta 6 现已发布,Android Q 正式版即将面世! 再过几周,Android Q 正式版就要与大家见面啦!目前,Android 团队正在对平台进行最后的优化与调试。同时今天向各位开发者发布最后一个 Beta 测试版: Android Q Beta 6。 2019年08月12日 https://www.kymjs.com/news/2019/08/12/01 news GitHub 开始阻止被制裁国的开发者使用 上周五,国外新闻网站 ZDNet 发表了一篇报道<b> GitHub</b>与跟世界贸易摩擦国的程序员关系的文章 —— GitHub starts blocking developers in countries facing US trade sanctions(GitHub 开始阻止被制裁国的开发者使用)。 2019年07月29日 https://www.kymjs.com/news/2019/07/29/01 news 中国的开源项目正在破坏 GitHub 榜单页 近日一名国外开发者(Balazs Saros,下简称 Balazs)在个人博客发表了一篇看似是在<b>声讨</b>中国开发者的文章,标题起得有点唬人 —— Chinese repos are ruining the Github trending page(中国的开源项目正在破坏 GitHub 榜单页)。 2019年07月17日 https://www.kymjs.com/news/2019/07/17/01 news Leader 的自我修养 —— Tech 与 Team 用一句话概括,本文讲的就是:怎样打造一个开发团队。 2019年07月13日 https://www.kymjs.com/manager/2019/07/13/01 策划与管理 manager Facebook Libra,数字货币离我们很近吗? Libra的使命是建立一个简单的全球货币和金融基础设施,为数十亿人提供支持。<br>互联网和移动宽带的出现使全球数十亿人能够获得世界的知识和信息,高保真通信以及各种低成本,更便捷的服务。这些服务现在可以使用来自世界上几乎任何地方的40美元智能手机进行访问.1这种连接通过让更多人能够访问金融生态系统来推动经济赋权。通过合作,技术公司和金融机构也找到了有助于提高全球经济能力的解决方案。尽管取得了这一进展,但仍有大量世界人口落后 - 全球仍有17亿成年人不在金融体系之内,无法使用传统银行,即使10亿人拥有移动电话,近5亿人拥有互联网接入。 2019年06月23日 https://www.kymjs.com/pay/2019/06/23/01 pay 如何在 Android 代码中下毒 这其实是前几天看到 B 站代码被开源后的一个感想,为什么要冒这么大风险去做这事,活着不好吗?到底是 996 让你疯狂?还是不给涨薪还克扣工资?或者黑了你的蔡徐坤?鬼知道为什么会有这想法。 然后脑子里就冒出了一个更奇怪的想法,如果我要在代码里下毒,要怎么做? 2019年04月23日 https://www.kymjs.com/code/2019/04/23/01 Android code 使用 Ngrok 实现内网穿透 最近在做 Server 开发,需要将一个内网的服务暴露出去,使其在家也能访问到。 2019年02月18日 https://www.kymjs.com/note/2019/02/18/01 8 知识碎片 note Kotlin 1.3 发布,协程正式版发布啦 从 Kotlin 1.3 开始,协程将进入稳定状态。此后不再会被标注为`experimental`,官方也会提供相应的工具帮助开发者完成迁移工作。<br>Ktor,这个库的 API 已经完善,期待大家的使用体验和反馈。Ktor 是一个基于协程的框架,使用它我们可以优雅的构建 Web 应用、Http 服务、移动应用和网页。 2018年10月30日 https://www.kymjs.com/news/2018/10/30/01 8 知识碎片 news 重新理解创业:失败并不可怕 在一个新点子冒出来的时候,我们首先要甄别这个是什么级别的思考。如果只是把事情从 9 分变成 9.5 分,这就是花很大力气去做小数点后面的事,没有太大的用处。可是,现在大多数公司都在努力做小数点以后的事。 2018年10月23日 https://www.kymjs.com/pay/2018/10/23/01 pay Android 将 module 导出为 jar 最新版 今天碰上公司 Nexus 网络服务挂了,结果 aar 没办法 upload 。而偏偏遇上工程遗留问题,不支持 aar 直接依赖,只能想办法导出 jar 包依赖。所幸,操作还比较简单,但是这种方法只适合于每月资源引用的代码,而且还不支持传递依赖。 2018年10月22日 https://www.kymjs.com/note/2018/10/22/01 8 知识碎片 note Android Studio 3.2 更新重点 版本帝最近更新的频率变低了,自从 2018 年 Google I/O 大会 Android Studio 宣布更新后,Google 精炼和完善了 20 多项新功能,并集中力量提升 Android Studio 3.2 稳定版的质量。 2018年10月16日 https://www.kymjs.com/news/2018/10/16/01 8 知识碎片 news Android 十年,还有哪些可以做的 这篇文章是我在【2018安卓巴士开发者大会】技术分享时所讲内容的文字版本,修改删减了演讲时的冗余言语。 独家发布在小专栏平台,希望能给我专栏订阅读者里买不到票参加大会的朋友带来帮助。 2018年09月22日 https://www.kymjs.com/pay/2018/09/22/01 Android pay IPv6 地址格式 IPv6 地址大小为 128 位。首选 IPv6 地址表示法为 x:x:x:x:x:x:x:x,其中每个 x 是地址的 8 个 16 位部分的十六进制值。IPv6 地址范围从 0000:0000:0000:0000:0000:0000:0000:0000 至 ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff。 2018年09月21日 https://www.kymjs.com/note/2018/09/21/01 8 知识碎片 note addOnDrawListener 方法的兼容性问题 当一个视图树绘制时调用`OnDrawListener`的`onDraw()`函数。但是这个方法在 `Android8.0` 之前有个坑:`View` 在 `attach` 到 `window` 之前调用 `getViewTreeObserver().addOnDrawListener()` 将不会进入回调。因为`ViewTreeObserver`的`merge()`方法中没有处理`OnDrawListener`详见源码 2018年09月20日 https://www.kymjs.com/note/2018/09/20/01 8 知识碎片 note 如何成为优秀的技术主管?你要做到这三点 「技术主管」是开发团队中的某位程序员需要对一起创建系统的整个开发团队负责时所承担的角色。通常他既要对最终交付的软件系统负责,另外也会像一个程序员一样去开发实现系统。<br>一个技术主管的 60% 〜 70% 的时间可能花在了开发任务分解分配、开发实践、技术架构评审、代码审核和风险识别上,而余下的 30% 〜 40% 的时间则花在为了保障系统按时交付所需的各种计划、协作、沟通、管理上。和团队管理者不同的是,技术主管的大部分管理工作都是针对具体研发任务和技术事务的。 2018年09月14日 https://www.kymjs.com/pay/2018/09/14/01 pay Android P 加载 dex 失败 `dex2oat`是 `ART` 虚拟机必备的一个组件,主要用来把安装的 `apk` 和动态加载的 `dex` 等文件转换成 `oat` 文件.主要是由于从一开始, `dex2oat` 就被设计为系统内部使用的编译部署工具.所以在高版本上生成格式发生了变化.所以再去用 `BaseDexClassLoader`或者是`DexClassLoader`、`PathClassLoader`等加载的时候就会出错. 2018年09月13日 https://www.kymjs.com/note/2018/09/13/01 8 知识碎片 note Android 正则判断手机号(包含网络运营商) Android 正则判断手机号, 2018年最新, 包含网络运营商 2018年09月12日 https://www.kymjs.com/note/2018/09/12/01 8 知识碎片 note Mac上更新Ruby环境 想要升级Mac上自带的Ruby环境,需要使用到RVM。 2018年09月11日 https://www.kymjs.com/note/2018/09/11/01 8 知识碎片 note Android 获取 IP 地址 开发中经常会需要判断当前是否连接网络, WiFi 或 移动数据连接判断的需求。 2018年09月10日 https://www.kymjs.com/note/2018/09/10/01 8 知识碎片 note AndroidStudio更换xml默认的布局 自从 AndroidStudio 到 2.3 了以后,新建一个 Activity,默认的布局就从以前的 `LinearLayout` 变成了 Google 强推的 `ConstraintLayout`,但其实这个布局是可以被修改的。 2018年09月09日 https://www.kymjs.com/note/2018/09/09/01 8 知识碎片 note Android Native Crash 收集 在 Android 平台上,Native Crash 一直是比较麻烦的问题,因为捕获麻烦,获取到了内容又不全,内容全了信息又不对,信息对了又不好处理。比 Java Crash 不知道麻烦多少倍。本篇核心讲解了自己实现一个 Android Native Crash 收集的方案步骤,重点问题的解决办法。 2018年08月22日 https://www.kymjs.com/code/2018/08/22/01 C/C++ code Android 通过 APT 解耦模块依赖 Android APT 的新玩法,生成类的特殊加载方式。在 Android 多 module 工程中使用 APT,会出现类冲突问题,如果你也碰上这种问题,希望本文对你有所帮助。 2018年08月12日 https://www.kymjs.com/code/2018/08/12/01 Android code 套路博弈背后的代码 每个人都会沉迷在自己的戏里,就看什么时候观众会看不下去而叫醒你。——《说故事的人》 2018年05月06日 https://www.kymjs.com/stickies/2018/05/06/01 笔记 stickies Android 模块化平台设计-讲稿 这篇文章是我在 2018【携程技术沙龙移动技术专场】技术分享时所讲内容的文字版本,修改删减了演讲时的冗余言语。 希望能给买不到票参加大会的朋友带来帮助。<br>演讲文稿版内容更精细,没有分享时语言的赘述和过多的废话,而且包含了很多分享时没有讲的内容,包含PPT下载。(如下载链接过期可加我微信) 2018年04月22日 https://www.kymjs.com/session/2018/04/22/01 Android session 《Android模块化平台的设计》PPT 目前国内对Android领域的探索已经越来越深,应用规模也越来越大,为了降低大型项目的复杂性和耦合度,同时也为了适应模块重用、多团队并行开发测试等等需求,模块化在 Android平台上变得势在必行。<br> 本次分享将为大家介绍如何将完整项目模块化,改造后如何更快速的与使团队适应开发节奏;怎样优雅的移除模块间耦合,可以在不改动代码的情况下做到模块的动态增删;以及模块的开发、构建、更新、提测、发布流程化建议。 2018年04月21日 https://www.kymjs.com/session/2018/04/21/01 Android 6 Android模块化 session

AltStyle によって変換されたページ (->オリジナル) /