TV-project
创维电视改造
起因:
创维电视实在是越来越臃肿和令人恶心了,除开广告以外,apk也不能从u盘中安装了,而是只有官方的小应用市场才能下载安装。
一学期回到家,家里老人向我反映,他们完全不会按这台电视,倒是电视真的积灰浪费,我便想着优化一下这台创维电视。
目标:
实现电视机的开机直接进入电视频道,上下键选择频道。
思路:
有三个思路:
- 1.通过某些软件自带的开机自启功能实现开机直接进入直播(如电视家,hdp直播)。
- 2.通过找到电视家的精简rom来刷机。
- 3.替换创维自带的桌面。
实现过程:
方案枪毙
- 1.软件自带的开机自启功能,在创维电视上集体失效,应该是权限不足导致的。
- 2.我家的这台创维电视比较小众,没有rom,甚至连官方rom都没找到。
替换原生桌面
- 这个方案的一开始我是去找第三方桌面,试图去使用第三方桌面代替原版桌面,但是遗憾的是,遥控器按钮是不适配的,例如遥控器的主页键,实际是不是安卓中的home键,而是一个更具包名来调用原生桌面的指令。
- 幸运的是,我发现了一个大佬制作的同思路的方案博客,他也是通过替换原桌面来实现简化的,更妙的是,他通过分析制作了一个完全适配创维电视机的桌面,并开源在了gihub,这是地址,这个项目通过构建与原桌面同样的包名(com.tianci.movieplatform),以及包中同样的activities如(coocaa.intent.action.HOME ;com.coocaa.homepage.vast.ChooseAppActivity),实现了完全代替原桌面。
开始实施
-
1.打开adb 首先需要控制电视机,通过在电视机信息页面,查看全部信息,输入上上下下左右左右,进入工厂模式,在高级选项中,打开adb开关。通过adb工具输入电视机ip连接电视机。
-
2.获取电视机root,这里本来试了几个一键root工具都没成功,想着要不要自己去先刷入第三方rec,再刷入Magisk的方式来获得root,但是这个电视机的第三方rec没有;又想着自己去那个电视机的rom,自己去弄boot.img,但是也没有电视机的rom;又想着自己去看android4.4的知名漏洞,自己写程序去提权,但是没找到那种特别方便的洞。本来想着放弃了,但是这个时候,又试了试360root的其他版本(本来试了一版,不行),结果成功拿到了root,就离谱。
-
3.拿到了root,就能卸载原桌面了,这个时候我以为是个假root,随便试了试卸载桌面,结果成功了,更惨的是,这个时候我没开启adb,倒是电视机直接黑屏,但凡我能打开adb,我也不至于用fastboot重装系统,试了接有线键盘,遥控器的菜单键,都打不开信息界面,就不能打开adb,吓得我连忙开始找售后,好在最后我找到了一篇文章,如何开始这台电视机的fastboot,通过上电前按住背后开机键,上电,并继续按10s进入fastboot清楚数据。
-
4.编译大佬的桌面源代码,注意的是,最好在android stuidio中添加个版本号信息,防止被创维更新掉。
-
5.我们拿到了adb shell 的root,但是我没有adb的root,导致adb的pull和push操作无法完成,通过360root卸载桌面后,如果直接adb install apk,是失败的,一个是显示apk版本太老,一个是显示apk签名不对。通过adb shell su,用root权限先删除rm掉system/vendor/app中的SkyMovie.apk,然后把之前编译好的apk重命名为SkyMovie.apk,放在u盘中插入电视,通过shell 找到u盘位置(/mnt/usb/sda1),把SkyMovie.apk复制到system/vendor/app,这样获得system权限,同时防止其他错误。这里的复制,使用的是( cat SkyMovie.apk > /system/vendor/app/SkyMovie.apk)因为安卓mv命令不允许将存储卡中的文件复制到/system/或/data/分区中,两者被认为是在不同的设备上。最后在shell中安装apk(pm install -r SkyMovie.apk),完成!!!
效果展示
后记
我家还有一台创维电视(型号不同),我后来也弄了一下,发现是真的无法root,但是这台电视机的adb打开后,却不会因为关电视而自动关闭,所以基于这一点,我又采用了第二种方案。
让家里的树莓派(我拿来充当这服务器的),每到中午和晚上定时执行脚本,adb连接并打开hdp直播这个应用。效果还是可以的,家里老人一开机,过一会就自动跳转到hdp直播。
代码如下:
#! /bin/sh
adb connect 192.168.1.174:5555
adb shell am start hdpfans.com/com.hdpfans.app.ui.main.MainActivity
adb diconnect
echo $?