mjc's blog

mjc's blog

Thoughts, stories and ideas.

Android Framework开发详细教程

开源项目 1. GitHub - ustc-mjc/Android-ReadTheFuckingSourceCode: 😜 记录日常的开发技巧,开发中遇到的技术重点、难点,各个知识点的总结,优质面试题等等。持续更新...😜 记录日常的开发技巧,开发中遇到的技术重点、难点,各个知识点的总结,优质面试题等等。持续更新... - ustc-mjc/Android-ReadTheFuckingSourceCodeGitHubustc-mjc 2. GitHub - yuandaimaahao/AndroidFrameworkTutorial: 写给应用开发的 Android Framework 教程写给应用开发的 Android Framework 教程. Contribute to yuandaimaahao/AndroidFrameworkTutorial development by creating an account on GitHub.GitHubyuandaimaahao
1 min read

Android framework开发实战三

Looper/Handler 线程间通信源码分析 Looper的工作方式 提到Handler,那么我们就绕不开Looper,在Android Java层,我们会经常看到如下的代码: Looper.prepare() Looper.loop() 这段代码,主要是为了阻塞当前线程,等待消息再来唤醒和处理的,他的作用基本类似于: while(true){ //Do something } 那么接下来,我们就来看下它到底是怎么实现的。 我们先看Looper.prepare的源码: 可以看到,这个静态方法只是创建了一个新的Looper,并且将它设置给sThreadLocal。 从上面的代码我们可以得知,sThreadLocal的类型是ThreadLocal<Looper>: 那么也就意味着,这段代码的意思就是创建了一个Looper并且赋值给当前线程的sThreadLocal,我们再看Looper的构造方法: 可以看到它主要的作用就是创建了一个新的消息队列,并且把当前线程保存下来。 我们再看Looper.loop的源码: 可以看到,首先它调用了myLooper
6 min read

Android framework开发实战二

Inputflinger 触摸事件的获取,转换与分发 Android的触摸事件是如何获取的 平常我们在应用层开发的时候,当我们想去处理view的触摸事件,可能会写以下的代码: mView.setOnTouchListener(object : OnTouchListener { override fun onTouch(v: View?, event: MotionEvent?): Boolean { } }) 然后根据获取的MotionEvent去处理具体的触摸事件,达成我们想要的效果,那么问题来了,从手指去触摸手机屏幕开始,事件是怎么传递到自定义View的onTouch这里的? 这其实就是Inputflinger的工作了。 首先打开adb shell, 然后输入getevent -lrt,可以看到如下界面: 这个时候我们使用手指滑动屏幕,就可以看到如下的打印: 这里,其实就是驱动层输出的数据了,我们的Inputflinger在触摸这里的处理,就是要将我们从驱动层获取的这些数据,最终发送到我们触摸的View中去,然后去处理我们的上层逻
20 min read

Android framework开发实战一

开机动画BootAnimation learn check 点 基础 1. 熟悉aosp项目结构+构建系统(mk、bp、bazel)+产物 src->target path 2. 编译aosp14源码+emulator模拟器跑起来(cf模拟器可选) 3. 熟悉调试工具+性能等工具的使用 4. 自定义系统APP编译进AOSP里 1. 带so的app和不到so的app 2. AS里源码开发构建测试app 打进AOSP里 3. 直接在AOSP里定义好JAVA文件构建APP 4. 别人的二进制APP编入AOSP里 5. 自定义C++库/可执行文件打入AOSP系统内 6. 定制开机动画 linux 内核源码下载 当我们打开AOSP源码的/kernel目录下的时候,我们可以看到AOSP并不包含对应使用的Linux源码,只有预先编译好的各个版本的Linux,这意味着如果我们替换AOSP编译时使用的Linux Kernel版本,或者希望修改Linux Kernel代码在设备在启动Android之前做一些工作的话,
59 min read

CPU学习

四阶段“学练一体”路线图 第一阶段:建立数字逻辑与CPU全栈直觉(1-2个月) 核心:从开关电路到可运行程序的完整计算机。 * 学:《编码》 + Nand2Tetris 课程(Part I)。 * 练:必做 Nand2Tetris 配套实验。这是“边学边模拟”的典范: * 实验1-5:使用课程提供的硬件模拟器,用逻辑门搭建组合/时序电路,最终构成一个完整的CPU和内存。 * 实验6-7:为你刚搭建的CPU编写汇编器,并让CPU执行汇编程序。 * 即时反馈:你写的每一行HDL或汇编代码,都可以在图形化模拟器中单步执行,观察每一个引脚、寄存器、内存单元的状态变化。 第二阶段:深入CPU微架构与流水线(2-3个月) 核心:理解现代CPU的基石——流水线,及其带来的挑战与解决方案。 * 学:《计算机组成与设计》第4、5、6章(处理器与流水线)。 * 练: 1.
11 min read
Android

AOSP build envsetup.sh 完全解析

一、文件概述 build/envsetup.sh 是 AOSP 构建系统的入口脚本。每次打开终端准备编译 Android 时,你执行的第一条命令就是: source build/envsetup.sh 它的核心职责是:为当前 shell 环境注入一系列构建辅助函数、设置环境变量、配置 PATH、加载补全脚本和 vendor 配置,让你能够使用 lunch、m、mmm 等便捷命令来编译 Android。 二、执行流程总览 当你 source build/envsetup.sh 时,脚本按以下顺序执行: 1. _gettop_once() → 定位源码树根目录 2. source shell_utils.sh
48 min read

Makefile 与 make/.mk 语法教程:从入门到进阶精通

本教程致力于为具备基础编程背景的工程师和学生提供一份详尽的 Makefile 与 make 语法指南。我们将从最基础的概念出发,循序渐进,直至进阶应用与工程实践,力求将复杂的构建体系知识拆解为清晰易懂的学习路径。无论你是初次接触 Makefile,还是希望系统性地巩固和提升,都能从中获益。 一、入门基础:与 Make 的第一次亲密接触 make 是一个历史悠久但至今仍在广泛使用的构建自动化工具。它通过读取名为 Makefile 的文件,来理解项目各个部分之间的依赖关系,并执行必要的命令来生成最终的目标产物(例如可执行文件、库、文档等)。 1.1 三要素:目标(Target)、依赖(Prerequisites)和命令(Recipe) 一个 Makefile 的核心由一系列“规则”(Rule)构成,每条规则包含三个基本要素: * 目标(Target):规则所要构建的产物,通常是一个文件名,也可以是一个抽象的动作名称(如
42 min read

本地部署模型推荐[持续更新]

2026-4-20 一、核心参数对比 对比维度qwen3.6:35b-a3b gemma4:31b qwen3.5:27b 优势方架构 MoE稀疏 (350亿总参/30亿激活)稠密架构 (310亿全激活)稠密架构 (270亿全激活)qwen3.6 发布时间 2026年4月2026年4月2026年2月-许可证 Apache 2.0Apache 2.0Apache 2.0平手上下文 256K (可扩展至1M)256K262K (可扩展至1M)平手多模态 ✅ 文本+图像+视频✅ 文本+图像+视频+音频✅ 文本+图像gemma4 量化版本 q4_K_M(24GB)、q8_
2 min read
Linux 常用命令与文本三剑客教程:从入门到进阶

Linux 常用命令与文本三剑客教程:从入门到进阶

引言:为何要精通命令行? 在图形化界面(GUI)主导的今天,为何我们仍需回归看似“原始”的命令行(CLI)?对于工程师而言,命令行不仅是操作系统暴露的底层接口,更是一种高效、可编程、可复现的通用“语言”。它能让你: * 自动化重复任务:通过脚本批量处理文件、部署应用、监控系统,极大提升效率。 * 深入理解系统:直接与操作系统交互,观察进程、网络、文件系统的真实状态,培养“庖丁解牛”般的洞察力。 * 驾驭无界面环境:在服务器、容器、CI/CD 等环境中,命令行是唯一且最高效的交互方式。 * 构建强大工具链:将多个简单命令通过管道组合,以“流”的方式处理数据,构建出远超单个 GUI 工具能力的强大工作流。 本教程旨在帮助已有一定开发经验的工程师,系统性地掌握 Linux 环境下最高频的命令、I/O
21 min read
Android 构建语法教程:从 Android.mk、Android.bp 到 Bazel 的常用与进阶

Android 构建语法教程:从 Android.mk、Android.bp 到 Bazel 的常用与进阶

https://juejin.cn/post/7341592148305231881 前言:理解三套构建语言的演进与设计哲学 在 Android 漫长的发展历程中,其构建系统为了应对日益增长的工程复杂性、提升构建效率与可靠性,经历了从 Android.mk 到 Android.bp,再到逐步引入业界标准 Bazel 的演进。这三套构建语言不仅是工具的更迭,更体现了构建思维的深刻变迁。 * Android.mk (GNU Make):作为元老,它基于强大的 GNU Make,提供了极高的灵活性。开发者可以直接利用 Make 的所有语法和函数,编写复杂的条件判断和自定义规则。然而,这种灵活性也带来了维护成本高、可读性差、难以解析和增量构建性能不佳等问题。.mk 文件本质上是 Make 的脚本,描述的是“如何做”(How)。 * Android.bp (Soong/
24 min read
Android&AOSP历史
Android

Android&AOSP历史

构建工具历史 名称由来与含义 工具名称由来与含义Bazel 是 Google 内部构建工具 Blaze 的变位词(anagram)。Blaze 在 Google 内部使用了近20年,用于构建搜索、Gmail、YouTube 等超大规模单仓代码库。Bazel 是其2015年开源的版本。Soong 1. 人名致敬:源自 AOSP 构建系统早期核心工程师 Robert “Bob” Soong。 2. 寓意双关:发音类似 “Soon”(更快)和 “Song”(歌曲),寓意 “更快、更优雅的构建系统”,旨在取代缓慢的 Make。CMake “Cross-platform Make” 的缩写。虽然名字中含有 “make”,但它是一个更高级的跨平台构建配置生成器,并不直接执行构建,而是生成
28 min read
AI

Hello-Agents阅读笔记

GitHub - datawhalechina/hello-agents: 📚 《从零开始构建智能体》——从零开始的智能体原理与实践教程📚 《从零开始构建智能体》——从零开始的智能体原理与实践教程. Contribute to datawhalechina/hello-agents development by creating an account on GitHub.GitHubdatawhalechina 1.Agent简介 1.1 定义 在探索任何一个复杂概念时,我们最好从一个简洁的定义开始。在人工智能领域,智能体被定义为任何能够通过传感器(Sensors)感知其所处环境(Environment),并自主地通过执行器(Actuators)采取行动(Action)以达成特定目标的实体。 1.2 Agent的任务环境定义 要理解智能体的运作,我们必须先理解它所处的任务环境。在人工智能领域,通常使用PEAS 模型来精确描述一个任务环境,即分析其性能度量(Performance)、环境(Environment)、执行器(
16 min read
FPGA自制RISC-V CPU

FPGA自制RISC-V CPU

项目目标 1. 在正点原子达芬奇pro 赛灵思A7 100T上搭建RISC-V处理器,可以再起之上跑通xv6 OS,学习CPU内部实现的原理和OS的原理 2. 学习CPU内部实现的原理 3. 学习OS的原理 三个推荐项目(按推荐度排序) 项目核心特点适合你的原因难度/工作量能否直接跑 xv6?1. 蜂鸟 E203 (e203_hbirdv2) - 工业级开源 RISC‑V 核(RV32IMAC) - 配套完整的 SoC 框架(Hbird‑SoC) - 有详细的 《手把手教你设计CPU》 书籍和视频教程- 文档极全,从 Verilog 到 SoC 再到上机,每一步都有指导 - 已支持 Xilinx Artix‑7(
16 min read
从0到1: 手把手带你做好技术规划
软技能

从0到1: 手把手带你做好技术规划

2025-11-04 前言 陆续分享过几篇自己的思考,希望引起大家对软技能的重视,感谢大家一直以来的支持。 * 如何写好一篇文档? 🔥 1.0w 👍 261 ⭐️ 422 * i 人研发沟通指北: 沟通中的道与术 🔥 7.6k 👍 349 ⭐️ 398 * 基建团队的自我修养 🔥 4.5k 👍 243 ⭐️ 164 相信大家或多或少都写过一些规划,规划也是成为 Owner 的必备技能之一。最近一直在跟团队里的同学对一些规划,发现了一些共性的问题,总结下来,希望对大家能有所帮助,也欢迎各位同学在评论区讨论。👉 👉 👉 文章比较长,建议先⭐️收藏再阅读哦!古人云,凡事预则立,不预则废。技术规划,是进阶路上必不可少的一环。那一个好的规划需要完成哪些事情呢?先下结论 * 判断事情是否值得做 (要做对的事情,好钢用在刀刃上) * 判断事情该如何做 (要把事情做对) * 简洁而清晰地展现推导逻辑 (向外争取资源,酒香也怕巷子深,大家都是聪明但很忙的人)
44 min read
拒绝 AI 名词焦虑:LLM 核心概念,一次讲透

拒绝 AI 名词焦虑:LLM 核心概念,一次讲透

2026.2.9 Skills、Agent、Claude Code、OpenClaw、codeX,这些词你都认识哪些,本文为大家扒开大多数唬人AI概念的底裤,你会发现所谓智能体,就是所有不需要智能的部分构成的部分,skill就是新瓶装旧酒的一场名词诈骗;最后本文会总结一个通杀现在所有甚至未来可能出现的新概念的统一方法论本文前几部分是基础知识,赶时间的话直接到下文的这部分——拒绝 AI 名词焦虑:LLM 核心概念,一次讲透 引言 近些年来,AI的井喷式爆发,对程序员的冲击确实很大——网络上,前端程序员三天一小死,五天一大死;依然记得,在25年初的时候,那时候是在上海出差,那时候和某一个前端ld吃饭,他问我:你知道cursor吗?再不学习cursor,你就要没了。那时候我懵懵懂懂,AI真的能取代程序员吗?半信半疑之间我就开始——实践学习实践AI相关的内容,越深入学习,越发现自己的无知。最近,cursor VP Lee Robinson分享了他的AI感悟和经验—— 《AI codes
35 min read
从零开发 Deep Research Agent
AI

从零开发 Deep Research Agent

2025.6.18 前期回顾 前言 DeerFlow 是一款开源的 Deep Research 框架,它利用大模型的推理能力进行课题研究的自主规划,在话题深度和广度上进行拓展,并且利用大模型调用工具的特性自动调取网页搜索、RAG、Python 执行器,最终生成高质量的图文报告及播客。DeerFlow 还支持通过 MCP 的方式进行工具扩展。DeerFlow 在 Github 上发布之后,在开源界获得了不错的反响,仅 7 天就收获了 10k Stars,可能是字节跳动 Stars 数增长最快的项目。技术分享文章的阅读量在内网也超过了 1.4 万阅读量,在公众账号上阅读量破万并被转发了数千次。在 2025 年火山大会后,DeerFlow 已在在火山引擎的“函数服务”中上线,可实现一键部署。有关 DeerFlow 的更多信息,
42 min read
Agent Skills 与 MCP:智能体能力扩展的两种范式
AI

Agent Skills 与 MCP:智能体能力扩展的两种范式

hello-agents/Extra-Chapter/Extra05-AgentSkills解读.md at main · datawhalechina/hello-agents📚 《从零开始构建智能体》——从零开始的智能体原理与实践教程. Contribute to datawhalechina/hello-agents development by creating an account on GitHub.GitHubdatawhalechina 引言:MCP 之后,我们还需要什么? 在第十章中,我们深入探讨了 MCP(Model Context Protocol)如何通过标准化协议解决智能体与外部工具的连接问题。你已经学会了如何让智能体通过 MCP 访问数据库、文件系统、API 服务等各种资源。让我们回顾一个典型的 MCP 使用场景: from hello_agents import ReActAgent, HelloAgentsLLM from hello_
28 min read
C++11 新特性
C++新特性

C++11 新特性

来源:https://zhuanlan.zhihu.com/p/650986900 1.并发支持 1.1内存模型 C++11引入了一个新的内存模型,即C++11内存模型(C++11 memory model)。它定义了多线程并发环境下对共享数据的访问和修改行为,以及对原子操作和同步操作的语义。在这些之上,C++11还提供了对原子类型和无锁编程的支持,并且与之集成。 C++11内存模型确保了一些基本的原则: 1. 原子性(Atomicity):对于原子类型(std::atomic),其成员函数的操作是原子的,不会被其他线程中断。 2. 可见性(Visibility):对于非原子类型,通过使用互斥量或同步操作来确保共享数据的可见性,即在一个线程中对共享数据的修改会立即反映到其他线程中。 3. 有序性(Ordering):通过同步操作(如互斥量、原子操作的memory_order参数等)来定义操作的顺序性,从而在多线程环境中确定操作和事件的相对顺序。
22 min read
音视频技术原理及其应用
音视频

音视频技术原理及其应用

原创 来源于微信读书 字节跳动技术团队  钱雨波 2024年10月14日 18:04 重庆github 学习资料 https://github.com/0voice/awesome_audio_video_learning 基础知识 音频基础 声音转数字信号 音频基础知识及 PCM 技术详解 声音的本质是一种能量波。音调,由声音的频率决定。音量,由振幅和人离声源的距离决定。音色,由波形决定。从声音到数字信号,宏观上包括三个步骤: 1. 声波通过空气传播到麦克风的振膜。 2. 振膜随空气抖动的振幅大小产生相应的电学信号,即模拟信号(Analogue Signal)。 3. 通过模数转换器 ADC 将模拟信号转换成数字信号(Digital Signal)。 数字音频的 A/D 转换涵盖三个过程:采样、
61 min read