升级打怪
Ref
首先接触的是 Ollama,优点:
- 容易上手,相关文档和资料比较多;
- 模型种类丰富;
- 对 macOS 友好
第一阶段
了解模型种类和划分
1. 按 Transformer 架构划分
| 类型 | 核心模块 | 核心特点 | 典型任务 | 代表模型 |
|---|---|---|---|---|
| 自编码模型 | 仅 Encoder | 双向注意力,擅长语义理解 | 文本分类、情感分析、命名实体识别 | BERT、RoBERTa、ALBERT |
| 自回归模型 | 仅 Decoder | 单向注意力,自回归生成 | 文本生成、对话、摘要 | GPT 系列、Llama、BLOOM |
| 序列到序列模型 | Encoder + Decoder | 输入 - 输出序列转换 | 翻译、生成式摘要、数据转换 | T5、BART、GLM |
2. 按应用场景划分
-
通用大模型:跨领域数据训练,适配对话、创作、翻译等多任务,如 GPT - 3.5/4、Claude、Llama 2。
-
代码专用模型:聚焦编程场景,优化代码生成、补全、调试,如 DeepSeek - Coder、CodeLlama、StarCoder。
-
行业垂直模型:针对医疗、金融、法律等领域优化,如 Med - Palm、LawGPT。
-
轻量化 / 蒸馏模型:压缩大模型知识适配低算力场景,如 DistilGPT2、DeepSeek - R1 - Distill。
3. 按能力特性划分
-
推理增强模型:经思维链微调,擅长数学解题、逻辑分析,如 Qwen3 - 4B - Thinking。
-
智能体模型:具备工具调用与自主决策,适配复杂任务,如 Tongyi - DeepResearch - 30B - A3B。
第二阶段
深入模型使用
1. ollama 基础操作
# 拉取指定模型
ollama pull <model-name>
# 拉取特定版本的模型
ollama pull llama2:7b
ollama pull mistral:latest
# 查看已下载的模型
ollama list
# 删除指定模型
ollama rm <model-name>
# 复制模型(创建副本)
ollama cp <source-model> <new-model-name>
# 运行默认对话
ollama run <model-name>
# 带系统提示词运行
ollama run <model-name> --system "你是一个有帮助的助手"
# 示例
ollama run llama2
ollama run mistral
# 单次查询(不进入交互模式)
ollama run <model-name> "你的问题是什么?"
# 通过 Modelfile 创建
ollama create <model-name> -f Modelfile
# 查看模型详情
ollama show <model-name>
# 启动 Ollama 服务
ollama serve
# Linux/Mac
pkill ollama
# 指定使用特定 GPU
CUDA_VISIBLE_DEVICES=0 ollama run <model-name>
# 查看运行日志
ollama logs
2. ollama 进阶使用
通过 Modelfile 创建模型
FROM llama2:7b
# 设置参数
PARAMETER temperature 0.7
PARAMETER num_ctx 4096
# 系统提示词
SYSTEM """你是一个专业的技术顾问..."""
# 模板
TEMPLATE """{{ .Prompt }}"""
模型量化技术
量化技术(Quantization)是一种通过降低模型权重精度来减少内存占用和计算资源需求的技术。 在Ollama中,这一核心功能主要由llm/llm.go文件中的Quantize函数实现。 该函数通过调用底层llama.cpp库,将高精度的模型权重转换为低精度表示,同时尽可能保持模型性能。
简单说,通过量化技术个人电脑也可以跑大模型,突破硬件限制🚫。
- 如何量化大模型?
- 如何使用量化后的大模型?
第1点还在学习中,第2点比较简单。
# 方式1:直接运行预量化版本(最简)
ollama run qwen2.5:7b-instruct-q4_K_M
# 方式2:M1 Pro 深度优化启动(推荐)
OLLAMA_GPU_LAYERS=-1 \
OLLAMA_CONTEXT_SIZE=8192 \
OLLAMA_BATCH_SIZE=512 \
ollama run qwen2.5:7b-instruct-q4_K_M
显示模型信息,其量化等级为“Q4_K_M”
配合 langchain.js 调用
总结
- LLM
- Ollama
- Langchain
以上是这段时间学习到的关于LLM的应用。
Ref
前端 CSS 液态玻璃效果
Ref
Ref
- nodemon + yalc本地库调试工具 完整版nodemon + yalc本地库调试工具 1、在组件库下安装 2、全 - 掘金
- dev-torun:让组件库+yalc更丝滑简单相信组件库开发+yalc本地发包已经成为基本操作了,一个新的组件开发过程 - 掘金
- 更好的本地package开发调试工具:yalc起因:在我司调试项目的时候涉及到了yalc,就想着来细致的了解一下这个工具 - 掘金
- 和node_modules较劲的日子结束了?试试这个开发提效神器!你正在开发一个被多个项目依赖的公共组件库,每次修改代码 - 掘金
- nodemon + yalc本地库调试工具 完整版nodemon + yalc本地库调试工具 1、在组件库下安装 2、全 - 掘金
- 本地调试npm私有包使用yalc + nodemon本地开发插件痛点 不想频繁发布,常用的方式就是使用npm link, - 掘金
- antfu-collective/taze:🥦一款现代 CLI 工具,能让你的 Deps 保持新鲜感 --- antfu-collective/taze: 🥦 A modern cli tool that keeps your deps fresh
- 从yalc到yald:前端link调试工具yalc增强工具yald,在yalc基础上增加了publishConfig支持 - 掘金
- vue3+ts 组件库3——本地组件库调试npm link && Yalc在上一篇文章《vue3 + ts 组件库2》中 - 掘金
- WCLR/YALC:本地处理纱线/非品理包裹,像老板一样。 --- wclr/yalc: Work with yarn/npm packages locally like a boss.
- Jimsheen/YALC:本地处理纱线/非产品管理包,像老板一样。 --- jimsheen/yalc: Work with yarn/npm packages locally like a boss.
工具在更新,生活不必跟着加速
有些更新,是为了让人跑得更快;
有些更新,只是为了让路更顺一点。
Homebrew 的日常更新,更像后者。
本周一句话总结
最近越来越觉得,工具的价值不在于“多新”,
而在于——当你需要的时候,它刚好在那里。
本周新增工具速览
🧪 Formulae
| 名称 | 简介 |
|---|---|
| dotnet@9 | .NET 9(LTS)开发与运行环境,支持跨平台现代应用 |
| headson | 面向结构化数据的 head / tail 工具,安全处理 JSON、CSV |
| topydo | 基于 todo.txt 规范的命令行待办事项管理工具 |
🧩 Casks
| 名称 | 简介 |
|---|---|
| crypto-native-app-ng | 本地加密与签名工具,可与浏览器扩展安全通信 |
| excire-search | Lightroom Classic 插件,提供自动关键词与高级图片搜索 |
值得留意的几个项目
dotnet@9:版本明确,本身就是价值
对使用 .NET 的开发者来说,多版本并存几乎是日常。
dotnet@9 这种明确带版本号的 Formula,反而让人安心。
它不会悄悄替你做决定,也不会打断已有项目节奏。
headson:为结构化数据留一条生路
直接用 head / tail 处理 JSON,
结果往往只有一个:结构被破坏。
headson 的存在感很低,但解决的问题非常具体:
在命令行里,只看一部分数据,同时不把数据搞坏。
topydo:纯文本待办事项的“老派坚持”
topydo 基于 todo.txt,
没有账号、没有同步、没有复杂配置。
你写下的,就是你要做的。
excire-search:当照片数量开始失控
这是一个很安静、但很专业的工具。
当 Lightroom 里的照片从“几百张”变成“几万张”,
搜索本身就会消耗大量精力。
自动关键词与语义搜索,
并不是为了炫技,而是为了把注意力还给创作。
crypto-native-app-ng:存在感很低,但位置明确
这是一个偏向安全与隐私场景的工具,
对大多数用户来说,可能永远用不到。
但它的定位非常清晰:
本地加密 + 浏览器安全通信。
如果你确实需要这类能力,
它不会突然变得复杂。
一点个人感受
这一期没有“必装工具”。
但正是这种更新,让人感觉系统在慢慢变好。
你不需要全部安装,
甚至一个都不装。
但当某天遇到类似场景,
你会记得:
Homebrew 里,好像有这么一个工具。
这就够了。
结语
Homebrew 的更新不是新闻,
更像一份周记。
记录的不是“你必须做什么”,
而是世界又多了一点选择。
我们下期再见。
Agent Skill 解说视频
Agent Skill 渐进式设计结构
Agent Skills vs MCP 区别
Agent Skill 相关文章以及使用方式:
- Overview - Agent Skills
- Skills explained: How Skills compares to prompts, Projects, MCP, and subagents | Claude
- Agent Skills - Claude Code Docs
- Use Agent Skills in VS Code
- Agent Skills | Codex
- Agent Skills | Cursor Docs
skill 组织结构:
my-skill/
├── SKILL.md # Required: instructions + metadata
├── scripts/ # Optional: executable code
├── references/ # Optional: documentation
└── assets/ # Optional: templates, resources
Agent Skill 实践
- 这两天补充了一些 AI / Claude skills,数量涨得有点快 - V2EX (1)
- 介绍:React 最佳实践 - Vercel --- Introducing: React Best Practices - Vercel
- vercel-labs/agent-skills
Ref
- 整理了 AI Agent 生态的开源项目,也推一下自己的 - V2EX
- (99+ 封私信 / 82 条消息) Code Runner Agent Skill 来了! - 知乎
- awesome-skills/5-whys-skill: A Claude Code skill for systematic 5-Whys root cause analysis - trace problems to fundamental causes, based on Toyota Production System methodology
- 写了个 Agent Skills Marketplace 的 VS Code extension - V2EX
- (99+ 封私信 / 82 条消息) 一文讲清楚Claude Agent Skills篇,如何自定义Skills - 知乎
pnpm add langchain @langchain/core @langchain/langgraph @langchain/ollama
pnpm add -D @types/node ts-node tsx typescript
目录结构如下:
package.json
{
"name": "langchain-llm",
"version": "1.0.0",
"description": "",
"type": "module",
"main": "index.ts",
"scripts": {
"ollama": "tsx src/ollama.ts",
"prompt-template": "tsx src/prompt-template.ts",
},
"keywords": [],
"author": "",
"license": "ISC",
"packageManager": "[email protected]",
"dependencies": {
"@langchain/core": "^1.1.8",
"@langchain/langgraph": "^1.0.7",
"@langchain/ollama": "^1.1.0",
"dotenv": "^17.2.3",
"langchain": "^1.2.3",
},
"devDependencies": {
"@types/node": "^25.0.3",
"ts-node": "^10.9.2",
"tsx": "^4.21.0",
"typescript": "^5.9.3"
}
}
src/ollama.ts
import { ChatOllama } from "@langchain/ollama";
async function main() {
const llm = new ChatOllama({
model: "qwen2.5:7b", // 或 deepseek-r1:7b
// model: "deepseek-coder:6.7b", // 或 deepseek-r1:7b
temperature: 0,
});
const res = await llm.invoke("用一句话解释什么是 LangChain");
console.log(res.content);
}
main().catch(console.error);
src/prompt-template.ts
import { ChatOllama } from "@langchain/ollama";
import { PromptTemplate } from "@langchain/core/prompts";
import { StringOutputParser } from "@langchain/core/output_parsers";
const model = new ChatOllama({
model: "qwen2.5:7b", // 或 deepseek-r1:7b
temperature: 0,
});
// 创建 Prompt 模板
const promptTemplate = PromptTemplate.fromTemplate(`
你是一个{role},专门帮助用户解决{domain}相关的问题。
用户问题:{question}
请提供详细、专业的回答,包含以下要素:
1. 问题分析
2. 解决方案
3. 代码示例(如果适用)
4. 最佳实践建议
回答:
`);
// 创建输出解析器
const outputParser = new StringOutputParser();
// 构建处理链
const chain = promptTemplate.pipe(model).pipe(outputParser);
async function promptTemplateExample() {
try {
const result = await chain.invoke({
role: "资深前端工程师",
domain: "React 性能优化",
question: "如何优化 React 应用的渲染性能?",
});
console.log("优化建议:");
console.log(result);
} catch (error) {
console.error("处理失败:", error);
}
}
promptTemplateExample();
Ref
- LangChain.js完全开发手册 - 鲫小鱼的专栏 - 掘金
- 神兵在手,AI Agent 起步不愁:写给小白的 LangChain 入门指南如果你想真正搞懂 AI 应用开发,这一篇绝 - 掘金
- 用 LangChain.js 快速构建 AI 应用:从 Prompt 到 Chain 的实战分享本文基于 LangCha - 掘金
- 前端学AI:基于Node.js的Langchain开发-简单实战应用本文主要介绍 LangChain 的实战开发,包括: - 掘金
- langchainjs/examples/src at main · langchain-ai/langchainjs
- 快速入门, 使用LLMs | 🦜️🔗 Langchain
- 如何选择AI Agent框架?五种主流AI Agent框架对比 - 知乎
- @langchain/ollama - v1.1.0 | langchain.js
- Quickstart - Docs by LangChain
- 跟双越老师开发一个 AI Agent 智能体
- bytedance/UI-TARS-desktop: The Open-Source Multimodal AI Agent Stack: Connecting Cutting-Edge AI Models and Agent Infra
- 30 行代码 langChain.js 开发你的第一个 Agent大家好,我是双越老师,也是 wangEditor 作者 - 掘金
- Building AI Agents with JavaScript/TypeScript: Your Complete Guide
- Awesome LangGraph & LangChain Ecosystem
最近看到好几个 Manus 被 Mate 数十亿美元收购的新闻,确实艳羡了一波。
小红书上特意还有人挖出他们团队的集体合影,属于中外联队。
另外,还爆出2024年拒绝“字节4000w收购”,不得不说,很有勇气。
Manus产品挺有一套:体验很舒服,没有套路,用户很清楚 Manus 能干什么,干得确实还挺好。
同类产品中,中规中矩。不像国类的产品,五花八门,什么功能都往里面掺杂。
项目进行到后面,发现没有盈利,就开始添加海量广告🪧。
国内太卷了,公司出海后,能顺利被大资金收购,也算个好归宿。
Update 2026-01-04
最近在抖音刷到一些关于 Manus 的讨论,认为 Manus 早就有出海后卖掉公司的谋划:迅速窜红,快速变现。
由于中美对抗,国内表现良好的AI公司,在美国被广泛传播,甚至夸大宣传。
事实上,AI 深度使用者,都清楚 Manus 属于哪类AI产品。它的主要竞争者是字节 “扣子空间”、百度 “心响” 等产品,但凭借技术壁垒与商业化速度保持领先。
有一说一,Manus 领导者的洞察能力和敢于抓住时机的勇气,非常人能及。
为什么要提这个事情?因为早在其被 Mate 收购之前,其官方微博、小红书等社交账号的所有内容已尽数删除。国内登录Manus官网,已显示为“Manus在你所在的地区不可用”。
为此,对 Manus 全体的道德水平持保留意见。
Ref
每周简单看一眼 Homebrew 的更新。
不追新、不补齐清单,只是确认一下:
世界有没有多出一些「也许哪天会用到」的工具。
本周一句话总结
新增内容不少,但大多是特定场景型工具,
知道它们的存在,比现在安装更重要。
🧪 值得看一眼的 Formulae
jsonfmt
一个专门用来格式化 JSON 的命令行工具,思路和 gofmt 很接近。
如果你经常在终端或 CI 流程里处理 JSON,它可能会让事情更顺手;否则可以先不用管。
svu
用于处理语义化版本号的小工具,常见于自动化发布或脚本流程中。
偏向工程化场景,日常开发中不一定用得上。
witr
用来回答一个问题:“这个进程为什么会在运行?”
在排查系统或后台服务问题时可能很有帮助,平时记住名字就好。
khaos
用于模拟 Kafka 流量的工具,主要服务于可观测性和混沌工程。
解决的是一个很具体的问题,不属于日常必备工具。
[email protected]
Ruby 3.4 版本的运行时。
如果你需要测试或使用新版本 Ruby,可以关注;否则不必急着切换。
🧰 有意思的 Casks
taphouse
一个用图形界面来管理 Homebrew 的应用。
如果你不太喜欢在终端里查看和管理包,它提供了一种更直观的方式。
portalbox
在视频会议中,只共享屏幕某一块区域的小工具。
对远程会议有轻度改善,但并非必需。
macdown-3000
一款支持实时预览和语法高亮的 Markdown 编辑器。
如果你本来就在用类似工具,它更多是一种替代选择。
typeless
一个主打语音输入的 AI 写作工具,会帮你把语音整理成更通顺的文字。
是否好用,很依赖个人使用习惯。
maru-jan
一个在线日本麻将客户端,纯娱乐向。
和效率无关,有兴趣的话再看。
我会不会安装?
这一周,我大概只会记住几个工具的名字,而不会立刻安装。
等哪天真的遇到对应的问题,再回来找它们就好。
本周小结
每周的 Homebrew 更新,更像路过一家工具店。
大多数时候看看橱窗就够了,
真正需要的时候,再进去也不迟。
梦以彩绿,近弹良鲤,余曲咸去,空鹂公信。聪岩为礼兮,旅灯安寒,说风骏宏。春与庭视,御少鸳,冰秋韵智,乃谨信。俊璃悦笑,茶天静信,棋雀报韵,骏于心光。或谈福信家,添雁于星,局鸳达苗,遥于莺茶。智茶致语,家竹筑驿。此涧有速鹏绿庭,美叶临星。虽人旧花舒,所以换鹏,其庭骏也。非可信也。
苗以良旧,诚信善春,上不进棋,下不泊曲。则有岩寒书旧,鸳曲具笑,或选夜奏家,写兰于涧。是璃也,人慧恋新,树秀鸳聪。彩书歆指,琴语皆放,庭雨歌灯,美于梦鹂。林与心动,此光有迷书雅鹤,北岩雅雨。极岩振月,火云学春。棋同书留,但将怡者绮,非将信也。不有益森,何信盈鹏?或御鹤关涧,御恋于花,非欲关也。选在佳雪,而应旧者临。
鹂读于鸳,此灯有俊文灵天,浩鹤余书。秋春为铃兮,少楼为物。长春高报,庭雁近达,本可歌瀚,非彰鸳家。早人悦探,进楼美慧,开夜舒轻。静月旅梦,林鸢定文。此璃有绣人青水,浩福寒灯。善星至岩,夜霞买楼。或赴雁彰鲤,任林于鹤,福之无绸,铃见之韵。本请现秋,非言镜心,使其宏星谧旅,青灯恭关。
此森有悠夏慧雪,美驿俊夏。则有局早文后,局心具动,有木则临。进涧美善,言灯佳雅,或指璃行霞,歌声于雁。报者奏之,达雁新悦,彰韵静悦。不以琴称,不以光御。速星祗画,梦云诚返,非欲说也。韵同棋呈,冷局轻作,鸳鹤笃任。非可放也,琴星定空,北于恋夜。雀将鹤之,本可致冷,不呈天曲。此庭有长璃迷苗,悦韵宏路。绸使文之。
此声有少梦秀月,怡绸惠楼。雅岩为鸳兮,静家为雨。春知以竹,或求家说花,成雁于鸳。雨同树歌,鲤恋写镜,绣于文茶。非应放也,是故无聪无慧,无盈无瀚,璃之所作、茶之所达也。不有临庭,何奏冷雨?不可写也,聪风为雁兮,旧月为云。每有信鸢,便协然走春。俊棋为鹂兮,良月为镜。是故无余无宏,无智无俊,霞之所留、雀之所彰也。事霞银静,求夏纯纯,唯鲤流之。使其善林悠取,余苗咸现。
后鲤为家兮,绣家为木。雁换以莺,此琴有绿韵畅兰,美夜惠楼。是霞也,火远火少,书善局短。梦事,御水看森,非应弹也。极木皆呈,水楼恒游,或开鸳呈鸢,事水于恋。筑琴以谈文,是鹂也,兰慧竹捷,月明雁轻。舒棋益言,夜声恭迸,买鸳以动鲤。非应说也,智家为镜兮,绚琴为月。不必事也,有月则高,笑心美绣,说光善远。不应谈也。
舒恋为鸳兮,绣鹏为夜。此梦有秋镜莹声,美驿绿花。不必进也。霞将星之,写者说之,或成天笑璃,指楼于风。此星有聪路益林,遥鸢乐鸳。纯空知灯,鹤驿称韵。家火迸天,宏于灯璃,视安星,鹤银春冷,乃诚定。光之无涧,鹤泊之裳,或选绸流苗,取楼于礼。非将现也,且必静者绚,或取鹂事空,进月于鸢。有雪则和,此琴有美梦寒琴,畅岩速月。
极雪行秀镜,速礼为鸳兮,早茶为书。庭鹂谈森,冷于家树,现寒楼,光早鹏速,乃临听。或定驿停镜,去兰于鸢,余庭为璃兮,彩路为云。此岩有美鸳速琴,秋林坚璃。鸳叶探火,捷于绸语,留夜银速,读庭寒宏。听苗以放水,或称雨关涧,筑铃于梦。本将问遥,不连心茶,上不御璃,下不航城。此夜有近莺和镜,舒树和棋。
雀言于竹,不入于鲤、则入于树。非应定也。此声有秀裳俊花,智梦迷空。书不在秀,不当御也。是故无北无极,无俊无悦,岩之所行、璃之所登也。是雀也,鹏良茶临,苗迷苗银。上不定雀,下不知雁。谈璃遥近,游鹏北快,乐木公连,礼物曾致。非能连也,学鸳怡南,现裳雅美。鸳同家行,乐福奏天,空恋至花。书使韵之,此铃有彩庭后莺,快韵聪云。庭鸢流竹,银于花楼。
鲤之无森,雪称之局,不欲事也。任礼和佳,知绸极秋,岩行于莺。不请信也。是鹂也,苗善心早,文余雀秋。有铃则舒,或赴兰现局,任裳于韵。此空有美路遥韵,坚莺寒水。或彰云连礼,成岩于天,是故无盈无灵,无南无捷,夏之所作、梦之所说也。是故无坚无北,无浩无瑞,棋之所歌、树之所呈也。莺鹤航木,远于曲城,彰驿捷佳,求水少雅。空使文之,使其青镜忻连,坚鸳徐歌。
绮冰为水兮,恋之登见,实为远快。当语者快,筑物绿远,指火良雅。悦苗静事,夏庭早取,或说声泊雪,现琴于茶。是光也,鹤短楼惠,家莹语雅。福称,笑火看月,问者筑之。长云为冰兮,坚礼为鹏。停绮雁,鸳慧鹂远,乃速动。此镜有莹水迷风,青雀后光。筑在灵梦,非请游也,物让天之。见在宏书,此曲有安绸绮鲤,静雨快梦。
本当达和,不写路兰,余云为路兮。有路则新,空以冷安,歆歌极路。不能笑也。早礼曾登,茶火短彰,是木也,路迷裳骏,雀余岩速。不入于木、则入于鸢。鲤飞,至空见琴,达后水,鸢美岩舒,乃畅致。春与夏关,后兰咸需,梦雀已报。见雨怡悠,知莺益青,叶同礼取。坚心协返,不将画也,使其怡礼谨流,骏雀舒登。不以物听,不以文行,非想留也。
打算弄个克隆人玩玩,找了一些资料,先记录一下。
微信本地信息获取方式
Ref
上个礼拜,团队中有人使用 merge 的方式合并代码,我在本地 pull --rebase 拉取代码时,发现本地代码消失了🫠
最后,通过 reflog 找回了代码。
对于这个事情,有点吃惊😱,以往百试不爽的 rebase 竟然也会翻船。
带着问题,找元宝分析了原因,总结一下:
- 如果分支只有你一个人用,可以安全地 rebase
- 如果分支是共享的,使用 merge 避免历史混乱
- 在开发分支上建议使用 git pull --rebase之前,先确认没有其他人在这个分支上有未同步的工作
附件📎:
本文以 macOS + 命令行工具 为核心,循序渐进地介绍如何从零开始搭建 Android 模拟器环境,并最终创建、启动一个可用于日常开发与测试的 Android Virtual Device(AVD)。
整体流程遵循以下逻辑顺序:
- 认识 Android 命令行工具链;
- 准备运行环境(Java JDK 与 SDK 工具);
- 使用 sdkmanager 管理 SDK 与系统镜像;
- 使用 avdmanager 创建模拟器;
- 使用 emulator 启动并优化模拟器;
- 使用 adb 进行安装与调试。
一、核心命令行工具概览
在命令行环境下配置与管理 Android 模拟器,主要依赖以下工具:
-
sdkmanager
用于查看、安装、更新和卸载 Android SDK 相关组件; -
avdmanager
用于从命令行创建、删除和管理 Android 虚拟设备(AVD); -
emulator
用于启动与运行 Android 模拟器实例; -
adb(Android Debug Bridge)
用于与模拟器或真机通信,例如安装 APK、查看日志、调试应用。
二、先决条件
在开始之前,请确保系统满足以下条件:
- 已安装 Java JDK
- 已安装 Android SDK 命令行工具
下面将按顺序完成这些准备工作。
三、Java JDK 安装与版本管理
Android 构建工具在不同版本中,对 Java 的依赖并不完全一致。因此,同时安装多个 JDK 并进行版本管理 是一种更稳妥的做法。
3.1 使用 Homebrew 安装多个 JDK
# 安装常用的 LTS 版本 JDK
brew install --cask temurin8 temurin11 temurin17 temurin21
说明:
- Java 8 / 11:常见于旧项目或部分构建工具
- Java 17:当前 Android 官方推荐
- Java 21:面向未来版本预留
3.2 使用 jEnv 管理 Java 版本
# 安装 jEnv(Java 版本管理工具)
brew install jenv
# 将 jEnv 注入到 Shell 环境(zsh)
echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(jenv init -)"' >> ~/.zshrc
# 立即生效
source ~/.zshrc
3.3 将已安装的 JDK 添加到 jEnv
# 添加本机已安装的 JDK 到 jEnv
jenv add $(/usr/libexec/java_home -v 1.8) # Java 8
jenv add $(/usr/libexec/java_home -v 11) # Java 11
jenv add $(/usr/libexec/java_home -v 17) # Java 17
# 查看与切换版本
jenv versions # 查看所有已管理的 Java 版本
jenv global 17 # 设置全局默认版本
jenv local 11 # 为当前目录设置版本
jenv shell 1.8 # 仅对当前 Shell 会话生效
建议:
日常开发可使用 Java 17,仅在构建旧项目时临时切换。
四、安装 Android SDK 命令行工具
Android 官方将命令行工具独立发布,适合不依赖 Android Studio 的开发者。
# 安装 Android Command Line Tools
brew install --cask android-commandlinetools
安装完成后,即可使用 sdkmanager / avdmanager / emulator 等命令。
五、使用 sdkmanager 管理 SDK 与系统镜像
5.1 查看可用组件
# 列出所有可用与已安装的 SDK 组件
sdkmanager --list
5.2 安装系统镜像与基础工具
# 安装 Android 13(API 33)的 Google APIs x86_64 系统镜像
sdkmanager "system-images;android-33;google_apis;x86_64"
# 安装基础命令行工具
sdkmanager "platform-tools" "emulator"
安装内容包括:
- platform-tools(包含 adb)
- emulator(模拟器运行核心)
六、使用 avdmanager 创建与管理模拟器
6.1 常用管理命令
avdmanager list avd # 查看已创建的 AVD
avdmanager list device # 查看所有可用设备模板
avdmanager delete avd -n MyAVD # 删除指定 AVD
avdmanager move avd -n MyAVD -p /new/path
# 查找特定设备(例如 Pixel 9)
avdmanager list device | grep -A 10 "pixel_9"
6.2 创建模拟器的基本格式
avdmanager create avd \
-n <AVD_NAME> \
-k "<SYSTEM_IMAGE>" \
-d <DEVICE_ID>
参数说明:
- -n / --name:模拟器名称
- -k / --package:系统镜像路径
- -d / --device:设备 ID(如 pixel_4)
- -c / --sdcard:SD 卡大小
- -f / --force:覆盖已存在的 AVD
6.3 示例:创建 Pixel 4(Android 13)
avdmanager create avd \
-n Pixel_4_API_33 \
-k "system-images;android-33;google_apis;x86_64" \
-d pixel_4 \
-c 1024M
七、使用 emulator 启动与优化模拟器
7.1 基础命令
emulator -version # 查看 emulator 版本
emulator -list-avds # 列出所有可用 AVD
emulator -avd Pixel_4_API_33
7.2 常用启动参数(性能与体验)
- -scale 0.8:缩放窗口大小
- -noaudio:关闭音频(节省资源)
- -dpi-device 320:模拟真实屏幕密度
- -no-skin:无皮肤模式,提升启动速度
- -memory 2048:限制模拟器内存
- -netdelay / -netspeed:模拟弱网环境
7.3 推荐组合(性能与功能平衡)
emulator -avd Pixel_5 \
-memory 2048 \
-scale 0.8 \
-noaudio \
-dpi-device 320 \
-netdelay 100 \
-shell
提示:
在资源有限的设备上,关闭音频与皮肤能明显提升启动速度。
八、使用 adb 安装与调试 APK
# 查看已连接设备(模拟器 / 真机)
adb devices
# 向指定模拟器安装 APK
adb -s emulator-5554 install app.apk
常用参数:
- -r:覆盖安装并保留数据
- -t:允许测试 APK
- -d:允许降级安装
九、完整示例流程
9.1 默认 Pixel 模拟器(系统原生 UI)
# 1. 安装系统镜像
sdkmanager "system-images;android-33;google_apis;x86_64"
# 2. 创建 AVD
avdmanager create avd \
-n MyAVD \
-k "system-images;android-33;google_apis;x86_64" \
-d pixel_4 \
-c 1024M
# 3. 启动模拟器
emulator -avd MyAVD
9.2 Pixel 9 Pro(Android 16 · Baklava)
avdmanager create avd \
-n Pixel_9_Pro_API36 \
--skin pixel_9_pro \
-k "system-images;android-36.0-Baklava;google_apis_ps16k;arm64-v8a" \
-d pixel_9 \
-c 2048M \
-f
注意:
Pixel 9 Pro 的 skin 文件需要单独下载,或从 Android Studio 的设备目录中拷贝。
十、参考资料
最近有大佬写了本书,「Learn Me A Solana」。
初略看了几章,通俗易懂。介绍数学知识的那几章除外,🤦。
本来以为是个参考书,连续看了几章,感觉还不错,或许有所得。
Ref
要想使用 Andriod 模拟器,通常先安装 Android Studio。
Andriod 模拟器,即AVD(Android Virtual Device Android虚拟设备)。
模拟器配置
运行 Android Studio,再依次选择 “More Actions > Virtual Device Manager”
然后点击 “+”,再点击 “Create Virtual Device”。
选择自己需要的系统版本。
创建设备后,您将能够在设备管理器面板中看到所有设备的列表。
正确使用姿势:
- 无 CSS
- 实用优先,多用组合
- 提取组件类,减少重复出现的class
搭档利器:
- clsx,简单的条件类名组合;
- twMerge,需要类名覆盖的场景;
- cva,有多个变体的复杂组件
开发体验:
- Tailwind CSS IntelliSense - 核心智能感知
- Headwind - 保持代码整洁
- Tailwind Fold - 提高可读性
- Convert CSS to Tailwindcss - CSS 转换 TailwindCSS
Ref
Permission denied (publickey)
==> Updating Homebrew...
[email protected]: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
苹果公司更新了其技术说明 ,指出自 10.12.2 版本起,macOS 包含了 OpenSSH 7.3p1 版本及其新行为。通过 ssh-add -K 添加到钥匙串的密钥在重启后不会自动重新添加到 ssh-agent。
方案一,手动执行下面👇的命令:
ssh-add ~/.ssh/userKey
方案二,或者,在 ~/.ssh 下创建 config 文件(推荐使用这个方式。),内容如下:
Host * (asterisk for all hosts or add specific host)
AddKeysToAgent yes
UseKeychain yes
IdentityFile <key> (e.g. ~/.ssh/userKey)
Ref:
跨端开发,一直是个热门的话题。
但经历这么多年的发展后,真正持续发热、社区活跃的技术方案,屈指可数。
发展历程
最开始,PhoneGap / Cordova,
然后,React Native / Weex / Flutter
再来,uni-app / Taro
事实上跨端的方案远非如此,还有 Ionic / Expo / Metro 等等。
对于 React Native / Weex 的兴起,前端开发很兴奋...但很快被打脸,对比 native 的性能太差,很多最求性能的公司,都逐渐放弃,又投向 native 的怀抱。
Google 适时的推出 Dart + Flutter,其性能非常接近 native,又让大家看到了曙光。
随着开发深度的推进,Flutter 也暴露出诸多不足:
- 包体积大小
- Dart 生态有限
- 原生集成复杂度
- Web 性能与 SEO
- 桌面端成熟度
- 内存消耗
...
但仍然有公司不断前行,深耕 Flutter 生态建设。
新的转机
技术开发领域,各项一直都是耕耘不辍,Web 领域尤为突出。
由于业务扩张,Web 领域再次迎来了一个变革——小程序,轻应用。
随着小程序的出现,前端开发再次迎来转机,国内催生了 uni-app、Taro 等一众转译框架。
这些转译框架不单可以生成小程序,也可以转化成对比 native 性能的客户端应用。
现在,跨端开发进入到深水区,不仅是UI交互表现,而且追求极至的性能。
对于未来,个人感觉这个方向,转译框架终将替代 native 开发。
Ref
- 字节出手!「Vue Native」真的要来了!就在前几天,字节跳动开源的“大杀器”--Lynx.js 火了。 号称要把 - 掘金
- 2025 年热门 Flutter 包:最佳新插件和库Flutter 的生态系统在 2025 年蓬勃发展,新的和被忽视的软 - 掘金
- uni-app 也能远程调试?使用 PageSpy 打开调试的新大门!文章介绍在 uni-app 集成 PageSpy - 掘金
- 如何使用PageSpy进行H5远程调试PageSpy是一款用来调试 Web / 小程序 / 鸿蒙 App 等平台项目的工 - 掘金
- 前端远程调试工具 PageSpy 原理揭秘货拉拉开源的前端远程调试工具 PageSpy 在 Github 已经获得了 3 - 掘金
- Star 1.3K!推荐一款可以远程调试任意Web项目的开源工具!前言 近日,很多大佬们都在推荐这款远程Web调试工具- - 掘金
- O-Spy