PageSourceSearch

https://kymjs.com/column/kotlin.html

html kymjs.com collected 2026-10-03 23:15:26 UTC 45,220 bytes, 1 lines download raw bytes

1<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="baidu-site-verification" content="DNdTGSjyq5"/> <meta name="360-site-verification" content="500b6f06da3a51cca675cc8343443d0e"/> <title>开源实验室</title> <!-- Add to home screen for Safari on iOS --> <meta name="mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-status-bar-style" content="black"> <meta name="apple-mobile-web-app-title" content="开源实验室"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="apple-touch-icon" href="favicon.jpg"> <!-- Add to home screen for IE on Windows --> <meta name="msapplication-TileImage" content="favicon.jpg"> <meta name="msapplication-TileColor" content="#2F3BA2"> <meta name="description" content="张涛的开源实验室博客,为你讲述 android,kotlin,协程,闭包,lambda,sdk,studio,等优质开发技术"> <meta name="keyword" content="张涛的开源实验室博客,为你讲述 android,kotlin,协程,闭包,lambda,sdk,studio,等优质开发技术"> <meta name="keywords" content="张涛的开源实验室博客,为你讲述 android,kotlin,协程,闭包,lambda,sdk,studio,等优质开发技术"> <link rel="manifest" href="/manifest.json"> <link rel="canonical" href="https://www.kymjs.com/"> <link rel="alternate" type="application/rss+xml" title="开源实验室" href="https://www.kymjs.com/feed.xml"/> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/font-awesome/css/font-awesome.min.css"> <link rel="stylesheet" type="text/css" href="https://cdn.kymjs.com:8843/qiniu/static/css/bootstrap1.css"> <link rel="stylesheet" type="text/css" href="https://cdn.kymjs.com:8843/qiniu/static/css/index17.css"> <link rel="stylesheet" type="text/css" href="https://cdn.kymjs.com:8843/qiniu/static/css/prism1.30.0.css"> <link rel="stylesheet" type="text/css" href="https://cdn.kymjs.com:8843/qiniu/static/css/swiper.min.css"> <link rel="stylesheet" type="text/css" href="https://cdn.kymjs.com:8843/qiniu/static/css/gitalk.css"> 
1<script src="https://cdn.kymjs.com:8843/qiniu/static/js/gitalk.min.js"></script>
1 
1<script src="https://cdn.kymjs.com:8843/qiniu/static/live2d/autoload.js"></script>
1 
1<script type="text/javascript" src="https://cdn.kymjs.com:8843/qiniu/static/js/swiper.min.js"></script>
1 
1<script type="text/javascript" src="//apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script>
1 
1<script type="text/javascript" src="https://cdn.kymjs.com:8843/qiniu/static/js/index21.js"></script>
1 
1<script type="text/javascript" src="https://cdn.kymjs.com:8843/qiniu/static/js/prism1.30.0.js"></script>
1 
1<script src="https://cdn.kymjs.com:8843/qiniu/static/js/mermaid-init.js" defer></script>
1 
1<script>insertParam();</script>
1 
1<script> var _hmt = _hmt || []; (function () { var hm = document.createElement("script"); hm.src = "//hm.baidu.com/hm.js?12d2f5b556fafe71819af97b2ec2c5e8"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script>
1 
1<script> if ('serviceWorker' in navigator) { navigator.serviceWorker .register('/service-worker.js') .then(function () { console.log('Service Worker Registered'); }); } </script>
1 </head> <body> <div class="only-pc"> <header> <!-- navbar --> <nav class="navbar navbar-inverse"> <div class="kymjs-container kymjs-navbar-header"> <!-- Brand and toggle get grouped for better mobile display --> <div class="navbar-header"> <a class="navbar-brand" href="/"><img src="https://cdn.kymjs.com:8843/qiniu/image/logo3.png" width="296px" height="75px" /></a> </div> <!-- Collect the nav links, forms, and other content for toggling --> <div id="bs-example-navbar-collapse-1"> <ul class="nav navbar-nav navbar-right header-title"> <li> <a href="https://1-0.top/weekly/"> <span class="glyphicon glyphicon-list"></span> 周刊 </a> </li> <li class="active"> <a href="/"><span class="glyphicon glyphicon-home"></span> 主页</a></li> <li> <a href="/fragment"><span class="glyphicon glyphicon-file"></span> 历史</a></li> <li><a href="https://vcnedpub4ekz.feishu.cn/wiki/VPYAwf9URixw64kVWkfcmzusnHy?table=tblVn3z42GTSMThF&view=vewZcIBEL6"><span class="glyphicon glyphicon-folder-open"></span> 说说</a></li> <li> <a href="/works"><span class="glyphicon glyphicon-globe"></span> 开源</a></li> <li> <a href="/about"><span class="glyphicon glyphicon-user"></span> 关于</a></li> </ul> </div><!-- /.navbar-collapse --> </div><!-- /.container-fluid --> </nav> </header> </div> <div id="main" class="kymjs-container main"> <div id="index" class="row"> <div class="col-sm-9"> <div class="post-area"> <!-- 当前页码 --> <!-- 当前页起第一条博客的下标 --> <!-- 全站总博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的碎片笔记数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的碎片笔记数 --> <!-- 需要分页的碎片笔记数 --> <!-- 需要分页的碎片笔记数 --> <!-- 需要分页的碎片笔记数 --> <!-- 需要分页的碎片笔记数 --> <!-- 需要分页的碎片笔记数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 --> <!-- 需要分页的博客数 -->
1 <!-- 技术博客总页码 --> <!-- Fragment总页码 --> <div class="only-phone"> <style> .swiper-slide img{ width: 100%; height: 100%; } .swiper-container { width: 100%; height: 100%; padding-bottom: 30px; } .swiper-slide { text-align: center; font-size: 18px; background: #fff; /* Center slide text vertically */ display: -webkit-box; display: -ms-flexbox; display: -webkit-flex; display: flex; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-box-align: center; -ms-flex-align: center; -webkit-align-items: center; align-items: center; } </style> <!-- Swiper --> <div class="swiper-container"> <div class="swiper-wrapper"> <div class="swiper-slide"> <a href="/column/kotlin.html"><img src="https://cdn.kymjs.com:8843/qiniu/images/column/kotlin_logo2.jpg"></a> </div> <div class="swiper-slide"> <a href="/column/plugin.html"><img src="https://cdn.kymjs.com:8843/qiniu/images/column/plugin.jpg"></a> </div> <div class="swiper-slide"> <a href="/c/"><img src="https://cdn.kymjs.com:8843/qiniu/images/column/c.jpg"></a> </div> <div class="swiper-slide"> <a href="/column/pwa.html"><img src="https://cdn.kymjs.com:8843/qiniu/images/column/pwa_logo.jpg"></a> </div> <div class="swiper-slide"> <a href="/column/resourcecode.html"><img src="https://cdn.kymjs.com:8843/qiniu/images/column/resourcecode2.jpg"></a> </div> <div class="swiper-slide"> <a href="/presentations/"><img src="https://cdn.kymjs.com:8843/qiniu/images/column/conf.jpg"></a> </div> </div> <!-- Add Pagination --> <div class="swiper-pagination"></div> </div> <!-- Initialize Swiper --> 
1<script> var swiper = new Swiper('.swiper-container', { slidesPerView: 3, spaceBetween: 10, loop: true, pagination: { el: '.swiper-pagination', clickable: true, }, navigation: { nextEl: '.swiper-button-next', prevEl: '.swiper-button-prev', }, autoplay: { delay: 2000, disableOnInteraction: false, }, breakpoints: { 0: { slidesPerView: 1, spaceBetween: 10, }, 640: { slidesPerView: 2, spaceBetween: 10, }, 768: { slidesPerView: 2, spaceBetween: 20, }, 1024: { slidesPerView: 3, spaceBetween: 10, }, } }); </script>
1 </div> <div class="post-list-body"> <div class="all-posts" post-cate="All"> <div class="post-list-item"> <a href="https://kymjs.com/history/2022/05/04/01/" title="学历史"> <span class="entry-date date published"> <font color="#aaaaaa"> 开源实验室置顶消息 </font> </span> <h2> <font color="#DC143C">【精】</font> <font color="#333333">学历史有什么用</font> </h2> <p><font color="#666666">之前在朋友圈发我学中亚地区历史的时候,碰到朋友问的最多的问题就是这个了:学历史有什么用。<br>凡是在朋友圈问我这个问题的,我基本上都是一句话:互联网没有增量了,多学点历史没坏处的。因为手机上解释的多了,我打字累,再加上别人也不一定愿意听,可能纯粹就是随便问一句。</font></p> </a> </div> <a href="/code/2026/08/24/01/" title="DeepSeek Harness源码分析:给非 AI 开发者的 Agent 架构长文"> <div class="post-list-item"> <span class="entry-date date published"> <font class="kymjs-post-tag-code">技术</font> <time datetime="2026-08-24T00:00:00+08:00"> <font color="#aaaaaa"> kymjs张涛 创作于 2026-08-24 </font> </time> </span> <h2> <font color="#333333">DeepSeek Harness源码分析:给非 AI 开发者的 Agent 架构长文</font> </h2> <p><font color="#666666"> 我自己的工作经验更偏客户端与工程化,而不是「天天训模型」。第一次接触 coding agent 时,最容易被两件事打懵:一是名词爆炸——Agent、Tool、Skill、MCP、Plugin、Harness 好像都在说「能扩展」,却说不清边界;二是打开像 DeepSeek Harness 这种仓库,包名与 `ctx.xxx` 服务键铺天盖地,不知道该先抓哪根绳子。 这篇博客是我整理给自己、也整理给所有非 AI 开发者的一条路径。 </font></p> </div> </a> <a href="/code/2026/06/15/01/" title="一个月,纯VibeCoding,全平台云笔记APP"> <div class="post-list-item"> <span class="entry-date date published"> <font class="kymjs-post-tag-code">技术</font> <time datetime="2026-06-15T00:00:00+08:00"> <font color="#aaaaaa"> kymjs张涛 创作于 2026-06-15 </font> </time> </span> <h2> <font color="#333333">一个月,纯VibeCoding,全平台云笔记APP</font> </h2> <p><font color="#666666"> 我做这个云笔记的初衷其实挺简单:找不到一个好用的全平台笔记。 大部分都是鸿蒙不能用;鸿蒙能用的,又不支持私有化存储;能私有化存储的,体验又很差。换了好几个,从 Notion 到 Obsidian 到 Joplin,没一个能完整满足我的需求。 </font></p> </div> </a> <a href="/code/2026/02/28/01/" title="借助 API 手写一个 Transformer 架构"> <div class="post-list-item"> <span class="entry-date date published"> <font class="kymjs-post-tag-code">技术</font> <time datetime="2026-02-28T00:00:00+08:00"> <font color="#aaaaaa"> kymjs张涛 创作于 2026-02-28 </font> </time> </span> <h2> <font color="#333333">借助 API 手写一个 Transformer 架构</font> </h2> <p><font color="#666666"> 在当今AI时代,技术几乎是按周来涌现的。对于我这种古老程序员来说,虽然是体验了不少AI产品,甚至自己源码跑了 Dify,Llamaindex这些破玩意,但 AI 大模型仍然是一个神秘的黑盒子。出于本能,还是觉得应该研究一些不变的东西。 </font></p> </div> </a> <a href="/stickies/2025/12/12/01/" title="PT 站规则扫盲"> <div class="post-list-item"> <span class="entry-date date published"> <font class="kymjs-post-tag-stickies">生活</font> <time datetime="2025-12-12T00:00:00+08:00"> <font color="#aaaaaa"> kymjs张涛 创作于 2025-12-12 </font> </time> </span> <h2> <font color="#333333">PT 站规则扫盲</font> </h2> <p><font color="#666666"> 最近邀请了不少新人,结果好多被封号的,浪费了邀请码实在可惜,特意再写一篇详细的 PT 站规则扫盲贴,帮助新人更好的通过新手任务。 </font></p> </div> </a> <a href="/code/2025/08/04/01/" title="使用 RAGFlow 搭建一套 AI 客服知识库"> <div class="post-list-item"> <span class="entry-date date published"> <font class="kymjs-post-tag-code">技术</font> <time datetime="2025-08-04T00:00:00+08:00"> <font color="#aaaaaa"> kymjs张涛 创作于 2025-08-04 </font> </time> </span> <h2> <font color="#333333">使用 RAGFlow 搭建一套 AI 客服知识库</font> </h2> <p><font color="#666666"> 网上一直有一种声音,叫做AI抢了大部分人的饭碗,同时也提供了大量的新的工作岗位。随着部署使用这次的 RAGFlow,就更加感受到了这一点。 </font></p> </div> </a> <a href="/code/2025/07/30/01/" title="终于搞定了,本地部署 RAGFlow"> <div class="post-list-item"> <span class="entry-date date published"> <font class="kymjs-post-tag-code">技术</font> <time datetime="2025-07-30T00:00:00+08:00"> <font color="#aaaaaa"> kymjs张涛 创作于 2025-07-30 </font> </time> </span> <h2> <font color="#333333">终于搞定了,本地部署 RAGFlow</font> </h2> <p><font color="#666666"> 体验了一下 Coze 的开源版本,相比商业版差太多了,准备放弃的时候刚好发现 RAGFlow 不需要 GPU 也可以跑,还只支持 x86,这不就是给我 NAS 空闲资源准备的吗 </font></p> </div> </a> <a href="/code/2025/03/23/01/" title="【HarmonyOS】TheRouter 鸿蒙版新手入门"> <div class="post-list-item"> <span class="entry-date date published"> <font class="kymjs-post-tag-code">技术</font> <time datetime="2025-03-23T00:00:00+08:00"> <font color="#aaaaaa"> kymjs张涛 创作于 2025-03-23 </font> </time> </span> <h2> <font color="#333333">【HarmonyOS】TheRouter 鸿蒙版新手入门</font> </h2> <p><font color="#666666"> TheRouter 鸿蒙版是货拉拉基于HMRouter深度定制的开源路由框架,提供了 Android、iOS、Harmony 三端高一致性使用,在支持平台化应用实现组件化、跨模块调用、动态化等功能的集成等功能基础上,支持动态路由下发、编译时安全检查、路由Path一对多等高度动态能力。 </font></p> </div> </a> <a href="/code/2024/10/31/01/" title="可能是 AGP8 编译最快的方案"> <div class="post-list-item"> <span class="entry-date date published"> <font class="kymjs-post-tag-code">技术</font> <time datetime="2024-10-31T00:00:00+08:00"> <font color="#aaaaaa"> kymjs张涛 创作于 2024-10-31 </font> </time> </span> <h2> <font color="#333333">可能是 AGP8 编译最快的方案</font> </h2> <p><font color="#666666"> 文章围绕 TheRouter 的 AGP8 编译提速展开,指出 toTransform()方法编译慢且无法增量编译,提出多种解决思路,包括结合 AsmClassVisitorFactory 等,最终通过 toGet()方法、内存缓存及对比等优化,实现增量编译和保障产物结果。 </font></p> </div> </a> <a href="/stickies/2024/08/05/01/" title="NAS - 玩点有意思的"> <div class="post-list-item"> <span class="entry-date date published"> <font class="kymjs-post-tag-stickies">生活</font> <time datetime="2024-08-05T00:00:00+08:00"> <font color="#aaaaaa"> kymjs张涛 创作于 2024-08-05 </font> </time> </span> <h2> <font color="#333333">NAS - 玩点有意思的</font> </h2> <p><font color="#666666"> 最近新买了一个NAS,装个黑群晖,感觉可玩的还挺多。 </font></p> </div> </a> <a href="/session/2022/11/23/01/" title="动态路由 TheRouter 的设计与实践"> <div class="post-list-item"> <span class="entry-date date published"> <font class="kymjs-post-tag-session">Session</font> <time datetime="2022-11-23T00:00:00+08:00"> <font color="#aaaaaa"> kymjs张涛 创作于 2022-11-23 </font> </time> </span> <h2> <font color="#333333">动态路由 TheRouter 的设计与实践</font> </h2> <p><font color="#666666"> 这篇文章是我在 2022【GIAC 全球互联网架构大会】分享时所讲内容的文字版本,ä
1¿®æ”¹åˆ å‡äº†æ¼”讲时的冗余言语,现开放给大家阅读,希望能给买不到票参加分享的 开源实验室 读者带来帮助。 </font></p> </div> </a> <a href="/code/2022/09/05/01/" title="没错,TheRouter 是我写的"> <div class="post-list-item"> <span class="entry-date date published"> <font class="kymjs-post-tag-code">技术</font> <time datetime="2022-09-05T00:00:00+08:00"> <font color="#aaaaaa"> kymjs张涛 创作于 2022-09-05 </font> </time> </span> <h2> <font color="#333333">没错,TheRouter 是我写的</font> </h2> <p><font color="#666666"> 路由是现如今移动端开发中必不可少的功能,尤其是企业级APP,可以用于将Intent页面跳转的强依赖关系解耦,同时减少跨团队开发的互相依赖问题。<br> TheRouter 是一整套完全面向模块化开发的解决方案,不仅能支持常规的模块依赖解耦、页面跳转,同时提供了模块化过程中常见问题的解决办法。 </font></p> </div> </a> <a href="/code/2022/09/04/01/" title="货拉拉 Android 模块化路由框架:TheRouter"> <div class="post-list-item"> <span class="entry-date date published"> <font class="kymjs-post-tag-code">技术</font> <time datetime="2022-09-04T00:00:00+08:00"> <font color="#aaaaaa"> kymjs张涛 创作于 2022-09-04 </font> </time> </span> <h2> <font color="#333333">货拉拉 Android 模块化路由框架:TheRouter</font> </h2> <p><font color="#666666"> 路由是现如今移动端开发中必不可少的功能,尤其是企业级APP,可以用于将Intent页面跳转的强依赖关系解耦,同时减少跨团队开发的互相依赖问题。<br> TheRouter 是一整套完全面向模块化开发的解决方案,不仅能支持常规的模块依赖解耦、页面跳转,同时提供了模块化过程中常见问题的解决办法。 </font></p> </div> </a> <a href="/stickies/2022/03/30/01/" title="某一天,中国真会超过美国吗?"> <div class="post-list-item"> <span class="entry-date date published"> <font class="kymjs-post-tag-stickies">生活</font> <time datetime="2022-03-30T00:00:00+08:00"> <font color="#aaaaaa"> kymjs张涛 创作于 2022-03-30 </font> </time> </span> <h2> <font color="#333333">某一天,中国真会超过美国吗?</font> </h2> <p><font color="#666666"> 最近一直在苦苦思考这个问题:会不会我们所说的某一天,永远都不会到来? </font></p> </div> </a> <a href="/session/2022/02/26/01/" title="基于 C++ 的 Android 协程设计"> <div class="post-list-item"> <span class="entry-date date published"> <font class="kymjs-post-tag-session">Session</font> <time datetime="2022-02-26T00:00:00+08:00"> <font color="#aaaaaa"> kymjs张涛 创作于 2022-02-26 </font> </time> </span> <h2> <font color="#333333">基于 C++ 的 Android 协程设计</font> </h2> <p><font color="#666666"> 在Android 上,Kotlin 用灵活的语法封装出语言层面的协程(coroutine)新颖地解决了异步编程编码复杂的问题。本次分享将带领听众从一个小例子开始,更加深入,自顶向下的理解协程是什么,协程的本质与工作机制,动手设计出一个真正运行时的协程库 </font></p> </div> </a> <a href="/pay/2021/02/02/01/" title="Gradle 6.X 上传 aar 到 Nexus 私服"> <div class="post-list-item"> <span class="entry-date date published"> <font class="kymjs-post-tag-payforreading">专栏</font> <time datetime="2021-02-02T00:00:00+08:00"> <font color="#aaaaaa"> kymjs张涛 创作于 2021-02-02 </font> </time> </span> <h2> <font color="#333333">Gradle 6.X 上传 aar 到 Nexus 私服</font> </h2> <p><font color="#666666"> 昨天把 gradle 升级到 6.0 以后,发现这傻逼的 google 又直接干 API,以前上报的全部脚本都没法用了。我们原先上报一个 aar,是直接引入。 </font></p> </div> </a> <a href="/code/2020/08/07/01/" title="自定义C/C++日志输出函数"> <div class="post-list-item"> <span class="entry-date date published"> <font class="kymjs-post-tag-code">技术</font> <time datetime="2020-08-07T00:00:00+08:00"> <font color="#aaaaaa"> kymjs张涛 创作于 2020-08-07 </font> </time> </span> <h2> <font color="#333333">自定义C/C++日志输出函数</font> </h2> <p><font color="#666666"> 在繁杂的项目中,日志打印必不可少。但是编写打印的工作,有时候是无趣的、繁琐的、浪费精力的。<br> 如何能够快速、方便的编写打印;如何清晰、准确的定位;如何简单并优雅的实现;最后才能让我们摆脱这样枯燥的、重复的工作?<br> 网上有很多强大的日志类工具,我也都使用过一些,有时候也并没有理想中的方便。今天我想分享给大家的一套我自己的解决方案。 </font></p> </div> </a> <a href="https://xiaozhuanlan.com/topic/9078324651" title="扁平化管理,就是管理者的失职"> <div class="post-list-item"> <span class="entry-date date published"> <font class="kymjs-post-tag-payforreading">专栏</font> <time datetime="2020-06-29T00:00:00+08:00"> <font color="#aaaaaa"> kymjs张涛 创作于 2020-06-29 </font> </time> </span> <h2> <font color="#333333">扁平化管理,就是管理者的失职</font> </h2> <p><font color="#666666"> 奉劝大家一句:千万不要想不开跑去小公司,尤其是在大厂已经做到高P的,即便小公司给你的许诺更好。因为在小公司呆久了你会发现只可能有两种变化,要么脾气会变的越来越暴躁,要么整个人变得越来越佛系。 </font></p> </div> </a> <a href="/manager/2020/05/29/01/" title="再聊 Git Flow"> <div class="post-list-item"> <span class="entry-date date published"> <font class="kymjs-post-tag-manager">Leader</font> <time datetime="2020-05-29T00:00:00+08:00"> <font color="#aaaaaa"> kymjs张涛 创作于 2020-05-29 </font> </time> </span> <h2> <font color="#333333">再聊 Git Flow</font> </h2> <p><font color="#666666"> 最近定了一些团队标准的东西,刚好聊到了 Git Flow 这个事,可以拿出来分享一下。 </font></p> </div> </a> <a href="/note/2020/03/19/01/" title="Flutter 设置控件是否可见"> <div class="post-list-item"> <span class="entry-date date published"> <font class="kymjs-post-tag-note">笔记</font> <time datetime="2020-03-19T00:00:00+08:00"> <font color="#aaaaaa"> kymjs张涛 创作于 2020-03-19 </font> </time> </span> <h2> <font color="#333333">Flutter 设置控件是否可见</font> </h2> <p><font color="#666666"> 共有两种实现比较简单的方式。 第一种比较好理解,将一个控件的透明度设置成0,打到隐藏的目的。第二种办法是使用 SDK 自带的 Offstage 控件包裹。 </font></p> </div> </a> <a href="/note/2020/03/18/01/" title="Flutter 线性布局:Column 和 Row"> <div class="post-list-item"> <span class="entry-date date published"> <font class="kymjs-post-tag-note">笔记</font> <time datetime="2020-03-18T00:00:00+08:00"> <font color="#aaaaaa"> kymjs张涛 创作于 2020-03-18 </font> </time> </span> <h2> <font color="#333333">Flutter 线性布局:Column 和 Row</font> </h2> <p><font color="#666666"> Flutter 线性布局:Column 和 Row 的常用属性 </font></p> </div> </a> <a href="/note/2020/03/17/01/" title="开源一段 Mac 批量压缩图片的脚本"> <div class="post-list-item"> <span class="entry-date date published"> <font class="kymjs-post-tag-note">笔记</font> <time datetime="2020-03-17T00:00:00+08:00"> <font color="#aaaaaa"> kymjs张涛 创作于 2020-03-17 </font> </time> </span> <h2> <font color="#333333">开源一段 Mac 批量压缩图片的脚本</font> </h2> <p><font color="#666666">
1 开源一个批量压缩图片的脚本,支持文件夹递归,可选质量压缩和宽高比压缩,可选设置最大宽高和大小,纯shell脚本实现。 </font></p> </div> </a> <a href="/manager/2020/03/15/01/" title="Leader 的自我修养——学会预测"> <div class="post-list-item"> <span class="entry-date date published"> <font class="kymjs-post-tag-manager">Leader</font> <time datetime="2020-03-15T00:00:00+08:00"> <font color="#aaaaaa"> kymjs张涛 创作于 2020-03-15 </font> </time> </span> <h2> <font color="#333333">Leader 的自我修养——学会预测</font> </h2> <p><font color="#666666"> 用一句话概括,本文讲的就是:怎样通过自己的专业深度,帮助公司和团队预测未来。<br>很多时候,之所以能够做到预测未来,无非是你掌握的信息比别人要多而已。 </font></p> </div> </a> <a href="/code/2019/11/21/01/" title="玩玩区块链——概念"> <div class="post-list-item"> <span class="entry-date date published"> <font class="kymjs-post-tag-code">技术</font> <time datetime="2019-11-21T00:00:00+08:00"> <font color="#aaaaaa"> kymjs张涛 创作于 2019-11-21 </font> </time> </span> <h2> <font color="#333333">玩玩区块链——概念</font> </h2> <p><font color="#666666"> 继我成功预言了 Kotlin 、Flutter 技术会火起来之后,我相信,下一个会火起来的技术是区块链。<br> 1. 别抬杠,我 14 年开始玩 Kotlin,16 年开始玩 Flutter (虽然看了看实现原理觉得没啥屁用就放弃了)的时候,可能你还不知道这俩名词呢。<br> 2. 别抬杠,我说的火起来的区块链技术是私链+合约(我不想提那俩字,我觉得智障更合适)。<br> 3. 抬杠吧,反正我从来没玩过数字货币,我也不怕被割韭菜。<br> </font></p> </div> </a> <a href="/session/2019/11/02/01/" title="一条电商 Android 工程化实践"> <div class="post-list-item"> <span class="entry-date date published"> <font class="kymjs-post-tag-session">Session</font> <time datetime="2019-11-02T00:00:00+08:00"> <font color="#aaaaaa"> kymjs张涛 创作于 2019-11-02 </font> </time> </span> <h2> <font color="#333333">一条电商 Android 工程化实践</font> </h2> <p><font color="#666666"> 这篇文章是我在 2019【极光开发者大会】技术分享时所讲内容的文字版本,修改删减了演讲时的冗余言语,现免费开放给大家阅读, 希望能给买不到票参加大会的开源实验室读者带来帮助。 </font></p> </div> </a> <a href="/note/2019/08/15/01/" title="最新版提升 Android 应用编译速度的方法"> <div class="post-list-item"> <span class="entry-date date published"> <font class="kymjs-post-tag-note">笔记</font> <time datetime="2019-08-15T00:00:00+08:00"> <font color="#aaaaaa"> kymjs张涛 创作于 2019-08-15 </font> </time> </span> <h2> <font color="#333333">最新版提升 Android 应用编译速度的方法</font> </h2> <p><font color="#666666"> 应用的构建速度会直接影响开发效率,本文将带您通过改造一个 Android 应用: “Google 追踪圣诞老人 (Google Santa Tracker)” 来为大家提供十个小技巧,帮助提升应用的 Gradle 构建速度,当我们应用了所有的小技巧之后,该演示应用的构建速度快了三倍以上。 </font></p> </div> </a> <!-- 分页 --> <div class="paginator"> <ul class="pagination"> <li class="disabled"><a aria-label="Previous"><span aria-hidden="true">上一页</span></a></li> <li class="active"><a>1<span class="sr-only">(current)</span></a></li> <li class="enable"><a href="/page2/">2<span class="sr-only">(current)</span></a></li> <li class="enable"><a href="/page3/">3<span class="sr-only">(current)</span></a></li> <li class="enable"><a href="/page4/">4<span class="sr-only">(current)</span></a></li> <li class="enable"><a href="/page5/">5<span class="sr-only">(current)</span></a></li> <li class="enable"><a href="/page2/" aria-label="Previous"><span aria-hidden="true">下一页</span></a></li> </ul> </div> </div> </div> </div> </div> <div class="col-sm-3"> <div class="shadow-corner-curl hidden-xs"> <div class="categories-nohr-header"> 开通邮件订阅 </div> <ul class="list-unstyled"> <div class="input-group"> <input type="email" name="email" required id="email" class="form-control" placeholder="博客更新第一时间知晓"> <span class="input-group-btn"> <button id="subscriber" name="submit" class="btn btn-default" title="邮箱订阅" type="button">订阅</button>
1 </span> </div> </ul> <hr> </div> 
1<script> document.getElementById('subscriber').onclick = function () { const EMAIL_PATTERN = /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i; const edittext = document.getElementById('email'); const email = edittext.value; if(EMAIL_PATTERN.test(email)){ const resp = subscriber(email); alert(resp.message); }else{ alert('请输入正确的邮箱'); } edittext.value = ""; } </script>
1 <div class="shadow-corner-curl hidden-xs banner_tag"> <a href="https://github.com/kymjs"> <div class="affix_bg_github"> <font color="#CDA763"> <span class="affix_bg_text">Github 关注我</span> <span class="glyphicon glyphicon-menu-right affix_bg_arrow" aria-hidden="true"></span> </font> </div> </a> </div> <br> <div class="shadow-corner-curl hidden-xs"> <div align="center"> <img src="https://cdn.kymjs.com:8843/qiniu/images/new_kymjs.jpg" alt="kymjs张涛" style="width:80%"> <p></p> <p color="#000000">kymjs张涛</p> </div> <ul class="list-unstyled"> &nbsp;&nbsp;&nbsp;kymjs张涛,Kotlin 技术布道者,个人开源项目被接入过 <b>支付宝</b>、<b>京东</b>、<b>极星汽车</b> 等产品,曾参加 QCon、GMTC、DroidCon、GIAC分享。先后在开源中国、沪江、饿了么工作,目前在货拉拉负责搬家业务前后端和出行移动架构。 <br><br> <span><b>我的微信:</b>kymjs666</span><br> <span><b>我的邮箱:</b>[email protected]</span><br> <br /> </ul> <br /> </div> <br> <div class="shadow-corner-curl hidden-xs"> <div class="categories-list-header"> 我的微信 </div> <ul class="list-unstyled"> <div align="center"> <a href="https://www.kymjs.com/about"><img id="weqrcode_image" alt="kymjs张涛" style="width:80%"> </a> <br /> <span><a href="https://www.kymjs.com/works"> <center><font id="weqrcode_text" color="#CDA763"></font></center> </a></span><br> </div> </ul> </div> 
1<script> var weqrcode_text = document.getElementById("weqrcode_text"); var weqrcode_image = document.getElementById("weqrcode_image"); var index = Math.floor(Math.random()*10); if (index % 6 == 0){ weqrcode_text.innerHTML = "我的微信"; weqrcode_image.src = "https://cdn.kymjs.com:8843/qiniu/image/qrcode_wechat.jpg"; } else if (index % 6 == 1){ weqrcode_image.src = "https://cdn.kymjs.com:8843/qiniu/image/qrcode_wechat.jpg"; weqrcode_text.innerHTML = "我的微信"; } else if (index % 6 == 2){ weqrcode_image.src = "https://cdn.kymjs.com:8843/qiniu/image/qrcode_wechat.jpg"; weqrcode_text.innerHTML = "我的微信"; } else if (index % 6 == 3){ weqrcode_image.src = "https://cdn.kymjs.com:8843/qiniu/image/qrcode_wechat.jpg"; weqrcode_text.innerHTML = "我的微信"; } else if (index % 6 == 3){ weqrcode_image.src = "https://cdn.kymjs.com:8843/qiniu/image/qrcode_wechat.jpg"; weqrcode_text.innerHTML = "我的微信"; } else { weqrcode_image.src = "https://cdn.kymjs.com:8843/qiniu/image/qrcode_wechat.jpg"; weqrcode_text.innerHTML = "我的微信"; } </script>
1 <br> <div class="shadow-corner-curl hidden-xs"> <div class="categories-list-header"> <span id="jikeshijian_banner_title"></span> </div> <br> <a id="jikeshijian_banner_link"> <img id="jikeshijian_banner_image" alt="极客时间 Kotlin Android 课程" width="100%"> </a> <br><br><br> </div> 
1<script> var jikeshijian_banner_title = document.getElementById("jikeshijian_banner_title"); var jikeshijian_banner_link = document.getElementById("jikeshijian_banner_link"); var jikeshijian_banner_image = document.getElementById("jikeshijian_banner_image"); var index = Math.floor(Math.random()*10); if (index % 2 == 0){ jikeshijian_banner_title.innerHTML = "我的 Kotlin 课程"; jikeshijian_banner_link.href = "https://time.geekbang.org/course/intro/105?code=C6740UqHsyDSDiah%2FrXy6N6uz5HGqaiFgauk%2F4EDtio%3D"; jikeshijian_banner_image.src = "https://cdn.kymjs.com:8843/qiniu/images/jikeshijian_kotlin.jpeg"; } else { jikeshijian_banner_title.innerHTML = "我的 Kotlin 课程"; jikeshijian_banner_link.href = "https://time.geekbang.org/course/intro/105?code=C6740UqHsyDSDiah%2FrXy6N6uz5HGqaiFgauk%2F4EDtio%3D"; jikeshijian_banner_image.src = "https://cdn.kymjs.com:8843/qiniu/images/jikeshijian_kotlin.jpeg"; } </script>
1 <br> <div class="shadow-corner-curl hidden-xs"> <div class="categories-list-header"> 精选专辑 </div> <div id="side"> <div class="side-header"> <ul> <li> <a href="/column/kotlin.html"> <img src="https://cdn.kymjs.com:8843/qiniu/images/column/kotlin_logo2.jpg" alt="开源实验室:kotlin"> </a> </li> <li> <a href="/column/plugin.html"> <img src="https://cdn.kymjs.com:8843/qiniu/images/column/plugin.jpg" alt="开源实验室:Android 插件化"> </a> </li> <li> <a href="/presentations/"> <img src="https://cdn.kymjs.com:8843/qiniu/images/column/conf.jpg" alt="技术分享PPT"> </a> </li> <li> <a href="/c/"> <img src="https://cdn.kymjs.com:8843/qiniu/images/column/c.jpg" alt="C函数手册"> </a> </li> <li> <a href="/column/pwa.html"> <img src="https://cdn.kymjs.com:8843/qiniu/images/column/pwa_logo.jpg" alt="开源实验室:Progressive Web App"> </a> </li> <li> <a href="/column/resourcecode.html"> <img src="https://cdn.kymjs.com:8843/qiniu/images/column/resourcecode2.jpg" alt="开源实验室:源码研读"> </a> </li> </ul> </div> </div> </div> <br> <div class="shadow-corner-curl hidden-xs"> <div class="categories-list-header"> 友链 </div> <ul class="list-unstyled"> <br /> <li><a href="https://www.wanandroid.com/?from=kymjs.com">玩Android-鸿洋</a></li> <li><a href="https://yuxianghe.net/?from=kymjs.com">雨翔河</a></li> <li><a href="https://www.duguying.net/?from=kymjs.com">独孤影</a></li> <li><a href="https://write.laily.net/?from=kymjs.com">周玄久</a></li> <li><a href="https://xiequan.info/?from=kymjs.com">谢权的博客</a></li> <li><a href="https://droidyue.com/?from=kymjs.com">技术小黑屋博客</a></li> <li><a href="https://zhangliblog.top/?from=kymjs.com">Zhangli's Blog</a></li> <li><a href="https://fsilence.github.io/?from=kymjs.com">璐豪笔记</a></li> <li><a href="http://www.androidperformance.com/?from=kymjs.com">Android Performance</a></li> <li><a href="https://www.maoqitian.com/?from=kymjs.com">maoqitian 个人博客</a></li> <li><a href="https://www.haozhuji.net/?from=kymjs.com">haozhuji</a></li> <li><a href="https://jaketao.com/blog/?from=kymjs.com">Jake Blog</a></li> <br /> </ul> </div> <br> <div class="shadow-corner-curl hidden-xs banner_tag"> <a href="https://github.com/kymjs"> <div class="affix_bg_github"> <font color="#CDA763"> <span class="affix_bg_text">Github Follow</span> <span class="glyphicon glyphicon-menu-right affix_bg_arrow" aria-hidden="true"></span> </font> </div> </a> </div> <br> <div class="shadow-corner-curl hidden-xs banner_tag"> <a href="/rss.xml"> <div class="affix_bg_rss"> <font color="#7EA6A6"> <span class="affix_bg_text">RSS 订阅</span> <span class="glyphicon glyphicon-menu-right affix_bg_arrow" aria-hidden="true"></span> </font> </div> </a> </div> <br> <div class="shadow-corner-curl hidden-xs banner_tag"> <a href="/api/page.json"> <div class="affix_bg_api"> <font color="#8596DB"> <span class="affix_bg_text">博客 API</span> <span class="glyphicon glyphicon-menu-right affix_bg_arrow" aria-hidden="true"></span> </font> </div> </a> </div> <br><br><br> </div> </div> </div> </div> <div class="only-pc"> <footer class="navbar navbar-inverse"> <div class="container"> <div class="row"> <div class="col-md-12 navbar-text"> <span> 张涛的开源实验室 </span> <span class="point"> · </span> <a href="mailto:[email protected]"><span class="glyphicon glyphicon-envelope"></span> [email protected]</a> <span class="point"> · </span> <a href="https://github.com/kymjs"> <span class="icon"> <svg viewBox="0 0 16 16"> <path fill="#aaa" d="M7.999,0.431c-4.285,0-7.76,3.474-7.76,7.761 c0,3.428,2.223,6.337,5.307,7.363c0.388,0.071,0.53-0.168,0.53-0.374c0-0.184-0.007-0.672-0.01-1.32 c-2.159,0.469-2.614-1.04-2.614-1.04c-0.353-0.896-0.862-1.135-0.862-1.135c-0.705-0.481,0.053-0.472,0.053-0.472 c0.779,0.055,1.189,0.8,1.189,0.8c0.692,1.186,1.816,0.843,2.258,0.645c0.071-0.502,0.271-0.843,0.493-1.037 C4.86,11.425,3.049,10.76,3.049,7.786c0-0.847,0.302-1.54,0.799-2.082C3.768,5.507,3.501,4.718,3.924,3.65 c0,0,0.652-0.209,2.134,0.796C6.677,4.273,7.34,4.187,8,4.184c0.659,0.003,1.323,0.089,1.943,0.261 c1.482-1.004,2.132-0.796,2.132-0.796c0.423,1.068,0.157,1.857,0.077,2.054c0.497,0.542,0.798,1.235,0.798,2.082 c0,2.981-1.814,3.637-3.543,3.829c0.279,0.24,0.527,0.713,0.527,1.437c0,1.037-0.01,1.874-0.01,2.129 c0,0.208,0.14,0.449,0.534,0.373c3.081-1.028,5.302-3.935,5.302-7.362C15.76,3.906,12.285,0.431,7.999,0.431z"/> </svg> </span>
1 kymjs </a> <span class="point"> · </span> <span><a href="/feed.xml">RSS</a></span> <span class="point"> · </span> <span>站务联系:kymjs666(微信)</span> <span class="point"> · </span> <span>Powered by Jekyll</span> <div> <a href="https://beian.miit.gov.cn">沪ICP备2025129343号-1</a> </div> </div> </div> </div> </footer> </div> <div class="only-phone"> <br><br><br> <footer class="navbar-inverse bottom-float"> <style type="text/css"> #bottom-tab{ text-align:center; width:100%; margin-left: 3%; } #bottom-tab li{ width:20%; float:left; margin:0px 8px; padding:0px; } </style> <div id="bottom-tab"> <ul class="nav navbar-nav"> <li class="active"> <a href="/"><span class="glyphicon glyphicon-home"></span> 技术</a></li> <li> <a href="/fragment"><span class="glyphicon glyphicon-file"></span> 故事</a></li> <li><a href="https://vcnedpub4ekz.feishu.cn/wiki/VPYAwf9URixw64kVWkfcmzusnHy?table=tblVn3z42GTSMThF&view=vewZcIBEL6"><span class="glyphicon glyphicon-folder-open"></span> 说说</a></li> <li> <a href="/about"><span class="glyphicon glyphicon-user"></span> 关于</a></li> </ul> </div> </footer> </div> <div class="pop" id="kymjs_popwindow"> <div class="pop-con"> <a id="kymjs_popwindow_links"><img id="kymjs_popwindow_image" class='ad' /></a> <div> <font id="kymjs_popwindow_text" color="#ffffff" size="5px"></font> </div> <div class='close-con'> <img src="https://cdn.kymjs.com:8843/qiniu/images/close.png" class="close-pop"/> </div> </div> </div> 
1<script> function isEmpty(obj){ if(typeof obj == "undefined" || obj == null || obj == ""){ return true; }else{ return false; } } var kymjs_popwindow_image = document.getElementById("kymjs_popwindow_image"); var kymjs_popwindow_links = document.getElementById("kymjs_popwindow_links"); var kymjs_popwindow_text = document.getElementById("kymjs_popwindow_text"); var date = { isDuringDate: function (beginDateStr, endDateStr) { var curDate = new Date(), beginDate = new Date(beginDateStr), endDate = new Date(endDateStr); if (curDate >= beginDate && curDate <= endDate) { return true; } return false; } } var ua = navigator.userAgent.toLowerCase(); kymjs_popwindow.style.background = "#000000cc"; var index = Math.floor(Math.random()*10); if(ua.match(/MicroMessenger/i)=="micromessenger") { if (index % 2 == 0){ kymjs_popwindow_image.src = "https://cdn.kymjs.com:8843/qiniu/image/minicode_devlab_258.jpg"; kymjs_popwindow_links.href = "/about"; kymjs_popwindow_text.innerHTML = "长按使用开源实验室小程序"; } else { kymjs_popwindow_image.src = "https://cdn.kymjs.com:8843/qiniu/images/zhishixingqiu1.jpg"; kymjs_popwindow_links.href = "https://t.zsxq.com/byzrvn2"; kymjs_popwindow_text.innerHTML = "点击加入知识星球"; } } else { if (index % 10 == 0){ kymjs_popwindow_image.src = "https://cdn.kymjs.com:8843/qiniu/images/zhishixingqiu1.jpg"; kymjs_popwindow_links.href = "https://t.zsxq.com/byzrvn2"; kymjs_popwindow_text.innerHTML = "点击加入知识星球"; } } // var myDate = new Date().getTime(); // if (localStorage.storagetime == null || localStorage.storagetime == undefined || localStorage.storagetime == ''){ // localStorage.storagetime = 0; // } // if (myDate - localStorage.storagetime > 120000000 && !isEmpty(kymjs_popwindow_image.src) && ua.match(/QingYuLiuLanQi/i)!="qingyuliulanqi"){ // $('.pop').show(); // } // $(document).ready(function(){ // $('.close-pop').click(function(){ // localStorage.storagetime = myDate; // $('.pop').hide(); // }) // }) </script>
1 <!-- 在新窗口中打开 --> 
1<script type="text/javascript"> function addBlankTargetForLinks () { $('a[href^="http"]').each(function(){ $(this).attr('target', '_blank'); }); } $(document).bind('DOMNodeInserted', function(event) { addBlankTargetForLinks(); }); var verifyButton = document.getElementById('verify-password'); var passwordInput = document.getElementById('password'); var privateContent = document.getElementById('private-content'); var correctPassword = 'kymjs'; if (verifyButton && passwordInput && privateContent) { verifyButton.addEventListener('click', function() { var inputPassword = passwordInput.value; if (inputPassword === correctPassword) { privateContent.style.display = 'block'; } else { alert('密码错误'); passwordInput.value = ''; passwordInput.focus(); } }); passwordInput.addEventListener('keypress', function(e) { if (e.key === 'Enter') { verifyButton.click(); } }); } </script>
1 </body> </html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.