安装教程 —— 把安卓机顶盒变成一台小电脑

> openhardwarelab · 面向普通用户/开发者。全程约 30–60 分钟，需要一点动手能力。
> 把吃灰的安卓机顶盒，改造成一台「桌面 + 浏览器 + 中文输入 + 手机互传 + 接 U 盘」的小主机。

---

0. 你需要

- 一台安卓机顶盒（建议 Android 4.4+，已 root；本项目在 海思 Hi3798MV100 / 中兴微 ZX296715 实测）。
- 一台电视/显示器 + 一个 USB 鼠标（强烈建议）、USB 键盘。
- 一台电脑（用来跑 adb 推文件），或一个 U 盘。
- 可选：U 盘/移动硬盘（接盒子看片、存文件）。

> ⚠️ 不同盒子的「开 ADB」「init 自启位置」不一样。本教程给通用做法，遇到差异请按你的 ROM 调整。
> ⚠️ 本改造不刷机、不改 system 分区（除了个别只读挂载），风险低，随时可恢复。

---

1. 先认清你的盒子（1 分钟）

在盒子上开一个终端（或用后面的 adb），执行：

sh
getprop ro.product.cpu.abi        # arm64 / armeabi-v7a —— 决定能装什么
getprop ro.build.version.release   # 安卓版本
getprop ro.build.version.sdk        # API 级别
cat /proc/meminfo | head -3
df -k

记下：架构 / 安卓版本 / 内存 / 分区。老盒子最常见：armv7、1GB 内存、8GB eMMC、Android 4.4。

---

2. 打开控制通道（ADB）

盒子开 ADB 调试：一般在「设置 → 关于/开发者选项」，或厂家的「运维调试」里。有的盒子会弹一个随机码/计算码，需要用厂商工具算一下（见你盒子的说明）。

电脑连盒子（同一个局域网，把 IP 换成你的）：

sh
adb connect 192.168.1.100:5555
adb devices            # 看到设备就 OK

> 若盒子的 init 没有 adbd，需要手动拉起（root）：
> sh
> setprop service.adb.tcp.port 5555 ; /sbin/adbd &
> 
> 串口(TTL)始终是「生命线」：实在连不上就用 USB-TTL(115200) 直连调试口。

---

3. 装「一键安装」需要的文件

解压本安装包，把电脑和盒子连好后，在安装文件目录执行：

sh
./一键安装.sh 192.168.1.100     # 换成你的盒子 IP

它会自动：推文件 → 装桌面 → 系统瘦身 → 内存扩容。
不想用脚本的话，就按下面第 4–8 步手动做（内容完全一样）。

---

4. 系统瘦身（去掉广告/无用后台）

老盒子空间和内存都很紧，先把运营商商店/首页/升级/广告等禁用或卸载。

sh
adb shell 'sh /data/瘦身.sh'     # 脚本里可自己改列表

- 系统预装应用只能禁用：pm disable <包名>；第三方可以 pm uninstall <包名>。
- 先看清楚有哪些：pm list packages。
- 清垃圾腾空间：删旧的系统镜像/安装包/日志（df -k 看谁占地方）。

---

5. 内存扩容（把「存储当内存」）

1GB 内存跑桌面/浏览器会不够，用分层交换扩容：

sh
adb shell 'sh /data/扩容.sh'

原理：zram(压缩内存, 最快) > /cache/swapfile > /sdcard/swapfile(最大)，越前面越先用。
> ⚠️ swap 文件要放在 ext4 分区；/proc/swaps 里记的是真实路径。

---

6. 搭建 Linux 子系统（可选，但推荐）

桌面/浏览器用安卓自带的也行；想要一台真正的小主机，就装一个 Ubuntu chroot：

1. 准备一个 Ubuntu 根文件系统镜像（armhf/arm64 对应你的架构），放到盒子 /sdcard/linux.img。
2. losetup + mount 挂到 /data/linux，chroot 进去。
3. 在子系统里装：openssh-server、python3（互传/工具服务要用）、ntfs-3g（认 U 盘）。
4. 开机由 3-开机自启.sh 自动挂载并拉起服务。

> 详细做法与踩坑见 开发者资料/系统改造手册.md 的「Linux 子系统」一节。

---

7. 装桌面、设为开机桌面

sh
adb install -r 桌面.apk
或： adb push 桌面.apk /data/桌面.apk && adb shell 'pm install -r /data/桌面.apk'

设为开机桌面（两种任选）：
- 最简单：按 Home 键时系统问「用哪个桌面」→ 选桌面 → 「始终」。
- 或有 root：pm list packages | grep launcher 看原桌面包名 → pm disable <原桌面>。

桌面功能：图标网格、双击打开、可拖动、右键菜单；顶部有开始/任务/返回/关机等。
图标：浏览器 / 外接U盘 / 音乐 / 回收站 / 程序和功能 / 系统清理 / 显示设置 / 设置 / 传文件。

---

8. 局域网互传 + 接 U 盘

手机 ⇄ 盒子 传文件（不用微信、不用数据线）：
- 手机浏览器打开 http://<盒子IP>:8890/，可上传/下载/发文字/看图。
- 用 5-局域网互传.py（纯标准库，零依赖）。

接 U 盘：FAT32 的 U 盘直接就能认；NTFS/exFAT 需要 Linux 子系统里装 ntfs-3g 挂载（见手册）。

---

9. 浏览器 & 中文输入法（可选）

- 浏览器：装一个能在你安卓版本上跑的火狐（老内核可选“多语言版”以支持中文界面）；想要桌面版网页，给它的 profile 写 user.js 换桌面 UA。
- 中文输入法：装一个带 arm 库的输入法（如搜狗 10.11），并用 ime set <输入法> 启用。
  - 想「不弹软键盘、纯硬件键盘打字」：在桌面「显示设置」里把输入方式设为实体键盘。

---

10. 开机自启 + 兜底（一开机全就位）

1. 把 3-开机自启.sh 放到盒子 /data/startlinux.sh，4-开机兜底.sh 放到 /data/bootfix.sh。
2. 在盒子的 init 里加一行（文件名按你 ROM 来，很多盒子是 /system/etc/init.*.sh 或 install-recovery.sh）：
   sh
   sh /data/startlinux.sh &
   
3. 重启盒子复查：Linux 子系统已挂、SSH/互传/工具服务在跑、桌面在前台。

---

完成！日常使用

- 开机自动进桌面；鼠标键盘即用。
- 手机开 http://<盒子IP>:8890/ 传文件。
- 想看视频/照片：插 U 盘，桌面「外接U盘」里浏览。

---

升级 / 恢复

- 升级桌面：重新 adb install -r 桌面.apk（数据不丢）。
- 恢复原样：pm enable <被你禁用的包名>；把 init 里那行 startlinux.sh 删掉即可。
- 详尽的原理、命令与踩坑都在 开发者资料/ 里。

---
—— openhardwarelab


---

常见问题

Q：装不上 / “解析包错误”
- 盒子安卓版本要 ≥ 4.1（本项目 targetSdk 19）。
- apk 要完整；用本包自带的 桌面.apk。

Q：提示“未知来源 / 不允许安装”
- 设置里打开「允许未知来源（允许安装非市场应用）」再装。

Q：开机不自动进桌面
- 按 Home 键，系统问“用哪个桌面”时选桌面 → 始终。
- 有 root：pm list packages | grep launcher 看原桌面包名 → pm disable <包名>。
- 确认 init 自启那行已加（见教程第 10 步）。

Q：开机卡在“正在升级/正在启动”的弹窗
- 这是 ROM 的开机弹窗把桌面挡住了。4-开机兜底.sh 会自动反复关闭它并拉起桌面；确认它在 /data/bootfix.sh 且被 startlinux.sh 调用。

Q：内存不够、卡、后台被杀
- 跑一遍 2-内存扩容.sh（zram + swap）。确认 cat /proc/swaps 里三层都在。

Q：手机打不开 http://<盒子IP>:8890/
- 手机和盒子要在同一 WiFi/局域网；盒子 IP 在桌面「设置」或路由器里看。
- 确认互传服务在跑（3-开机自启.sh 里那行 / 手动 python3 /root/transfer.py）。

Q：U 盘插上认不到 / 提示已拔出
- FAT32 直接认；NTFS/exFAT 要用 Linux 子系统里 ntfs-3g 挂载（见手册）。

Q：鼠标/键盘用不了
- 这 ROM 通常只认 USB 鼠标+键盘（无触摸）。插 USB 口即可；有的盒子对供电挑，用带供电的 HUB。

Q：装了自带浏览器打不开大网站
- 老内核跑不动现代大网站是常态；用桌面「浏览器」打开简化页，或换能在你安卓版本上跑的火狐。

Q：会不会联网/上传数据？
- 桌面与脚本完全离线、不联网、不上传。只有「手机互传」走局域网。

Q：想恢复原来的样子
- pm enable <被你禁用的包名>；删掉 init 里 startlinux.sh 那行；卸载桌面 pm uninstall com.openhardwarelab.desktop。

Q：改了桌面包名/换设备后桌面不自动起
- 同步改 4-开机兜底.sh 里的 HOME_PKG 为新包名。
