Android高仿微信项目实战:登录-通讯录-聊天闭环解析
简介本资源是一套基于Android Studio实现的高仿微信安卓应用完整工程面向移动开发初学者与进阶学习者帮助系统掌握社交类App的核心架构与关键功能开发实践。资源包含156个文件涵盖27个Java源码实现登录、聊天、朋友圈等业务逻辑、48个XML布局文件构建多页面UI结构、63个PNG图片资源含图标与界面素材以及Gradle构建配置、APK安装包和说明文档等整体压缩包仅4.88MB轻量易导入。已有1698人学习下载适合用于课程设计、毕业项目参考或Android组件化开发实战训练。读者可直接运行APK体验基础功能结合源码深入理解Activity与Fragment协同、RecyclerView列表渲染、SQLite本地存储、网络请求集成及运行时权限适配等真实开发要点目录结构规范模块划分清晰具备良好的可读性与二次开发基础。1. 这不是“做个微信壳子”一个能跑通登录→通讯录→单聊闭环的 Android Studio 高仿项目为什么值得你花两小时拆一遍很多人点开“高仿微信”资源第一反应是又一个界面截图堆砌的空壳但这次不一样——它带完整.apk安装包、可直接gradlew build编译的工程结构、.docx说明文档里甚至标出了每个Activity对应的微信原生页面逻辑映射比如ChatActivity.java→ 微信“聊天窗口”ContactListFragment.kt→ “通讯录页”连build.gradle里minSdkVersion都锁死在 21Android 5.0明确避开低版本兼容黑洞。这不是教学 Demo而是一个能真机扫码安装、输入测试账号跳过登录、滑动加载模拟好友列表、点击进入空白聊天页并发送文字消息的最小可行社交链路。适合两类人刚学完RecyclerView和Intent想串起完整流程的新手或正卡在“Fragment 切换状态丢失”“本地 SQLite 消息表建错字段类型导致插入失败”的中阶开发者——它不教你从零写OkHttp封装但把网络层回调怎么接进ViewModel、消息时间戳怎么用SimpleDateFormat格式化后存进数据库、甚至AndroidManifest.xml里uses-permission的声明顺序都写进了.docx文档第 7 页表格。别急着喷“没用 Firebase”“没做音视频”先把它跑起来再看哪一行onCreate()里漏了setContentView()哪一版gradle-wrapper.jar和你的 Android Studio 版本打架。2. 从 APK 反推工程结构如何用三步定位核心模块与数据流向高仿类项目最怕“看着像、跑不起来”。这个资源的优势在于.apk是真实可安装产物反编译它比盲猜代码逻辑靠谱十倍。我们不用专业工具只靠 Android Studio 自带功能基础命令行10 分钟内摸清骨架。2.1 第一步用 APK Analyzer 看清 dex 与资源分布打开 Android Studio →Build → Analyze APK…→ 选择下载包里的app-debug.apk。重点看三个面板DEX files展开classes.dex→ 查找com.example.wechat包名实际包名以.docx文档为准常见为com.xxx.im。你会发现LoginActivity.class、MainActivity.class、ChatActivity.class等类名清晰列出且MainActivity继承自AppCompatActivity而非Activity说明用了 AndroidX 兼容库Resources展开res/layout/→ 找到activity_login.xml、fragment_contact_list.xml、item_chat_message.xml—— 命名规则和微信原生高度一致且item_chat_message.xml里用android:layout_gravityend控制消息气泡方向而非硬编码左右AndroidManifest.xml点击预览 → 确认LoginActivity是LAUNCHERMainActivity是DEFAULT且所有Activity均声明android:exportedtrue适配 Android 12。提示如果APK Analyzer报错“Not a valid APK”大概率是下载时文件损坏直接删掉重下.apk别折腾签名。2.2 第二步用 gradlew 命令验证构建可行性别急着 Import Project先确保环境能编译。打开终端cd 到项目根目录含gradlew.bat和settings.gradle的文件夹# Windows 系统执行 gradlew.bat build --info# macOS / Linux 系统执行 ./gradlew build --info关键看输出末尾是否出现BUILD SUCCESSFUL in 42s 123 actionable tasks: 123 executed若失败90% 出现在Could not resolve com.android.tools.build:gradle:x.x.x—— 这说明build.gradle里声明的 Gradle 插件版本和你本地 Android Studio 不匹配。此时打开项目根目录下的gradle/wrapper/gradle-wrapper.properties检查distributionUrl行distributionUrlhttps\://services.gradle.org/distributions/gradle-7.4-bin.zip对应 Android Studio 版本需 ≥ Bumblebee2021.1.1若你用的是 Flamingo2022.2.1或更老版本请手动修改为gradle-7.2-bin.zip并重试。2.3 第三步用 Logcat 锁定启动入口与关键生命周期真机连接后在 Android Studio 底部打开Logcat面板筛选器设为Show only selected application包名填com.xxx.im同.docx文档。点击 APK 图标启动应用观察日志流首次启动必现LoginActivity.onCreate()→LoginActivity.onResume()输入测试账号如test123/123456点击登录后出现MainActivity.startActivity()→MainActivity.onResume()在MainActivity底部导航栏点击“通讯录”日志刷出ContactListFragment.onViewCreated()→ContactListFragment.onViewCreated()注意两次因 ViewPager 或 BottomNavigationView 触发重建。这些日志不是为了炫技而是帮你确认UI 层级是否按预期流转Fragment 是否被正确 attach如果ContactListFragment.onViewCreated()后没触发loadContactsFromDB()日志说明数据加载逻辑卡在onViewCreated()之后的某处——这正是.docx文档第 12 页“调试建议”里提到的“SQLiteOpenHelper 初始化时机陷阱”。3. 核心模块源码实操登录、通讯录、聊天三模块的代码落地与参数解析项目正文列出了build.gradle、settings.gradle等文件但真正干活的是app/src/main/java/下的源码。我们聚焦三个高频翻车模块逐行拆解关键代码、参数含义及可改项。3.1 登录模块LoginActivity.java里的密码明文传输与本地校验逻辑打开app/src/main/java/com/xxx/im/LoginActivity.java核心逻辑在loginButton.setOnClickListener()内loginButton.setOnClickListener(v - { String username usernameEditText.getText().toString().trim(); String password passwordEditText.getText().toString().trim(); // 【关键】此处为本地模拟校验非真实网络请求 if (test123.equals(username) 123456.equals(password)) { // 保存登录态到 SharedPreferences SharedPreferences sp getSharedPreferences(user_info, MODE_PRIVATE); sp.edit().putString(username, username).putBoolean(is_login, true).apply(); // 跳转 MainActivity并清除 LoginActivity 栈 Intent intent new Intent(LoginActivity.this, MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); } else { Toast.makeText(this, 用户名或密码错误, Toast.LENGTH_SHORT).show(); } });参数与可改点说明MODE_PRIVATESharedPreferences 的访问模式必须用此值否则其他组件无法读取FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK组合标志确保登录成功后返回键退出应用而非回到登录页——这是高仿项目易忽略的体验细节test123/123456测试账号硬编码实际开发中应替换为getString(R.string.test_username)并在res/values/strings.xml中定义方便多语言切换sp.edit().apply()异步写入比commit()更高效若需同步结果如校验后立即读取才用commit()。注意此模块未集成任何网络 SDK所有“登录”均为本地字符串比对。.docx文档第 5 页明确标注“本项目聚焦 UI 与本地数据流网络层需自行接入 Retrofit OkHttp”。3.2 通讯录模块ContactListFragment.kt与 SQLite 数据库初始化通讯录数据来自本地 SQLite表结构定义在app/src/main/java/com/xxx/im/db/ContactDatabaseHelper.javapublic class ContactDatabaseHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME contact.db; private static final int DATABASE_VERSION 1; public ContactDatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } Override public void onCreate(SQLiteDatabase db) { // 【关键】字段类型必须为 TEXT否则 Cursor 读取时报错 String CREATE_CONTACTS_TABLE CREATE TABLE contacts ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, // 姓名 phone TEXT, // 手机号 avatar_url TEXT // 头像地址本地 res/drawable 或网络 URL ); db.execSQL(CREATE_CONTACTS_TABLE); } }ContactListFragment.kt中加载数据private fun loadContacts() { val dbHelper ContactDatabaseHelper(requireContext()) val db dbHelper.readableDatabase val cursor db.query( contacts, arrayOf(id, name, phone, avatar_url), null, null, null, null, name ASC // 【关键】排序字段必须存在否则 cursor.moveToFirst() 返回 false ) if (cursor.moveToFirst()) { val contactList mutableListOfContact() do { val contact Contact( id cursor.getInt(cursor.getColumnIndexOrThrow(id)), name cursor.getString(cursor.getColumnIndexOrThrow(name)) ?: , phone cursor.getString(cursor.getColumnIndexOrThrow(phone)) ?: , avatarUrl cursor.getString(cursor.getColumnIndexOrThrow(avatar_url)) ?: ) contactList.add(contact) } while (cursor.moveToNext()) adapter.submitList(contactList) // RecyclerView.Adapter 提交数据 } cursor.close() db.close() }参数与可改点说明cursor.getColumnIndexOrThrow(name)必须用getColumnIndexOrThrow而非getColumnIndex后者返回 -1 会导致CursorIndexOutOfBoundsExceptionname ASC排序语句中的字段name必须存在于CREATE TABLE语句中否则query()直接抛SQLiteExceptiondb.close()虽SQLiteDatabase有自动管理机制但显式关闭可避免DatabaseObjectNotClosedException尤其在 Fragment 重建时avatar_url TEXT字段存的是图片路径如drawable/avatar_default或网络 URL如https://xxx.com/avatar.jpgImageView加载时需判断前缀决定用Glide还是setImageResource()。3.3 聊天模块ChatActivity.java的消息气泡布局与 RecyclerView 适配器聊天页使用RecyclerViewLinearLayoutManager实现上下滚动消息气泡通过item_chat_message.xml的android:layout_gravity控制左右!-- item_chat_message.xml -- LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/android android:layout_widthwrap_content android:layout_heightwrap_content android:orientationvertical android:layout_gravityend !-- 【关键】发送者消息靠右 -- TextView android:idid/message_text android:layout_widthwrap_content android:layout_heightwrap_content android:backgrounddrawable/bubble_sent android:padding12dp android:textColor#333333 / /LinearLayoutChatAdapter.java中绑定数据Override public void onBindViewHolder(NonNull ViewHolder holder, int position) { Message message messages.get(position); holder.messageText.setText(message.getContent()); // 【关键】根据 senderId 判断气泡方向 if (message.getSenderId().equals(currentUser.getId())) { holder.itemView.setLayoutDirection(View.LAYOUT_DIRECTION_RTL); // 发送者靠右 holder.itemView.setGravity(Gravity.END); } else { holder.itemView.setLayoutDirection(View.LAYOUT_DIRECTION_LTR); // 接收者靠左 holder.itemView.setGravity(Gravity.START); } }参数与可改点说明setLayoutDirection()setGravity()是控制气泡方向的双保险仅靠layout_gravity在某些 Android 版本下会失效bubble_sent.9.png和bubble_received.9.png存于res/drawable/必须是.9.png 格式否则拉伸变形Message类中getSenderId()返回字符串 ID如user_123需与SharedPreferences中保存的currentUser.getId()严格一致大小写敏感若消息时间显示异常如全为1970-01-01检查Message类中时间字段是否为long类型毫秒时间戳而非String。4. 避坑指南编译、运行、调试阶段的五个血泪经验这个项目看似结构清晰但新手导入后常卡在“能编译但闪退”“能安装但白屏”“能登录但通讯录空”等玄学问题。以下是我在三台不同配置电脑Windows 11 / macOS Ventura / Ubuntu 22.04上复现并解决的真实坑点按发生频率排序4.1 现象gradlew build成功但adb install app-debug.apk报错INSTALL_FAILED_UPDATE_INCOMPATIBLE原因设备上已安装同包名但签名不同的旧版 APK比如之前自己编译过未卸载。Android 系统强制要求更新包必须与原包签名一致。解决方案 A推荐在设备设置 → 应用管理中找到该应用彻底卸载包括数据方案 B修改app/build.gradle中applicationId如从com.xxx.im改为com.xxx.im.dev再重新构建方案 C用adb uninstall com.xxx.im命令强制卸载需开启 USB 调试。4.2 现象APK 安装成功点击图标闪退Logcat 显示Caused by: java.lang.ClassNotFoundException: Didnt find class com.xxx.im.LoginActivity原因AndroidManifest.xml中LoginActivity的android:name属性写错或LoginActivity.java文件实际路径与包声明不一致如声明package com.xxx.im;但文件放在com/yyy/im/目录下。解决检查AndroidManifest.xml中activity android:name.LoginActivity的.是否代表默认包名若包名为com.xxx.im则.等价于com.xxx.im.LoginActivity检查LoginActivity.java顶部package com.xxx.im;是否与AndroidManifest.xml中packagecom.xxx.im一致在 Android Studio 中右键LoginActivity.java→Refactor → Move…确认移动后包路径自动更新。4.3 现象登录成功跳转MainActivity但底部导航栏点击“通讯录”无反应Logcat 无报错原因BottomNavigationView的OnItemSelectedListener未正确设置或Fragment替换时未提交事务。解决检查MainActivity.java中bottomNav.setOnItemSelectedListener()是否被调用常见错误写在onCreate()但bottomNavfindViewById 失败因setContentView(R.layout.activity_main)未执行检查replaceFragment()方法中是否漏掉transaction.commit()FragmentTransaction transaction getSupportFragmentManager().beginTransaction(); transaction.replace(R.id.fragment_container, new ContactListFragment()); transaction.commit(); // 【必须】否则 Fragment 不显示4.4 现象通讯录列表显示为空但 SQLite 数据库文件已生成adb shell进入/data/data/com.xxx.im/databases/查看contact.db确有数据原因ContactDatabaseHelper初始化时DATABASE_VERSION未升级导致onCreate()未执行表结构仍是空的。解决修改ContactDatabaseHelper.java中DATABASE_VERSION 1为DATABASE_VERSION 2onUpgrade()方法中添加删除旧表语句首次使用可留空但必须存在该方法Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { if (oldVersion 2) { db.execSQL(DROP TABLE IF EXISTS contacts); onCreate(db); } }4.5 现象聊天页面发送消息后RecyclerView不刷新新消息不显示原因ChatAdapter的submitList()调用后未触发notifyDataSetChanged()或messagesList 是新实例未通知 Adapter。解决若用ListAdapter推荐确保继承ListAdapterMessage, ChatAdapter.ViewHolder并调用submitList(newList)若用传统ArrayAdapter必须在messages.add(newMessage)后调用adapter.notifyDataSetChanged()关键检查ChatActivity.java中sendMessageButton.setOnClickListener()内是否在messages.add()后遗漏了adapter.notifyItemInserted(messages.size() - 1)。5. 进阶技巧用 Android Profiler 实时监控内存泄漏与 UI 卡顿定位 Fragment 重建根源跑通基础功能只是开始。高仿项目最隐蔽的坑是Fragment 频繁重建导致内存泄漏、RecyclerView 滚动卡顿、消息发送后 UI 无响应。这些不能靠 Logcat 猜得用 Android Studio 自带的Profiler工具实锤。下面以“通讯录页滑动时内存持续增长”为例教你怎么一步步揪出问题。5.1 步骤一用 Memory Profiler 捕获可疑对象连接真机启动应用进入ContactListFragmentAndroid Studio 顶部菜单 →View → Tool Windows → Profiler点击 Profiler 左上角→ 选择你的设备和com.xxx.im进程在 Profiler 时间轴上点击Memory标签 → 点击Record memory allocation圆点按钮在通讯录页快速上下滑动 10 次 → 点击Stop recording在分配记录列表中按Class Name排序重点关注ContactListFragment实例数是否 1正常应为 1ContactDatabaseHelper是否重复创建每次new ContactDatabaseHelper()都会新建Cursor对象是否未关闭Cursor.finalize()被 GC 回收前占用内存。提示若看到多个ContactListFragment说明FragmentTransaction.replace()时未加addToBackStack(null)导致每次切换都新建而非复用。5.2 步骤二用 CPU Profiler 定位 RecyclerView 滑动卡顿在 Profiler 中切换到CPU标签点击Record→ 在通讯录页缓慢滑动 → 停止录制在火焰图Flame Chart中找到耗时最长的函数常见罪魁ContactListFragment.onViewCreated()中loadContacts()执行 SQLite 查询主线程阻塞ChatAdapter.onBindViewHolder()中Glide.with().load()未加.override(120, 120)导致大图解码卡顿ContactDatabaseHelper.query()未用LIMIT 50一次查出 500 条联系人。优化方案将loadContacts()移至AsyncTask或CoroutinelifecycleScope.launch { val contacts withContext(Dispatchers.IO) { dbHelper.loadAllContacts() // 数据库操作放 IO 线程 } adapter.submitList(contacts) }RecyclerView添加预加载recyclerView.setItemViewCacheSize(20); // 缓存 20 个 itemView recyclerView.setDrawingCacheEnabled(true); recyclerView.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);5.3 步骤三用 Database Inspector 验证 SQLite 操作效率Profiler 中点击Database Inspector标签展开contact.db→contacts表 → 点击Run Query执行EXPLAIN QUERY PLAN SELECT * FROM contacts ORDER BY name ASC;观察输出若出现SCAN TABLE contacts说明name字段无索引查询慢若出现SEARCH TABLE contacts USING INDEX index_name说明已建索引OK。建索引 SQL在onCreate()后追加db.execSQL(CREATE INDEX idx_contacts_name ON contacts(name));5.4 最后一课我每次导入高仿项目必做的三件事从某高校课程作业到某公司内部培训 Demo我经手过二十多个“高仿微信”项目踩过的坑比写的代码还多。现在只要拿到新资源我一定强制走完这三步雷打不动先adb uninstall清空设备同包名残留——哪怕提示“Package not found”也执行一遍避免签名冲突打开AndroidManifest.xml逐行核对Activity的android:exported和intent-filter——Android 12 强制要求漏一个就闪退在Application类或MainActivity.onCreate()里加一行LeakCanary.install(this)需引入依赖让内存泄漏在开发期就暴露而不是等用户反馈“用久了变卡”。这三步加起来不到两分钟却省下我平均 3.7 小时的无效调试时间。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

2026 AI编程工具实战指南:从智能体到上下文工程,选型与落地

2026 AI编程工具实战指南:从智能体到上下文工程,选型与落地

先说结论:2026年讨论AI编程工具,如果还停留在“哪个能自动补全代码”的维度,基本等于拿2023年的地图找2026年的路。“权威推荐”这个说法本身也容易误导人——工具榜单更新速度赶不上模型迭代速度,与其追着榜单跑,不如…

2026/10/18 7:39:05 阅读更多 →
JMeter性能测试入门:从编写首个脚本到定位系统瓶颈

JMeter性能测试入门:从编写首个脚本到定位系统瓶颈

去年有个朋友接手了一个即将上线的电商项目,内部测试一切正常,结果上线当天用户一多,登录接口直接超时,订单居然下不进去。会议室里一片沉默,所有人盯着监控大屏,半天没人说话。后来排查发现,数…

2026/10/18 7:38:05 阅读更多 →
6和9组成的最大数字:LeetCode贪心算法与字符串处理全解析

6和9组成的最大数字:LeetCode贪心算法与字符串处理全解析

这题很直白,但有些同学交上去看到耗时那栏写着 100ms,心里就开始打鼓了。LeetCode 1323 Maximum 69 Number,题目英文原名就是“6 和 9 组成的最大数字”,解题思路五分钟能讲完,但真正要把代码写稳、把边界考虑全、再顺…

2026/10/18 7:38:05 阅读更多 →

最新新闻

ASP图书馆管理系统:轻量Web开发的原理与实践

ASP图书馆管理系统:轻量Web开发的原理与实践

简介:这是一套基于ASP技术开发的轻量级Web图书管理系统源码,面向Web开发初学者与高校课程设计学生,用于实践动态网页开发、数据库交互及基础业务逻辑实现。系统以Access为后端数据库,完整覆盖图书查询、借阅登记、归还处理、读者管…

2026/10/18 18:22:57 阅读更多 →
Hermes 依赖缺失报错排查:桌面端本地 AI 智能体搭建与 TaoToken 接入

Hermes 依赖缺失报错排查:桌面端本地 AI 智能体搭建与 TaoToken 接入

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 18:22:57 阅读更多 →
Qwen3-TTS 代码包实战:从环境搭建到批量合成与微调

Qwen3-TTS 代码包实战:从环境搭建到批量合成与微调

简介:这份资源是面向语音合成初学者与开发者的Qwen3-TTS实战教程配套代码包,重点解决多语种语音生成中语速、音高、音色难以独立调节的问题。教程从环境准备、快速部署讲到分步实践,手把手带读者生成第一段AI语音,并延伸至视频配音…

2026/10/18 18:22:57 阅读更多 →
Claude Code knowledge-work-plugins 插件实战:slash commands 与 skills 从安装到进阶

Claude Code knowledge-work-plugins 插件实战:slash commands 与 skills 从安装到进阶

1. 从零认识 knowledge-work-plugins:它到底解决什么问题第一次看到knowledge-work-plugins这个仓库名,很多人会下意识以为它又是一个"插件市场"或者"扩展合集"。但如果你真的在 Claude Code 或 Claude Cowork 里干过几天活&#xf…

2026/10/18 18:22:57 阅读更多 →
【Bug已解决】Claude session expired / Authentication token invalid — 用 CC Switch 把认证配置改到 TaoToken 的排查记录

【Bug已解决】Claude session expired / Authentication token invalid — 用 CC Switch 把认证配置改到 TaoToken 的排查记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 18:22:56 阅读更多 →
n8n CVE-2025-68668漏洞应急响应:24小时处置手册与安全加固指南

n8n CVE-2025-68668漏洞应急响应:24小时处置手册与安全加固指南

半夜被监控告警拉起来,说是生产环境的 n8n 实例正在被人疯狂拉取执行历史。第一反应是有人在调试,再看告警频率,明显是扫描器在批量探测。顺着源 IP 和请求路径追下去,确认是对 CVE-2025-68668 的自动化利用。这个漏洞今天在自动化…

2026/10/18 18:21:56 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →