1. 刷完安卓9.0之后,为什么还要做这5项优化
天邑TY1608这台机顶盒在运营商渠道里存量不小,S905L-B的方案、1G内存+8G存储的配置,原厂系统锁得比较死,能做的事情非常有限。很多人把它刷成非高安版的安卓9.0固件,图的就是一个干净、可折腾的系统环境。但刷完之后你会发现,事情没那么简单——系统是能开机了,可默认状态下ADB是关的、root权限没开、预装应用还在后台跑、分辨率可能对不上你的电视、遥控器有些按键还失灵。
我前后刷过十几台TY1608,也帮朋友处理过不少刷完之后的"半成品"状态。说实话,刷固件只是第一步,真正决定这台盒子好不好用的,是刷完之后那几项看起来不起眼、但缺一不可的优化操作。这篇文章就把我踩过的坑和总结出来的流程完整讲一遍,从ADB调试的开启、root权限的获取,到系统精简、显示适配和遥控器修复,每一步都给出具体的命令和操作逻辑。
适合谁看?如果你手上正好有一台刷了非高安安卓9.0的TY1608,或者你准备刷但还没动手,这篇文章能帮你少走至少两三个小时的弯路。如果你刷的是其他S905系列盒子,大部分操作逻辑也是通用的,可以参考着改。
提示:以下所有操作都基于非高安版安卓9.0固件,高安版固件的分区结构和权限管理不同,部分命令可能不适用。
2. 第一项优化:把ADB调试从"隐藏状态"里挖出来
2.1 为什么刷完机ADB默认是关的
非高安版固件虽然比原厂开放很多,但大部分制作者为了稳定性,默认不会把ADB调试打开。原因很简单:ADB开着意味着任何人都能通过网络或USB连接进来执行命令,对于批量出货的固件来说,这是一个潜在的风险点。所以你会遇到一个很尴尬的情况——系统里明明有ADB功能,但你在设置里翻遍了也找不到"开发者选项"的入口。
这时候需要用到一个技巧:通过遥控器在设置界面里连续点击"版本号"或者"内部版本号"来激活开发者模式。但TY1608的安卓9.0固件里,有些版本把这个入口藏得更深,甚至需要你先通过其他方式进入系统属性页面。
2.2 激活开发者选项的两种路径
第一种路径比较常规:进入"设置"→"关于本机"→找到"版本号"→连续点击7次。系统会提示"您已处于开发者模式"。然后返回设置主界面,就能看到"开发者选项"的入口了。
第二种路径是针对那些连"关于本机"里都没有版本号的固件:你需要进入"设置"→"设备偏好设置"→"关于"→"版本号",同样连续点击7次。不同固件版本的菜单层级不一样,但核心逻辑是一样的——找到那个显示版本号的条目,快速点击。
进入开发者选项之后,找到"USB调试"和"网络调试"两个开关,全部打开。网络调试也就是ADB over Network,这个功能非常关键,因为TY1608放在电视柜里,每次插USB线很麻烦,通过网络连接会方便很多。
2.3 网络ADB的连接与验证
打开网络调试之后,你需要知道盒子的IP地址。在"关于本机"→"状态信息"里可以看到IP。假设你的盒子IP是192.168.1.100,在电脑上执行:
adb connect 192.168.1.100:5555如果返回connected to 192.168.1.100:5555,说明连接成功。但这里有个坑:有些固件默认的ADB端口不是5555,而是5037或者其他端口。如果你连不上,先在盒子上用遥控器打开一个终端应用(如果固件里带了的话),执行getprop service.adb.tcp.port看看实际端口是多少。
连接成功之后,执行adb devices确认设备列表里出现了你的盒子。如果显示unauthorized,说明盒子上还没有授权这台电脑的调试请求。这时候你需要看盒子的屏幕,应该会弹出一个"是否允许USB调试"的对话框,勾选"始终允许"并确认。
注意:如果盒子上没有弹出授权对话框,可能是固件里缺少了相关的授权组件。这种情况下可以尝试在盒子上进入开发者选项,点击"撤销USB调试授权",然后重新连接。
2.4 ADB连上之后先做这三件事
ADB连上之后别急着折腾,先做三件确认工作。第一,执行adb shell getprop ro.build.version.release确认系统版本确实是9.0。第二,执行adb shell getprop ro.product.model确认设备型号识别正常。第三,执行adb shell df -h /data看一下data分区的剩余空间,这决定了你后面能装多少应用。
这三条命令看起来简单,但能帮你快速判断固件的基本状态。我遇到过刷完之后系统版本显示是9.0但实际内核还是老版本的情况,也遇到过data分区只给了2G空间的固件,这些信息在后续优化中都会影响你的决策。
3. 第二项优化:root权限的获取与权限管理
3.1 非高安固件的root现状
非高安版安卓9.0固件通常已经内置了root权限,但默认状态下su二进制文件可能没有正确配置,或者SuperSU/Magisk之类的权限管理应用没有安装。你执行adb shell su的时候,可能会遇到permission denied或者not found的错误。
这时候需要先确认固件里到底有没有su文件:
adb shell which su adb shell ls -l /system/xbin/su adb shell ls -l /system/bin/su如果这两个路径下都没有su,说明固件本身没有集成root。如果有一个存在但执行报错,说明su的权限位不对,需要修复。
3.2 修复su权限位的具体操作
假设su文件在/system/xbin/su,执行以下命令修复权限:
adb shell su # 如果上面这条能进去,说明root是好的 # 如果进不去,先试试: adb root adb remount adb shell chmod 6755 /system/xbin/su adb shell chown root:root /system/xbin/suchmod 6755这个权限位的含义是:设置setuid位(4)+ setgid位(2)+ 所有者rwx(7)+ 组rx(5)+ 其他rx(5)。setuid位是关键,它让普通用户执行su时能以root身份运行。
如果adb root也报错,说明adbd没有以root权限运行。这时候需要修改default.prop或者build.prop里的ro.secure和ro.debuggable属性。具体操作是:
adb shell mount -o rw,remount /system adb shell echo "ro.secure=0" >> /system/build.prop adb shell echo "ro.debuggable=1" >> /system/build.prop adb reboot重启之后再试adb root,应该就能成功了。但要注意,修改build.prop有风险,如果改错了可能导致系统无法启动。建议修改前先备份:
adb pull /system/build.prop ./build.prop.bak3.3 安装Magisk做权限管理
如果你想让root权限管理更规范,建议安装Magisk。非高安固件通常可以直接通过ADB安装Magisk Manager,然后通过它来管理root授权。具体步骤是:
adb install MagiskManager.apk adb shell su -c "magisk --install"安装完成后重启,打开Magisk Manager,它会提示你修复运行环境。按照提示操作即可。Magisk的好处是支持模块化,你可以通过它安装一些系统级的优化模块,比如性能调度调整、温控解除等。
但这里有个坑:TY1608的S905L-B方案是32位ARM架构,下载Magisk的时候一定要选对版本。我试过用64位的Magisk刷进去,结果直接卡开机画面。正确的做法是下载Magisk-vXX.X.apk之后,用adb shell getprop ro.product.cpu.abi确认架构是armeabi-v7a,然后选择对应的版本。
3.4 root之后必须做的权限收紧
拿到root权限之后,有一件事很多人会忽略:把ADB的root权限关掉。因为adb root这个命令会让adbd以root身份运行,任何能连接到ADB的人都能直接获得root权限。在家庭网络里问题不大,但如果你把盒子放在一个不太安全的网络环境里,这就是一个隐患。
收紧的方法是修改/system/build.prop里的ro.adb.secure属性:
adb shell su -c "setprop ro.adb.secure 1"这样每次ADB连接都需要在盒子上确认授权。虽然麻烦一点,但安全性高很多。
4. 第三项优化:系统精简与预装应用清理
4.1 先搞清楚哪些应用能删、哪些不能删
非高安版安卓9.0固件虽然比原厂干净,但制作者通常会保留一些基础应用,比如文件管理器、视频播放器、应用商店等。这些应用有些是有用的,有些纯粹是占空间。在动手删除之前,先用以下命令列出所有已安装的包:
adb shell pm list packages这个命令会输出一长串包名。你需要区分三类应用:第一类是系统核心组件,比如com.android.systemui、com.android.settings,这些绝对不能删;第二类是厂商预装应用,比如com.ty.tv之类的,这些通常可以删;第三类是用户自己安装的应用,这些看需求处理。
我一般会先把包名导出到电脑上,方便对照:
adb shell pm list packages > packages.txt然后用文本编辑器打开,逐个标记。标记的原则是:不确定的就不删。删错了系统组件,轻则某个功能失效,重则无法开机。
4.2 用pm disable代替pm uninstall
对于不确定是否要彻底删除的应用,我建议先用pm disable-user禁用,而不是直接卸载。禁用之后应用不会运行,也不会出现在启动器里,但文件还在系统里,随时可以恢复:
adb shell pm disable-user --user 0 com.example.bloatware如果禁用之后系统一切正常,用了一段时间也没发现问题,再考虑彻底卸载:
adb shell pm uninstall --user 0 com.example.bloatware注意--user 0这个参数,它表示只对当前用户卸载,而不是从系统分区里删除。这样做的好处是即使卸载错了,恢复出厂设置之后应用会回来。
4.3 我实测可以安全禁用的应用列表
以下是我在TY1608非高安安卓9.0固件上实测可以安全禁用的应用,供参考:
| 包名关键词 | 应用类型 | 禁用后影响 |
|---|---|---|
| com.ty.update | 系统更新 | 无法接收OTA,但刷机用户本来就不需要 |
| com.ty.statistics | 数据统计 | 无影响 |
| com.android.browser | 自带浏览器 | 无影响,可装第三方 |
| com.ty.appstore | 厂商应用商店 | 无影响,可装第三方 |
| com.android.printspooler | 打印服务 | 无影响,盒子不需要打印 |
| com.android.wallpaper | 动态壁纸 | 无影响 |
禁用这些应用之后,系统内存占用会明显下降。在1G内存的TY1608上,禁用前后可用内存大概能差出100-150MB,对于流畅度的提升是肉眼可见的。
4.4 清理缓存和残留文件
系统精简之后,还需要清理一下缓存和残留文件。安卓系统在运行过程中会产生大量缓存,尤其是在刷机之后,旧系统的残留文件可能还占着空间。执行以下命令清理:
adb shell su -c "rm -rf /data/cache/*" adb shell su -c "rm -rf /data/dalvik-cache/*" adb shell su -c "rm -rf /cache/*"dalvik-cache是安卓的运行时缓存,清理之后第一次开机可能会慢一些,因为系统需要重新生成缓存。但之后运行会更流畅。
另外,检查一下/data/local/tmp目录,有些固件会在这里留下刷机时的临时文件:
adb shell su -c "ls -la /data/local/tmp"如果有不需要的文件,一并清理掉。
5. 第四项优化:显示输出与分辨率适配
5.1 为什么刷完之后画面可能不对
TY1608的原厂固件通常会根据运营商的要求锁定输出分辨率,比如1080P 60Hz或者720P 50Hz。刷了非高安固件之后,系统默认可能会输出一个你的电视不支持的分辨率,导致黑屏、花屏或者画面比例不对。
我遇到过最常见的情况是:盒子输出4K 30Hz,但电视只支持1080P,结果就是黑屏。这时候需要通过ADB修改分辨率设置。
5.2 通过ADB修改显示分辨率
首先查看当前的分辨率设置:
adb shell wm size adb shell wm densitywm size显示的是逻辑分辨率,wm density显示的是DPI。如果画面比例不对,可以先尝试调整DPI:
adb shell wm density 240240是安卓电视常用的DPI值,适合1080P输出。如果画面仍然不对,再调整分辨率:
adb shell wm size 1920x1080修改之后立即生效,不需要重启。如果改错了导致黑屏,可以通过ADB重置:
adb shell wm size reset adb shell wm density reset5.3 修改HDMI输出模式
除了逻辑分辨率,HDMI的物理输出模式也需要确认。在安卓9.0里,可以通过以下命令查看当前的HDMI模式:
adb shell cat /sys/class/display/mode如果输出是4k30hz但你的电视不支持,可以改成1080p60hz:
adb shell su -c "echo 1080p60hz > /sys/class/display/mode"这个修改是临时的,重启后会恢复。要永久生效,需要修改/system/build.prop里的ro.hdmi.mode属性,或者写一个开机脚本。
5.4 画面过扫描问题的处理
有些老电视会有过扫描(overscan)问题,表现为画面边缘被裁掉一部分。安卓系统里可以通过调整显示区域来补偿:
adb shell wm overscan 20,20,20,20这四个数字分别代表左、上、右、下四个方向的内缩像素值。如果画面被裁掉了,就增大这个值;如果画面没有铺满,就减小或者用负值。
提示:
wm overscan在安卓9.0上已经标记为废弃,但大部分设备仍然支持。如果命令无效,可以尝试通过电视本身的画面设置来调整。
6. 第五项优化:遥控器按键修复与输入设备适配
6.1 刷机后遥控器失灵的原因
非高安版固件通常不会包含原厂遥控器的完整键值映射,导致刷完之后遥控器只能部分工作,或者完全失灵。这是因为安卓系统通过/system/usr/keylayout目录下的.kl文件来定义按键映射,而不同厂商的遥控器键值不同。
TY1608的原厂遥控器使用的是红外方案,键值文件通常是Generic.kl或者ty_ir.kl。刷了非高安固件之后,系统可能加载的是默认的Generic.kl,里面没有定义TY1608特有的按键。
6.2 查看当前按键映射和键值
首先确认系统当前加载了哪些键值文件:
adb shell ls /system/usr/keylayout/然后查看遥控器按键对应的键值:
adb shell getevent -l执行这个命令之后,按下遥控器上的按键,终端会输出类似这样的信息:
/dev/input/event3: EV_KEY KEY_HOME DOWNKEY_HOME就是系统识别到的键值。如果按下按键没有任何输出,说明遥控器的红外信号没有被系统识别,可能是驱动问题或者键值文件完全不对。
6.3 手动添加或修改键值映射
假设你发现遥控器的"菜单"键被识别成了KEY_MENU,但你希望它触发KEY_SETTINGS,可以修改键值文件:
adb shell su -c "mount -o rw,remount /system" adb shell su -c "echo 'key 139 SETTINGS' >> /system/usr/keylayout/Generic.kl" adb shell su -c "chmod 644 /system/usr/keylayout/Generic.kl" adb rebootkey 139中的139是按键的扫描码,需要根据getevent的输出确定。SETTINGS是安卓的按键常量,对应打开设置界面。
6.4 用遥控器映射应用做快速修复
如果你不想手动改键值文件,可以安装一个遥控器映射应用,比如Button Mapper。这类应用通过无障碍服务来拦截按键事件,然后重新映射到其他功能。优点是操作简单,不需要root;缺点是会增加一点系统开销,而且在某些固件上可能不稳定。
我个人的做法是:先用Button Mapper快速验证映射方案,确认好用之后,再把映射规则写到.kl文件里,这样既保证了稳定性,又不需要长期运行额外的服务。
6.5 USB遥控器和蓝牙遥控器的适配
如果你用的是USB遥控器或者蓝牙遥控器,适配逻辑略有不同。USB遥控器通常会被识别为标准HID设备,系统会自动加载Generic.kl,大部分按键都能正常工作。如果有个别按键不对,同样可以通过修改.kl文件来修复。
蓝牙遥控器需要先配对,配对之后系统会为它创建一个独立的输入设备节点。你可以通过getevent -l查看它的键值,然后针对性地修改映射。
7. 优化做完之后,怎么验证效果
7.1 用ADB做一轮完整体检
五项优化都做完之后,建议用ADB做一轮完整体检。首先确认ADB连接正常:
adb devices adb shell getprop ro.build.version.release adb shell su -c "id"如果id命令返回uid=0(root),说明root权限正常。然后检查系统内存和存储:
adb shell cat /proc/meminfo | head -5 adb shell df -h /data对比优化前后的数据,你应该能看到可用内存增加、data分区剩余空间变大。
7.2 实际使用中的观察要点
数据之外,更重要的是实际使用体验。我一般会重点观察这几个方面:开机时间是否缩短、应用启动是否更快、遥控器按键是否全部正常、画面输出是否稳定、长时间运行是否发热严重。
如果发现某个应用闪退或者系统卡顿,先用adb logcat抓取日志:
adb logcat -d > logcat.txt然后在日志里搜索FATAL或者ANR关键字,定位问题来源。大部分情况下,闪退是因为删除了某个依赖库或者禁用了某个系统组件,恢复之后就能解决。
7.3 备份当前系统状态
优化完成、确认稳定之后,强烈建议做一次完整备份。TY1608的备份可以通过ADB完成:
adb shell su -c "dd if=/dev/block/mmcblk0 of=/sdcard/full_backup.img" adb pull /sdcard/full_backup.img ./full_backup.img这个命令会把整个eMMC备份成一个镜像文件。虽然文件比较大(通常4-8G),但以后如果系统出问题,可以直接恢复,不用重新刷机。
如果觉得全盘备份太大,也可以只备份关键分区:
adb shell su -c "dd if=/dev/block/system of=/sdcard/system.img" adb shell su -c "dd if=/dev/block/data of=/sdcard/data.img"我个人习惯是至少备份system和data两个分区,这样即使折腾坏了,也能快速恢复到一个可用的状态。
8. 几个容易翻车的细节和我的处理习惯
8.1 修改build.prop之前一定要备份
build.prop是安卓系统的核心配置文件,改错一个字符都可能导致无法开机。我的习惯是每次修改之前先拉一份到电脑上:
adb pull /system/build.prop ./build.prop.$(date +%Y%m%d)这样即使改坏了,也可以通过ADB在recovery模式下推回去。如果连recovery都进不去,那就只能重新刷机了。
8.2 不要一次性禁用太多应用
系统精简的时候,很多人喜欢一次性禁用几十个应用,然后重启看效果。这种做法风险很高,因为一旦某个被禁用的应用是系统启动必需的,你就会面对一个卡在开机画面的盒子。
我的做法是分批禁用,每次5-8个,重启确认没问题之后再继续下一批。虽然麻烦一点,但安全得多。
8.3 ADB连接不稳定时的排查顺序
ADB连接不稳定是刷机后常见的问题,表现为频繁断连或者命令执行超时。排查顺序是:先确认网络是否稳定(ping一下盒子IP),再确认ADB端口是否被占用(netstat -an | grep 5555),然后检查盒子的ADB服务是否正常(adb shell getprop service.adb.tcp.port)。
如果以上都正常但连接仍然不稳定,可以尝试重启adbd服务:
adb shell su -c "stop adbd" adb shell su -c "start adbd"或者直接在盒子上关闭再打开网络调试开关。
8.4 遥控器失灵时的应急操作
如果遥控器完全失灵,而你又没有USB鼠标,可以通过ADB模拟按键事件来应急:
adb shell input keyevent KEYCODE_HOME adb shell input keyevent KEYCODE_BACK adb shell input keyevent KEYCODE_DPAD_DOWNKEYCODE_DPAD_DOWN是方向键下,配合KEYCODE_DPAD_CENTER(确认键)可以在界面上导航。虽然操作起来很别扭,但至少能让你进入设置界面去修复遥控器映射。
8.5 系统时间不对导致应用报错
刷机后系统时间可能会重置到一个很早的日期,导致某些应用因为证书验证失败而无法联网。这时候需要手动同步时间:
adb shell su -c "settings put global auto_time 1" adb shell su -c "settings put global auto_time_zone 1"如果自动同步不生效,可以手动设置:
adb shell su -c "date -s '2025-01-01 12:00:00'" adb shell su -c "hwclock -w"hwclock -w是把系统时间写入硬件时钟,这样重启之后时间不会丢失。
9. 关于固件选择和后续折腾的一些个人看法
TY1608这台盒子的可玩性其实挺高的,S905L-B虽然性能不算强,但跑安卓9.0日常使用完全够用。非高安版固件的好处是开放度高,ADB和root都能拿到,适合喜欢折腾的人。但代价是稳定性可能不如原厂固件,需要你自己做一些优化和修补。
我个人的经验是:刷机之前先想清楚你要用这台盒子做什么。如果只是看在线视频,其实原厂固件也能用,没必要折腾。如果你想装第三方应用、做下载机、跑一些轻量级服务,那刷非高安固件是值得的,但要做好花时间优化的准备。
另外,固件版本的选择也很重要。不同人做的非高安固件,底层的驱动和配置差异很大。有些固件ADB默认就是开的,有些需要手动激活;有些固件root是完整的,有些只有半残的su。建议多试几个版本,找到最适合自己需求的那个。
最后说一个我踩过的坑:不要盲目追求最新版本的固件。有些新固件为了适配更多设备,加入了很多通用驱动,反而导致TY1608的特定硬件(比如WiFi模块、红外接收器)工作不正常。我目前稳定使用的还是一个比较老的版本,虽然版本号不好看,但各项功能都正常,这就够了。