# 电视盒子固件定制教程-120

## 晶晨系列刷机技巧回忆

1. 插入晶晨神器，直接插入USB双公头线即可。
2. 如果跑到百分之4不动了，然后报错，优先测试插入电源线，可能是供电不足。
3. 一般情况下开关机按键是不需要开机的，但是有的机子可能需要打开开关。
4. 大部分机子都是插入距离网线口距离近的USB口，但是有的机子是要远离网线口，比如海信IP103H。

## 遥控代码编辑定制 - 安卓9

1. 解压固件，修改固件遥控代码debug为1（\vendor\etc\remote.cfg）
2. 打包固件，然后刷入
3. adb connect 192.168.xxx.xxx 连接盒子
4. adb shell 开启命令
5. su 回车 获取root权限
6. dmesg -w | grep remote 获取遥控代码
7. 用手中得遥控对着机顶盒按，得到代码
8. framecode=0xfd02ff00 这里的意思是遥控器代码是ff00
9. receive scancode=0x2 比如这里按的左键，代码就是0x2
10. 记录上面得遥控代码和按键代码
11. 替换到\vendor\etc\remote.tab4或者之类得文件中，遥控代码和按键代码都要修改，然后保存刷入即可！（这里需要注意，如果原本的代码没有按键定义说明，可以到\vendor\usr\keylayout这个目录下查看Vendor\_0001\_Product\_0001.kl这个里面得代码，对照输入）

## 遥控代码定制 - 低版本

1. 和上面得方法大同小异
2. system\etc存放代码得目录在这个里面
3. 结尾可能是conf，原理是一样得

华为处理器低版本

1. 目前我碰到的是402H，442系统
2. 遥控代码在system的etc里面，是key.xml文件
3. adb连接上以后可以用代码 android\_ir\_user –D 查看新遥控的代码，然后用开心盒子助手下载修改，然后推送替换。

替换桌面后首页键无法使用

1. /system/etc/keyfunction.xml
2. 这个文件就是绑定主页按键的位置，修改包名为当贝即可实现主页修复。

## 修改遥控红蓝灯闪烁

1. 同样是在/system/system/etc/combinationKeys.xml文件内修改

```c
<CombinationKey name="umusblog" type="activity">
<KeyCodes desc="9090(red blue red blue)">
<key>16</key>
<key>7</key>
<key>16</key>
<key>7</key>
</KeyCodes>
```

## 替换系统桌面

1. \system\app这个目录下存放得是系统级别得应用，一般桌面就在这个里面
2. \system\system\etc安卓9在这个目录下有个绑定桌面的文件叫，combinationKeys.xml，需要修改
3. 安卓4也在相同的地方有个类似的xml文件，绑定桌面，有的固件有这个问题。
4. 有的是在\system\bulid.prop文件里面绑定了桌面，可以搜索一下包名。

## 修改机顶盒内部显示型号

1. \system\bulid.prop里面的ro.product.model=就是机顶盒型号。

## 替换系统设置，取消设置密码

1. 使用改造的设置apk
2. \system\system\etc安卓9在这个目录下有个绑定桌面的文件叫，combinationKeys.xml，需要修改

```c
	# 修改前
	  <PackageName>com.unionman.umusblog</PackageName>
      <ActivityName>com.unionman.umusblog.UsbLogActivity</ActivityName>
```

```c
	# 修改后
	  <PackageName>tv.icntv.vendor</PackageName>
      <ActivityName>tv.icntv.vendor.main</ActivityName>
```

## 替换开机动画

1. \system\media这个文件夹内是开机动画，要么是多张图片，要么是视频
2. 原内容如果是图片就替换图片，一切尽量按照原内容设置，注意图片或者视频的尺寸和格式。

## 替换开机自动安装应用

1. \system\preinstall 这个目录下是开机自动安装得应用，一定要全英文，不能有中文
2. 如果替换系统应用，需要用7z解开看看有没有lib，如果有要放进system/lib里面。

## 内置root权限

1. 将su文件放到固件路径\*\*/system/bin/su\*\*
2. 找到盒子的自启脚本，比如\*\*/system/etc/install-recovery.sh\*\*或者/system/bin/btplay.sh等等.sh结尾得文件，一般是前者
3. 给最后回车，添加一行 **/system/bin/su --auto-daemon &** 加ROOT完成，重签打包刷机

## 内置root其他复杂方法 - 面具

1. 开启ADB，如果不能开启就装【爱玩机工具箱】，在“爱玩机工具箱-导航-系统设置”开启“USB调试”。
2. 连接电脑。可以使用USB公对公数据线直接连接。也可以安装“ADB WiFi”后电脑端使用“adb connect 机顶盒IP地址”建立连接。（这里如果是电脑就用开心盒子助手之类软件）
3. 提升权限。“adb root”
4. 提取boot分区。 “adb shell dd if=/dev/block/boot of=/sdcard/download/boot.img”
5. 第三步：修补boot镜像。 安装“Magisk”，然后在“Magisk-安装-下一步-选择并修补一个文件”选择你刚才提取的boot.img。如果有遥控器点不到的按钮，连接键盘，多次按下“Tab”键直到选中对应的按钮。修补后在输出窗口查看修补后的文件名（/sdcard/downlad/magisk\_patched-xxxxx\_xxxxx.img）。
6. 第四步：刷入boot镜像。 “adb shell dd if=/sdcard/downlad/magisk\_patched-xxxxx\_xxxxx.img of=/dev/block/boot”（把magisk\_patched-xxxxx\_xxxxx.img替换成刚刚生成的文件名）
7. 第五步：重启。之后你的设备就已经成功Root。
8. [面具下载连接点我](https://www.coolapk.com/apk/com.topjohnwu.magisk)
9. [爱玩机工具箱点我下载](https://www.coolapk.com/apk/com.byyoung.setting)
10. [ADBWiFi点我下载](https://www.coolapk.com/apk/com.rair.adbwifi)

## 修改固件默认开启ADB

1. **4.4.2包修改方法**
   1. 在system/build.prop里面修改
   2. ro.adb.secure=0 （原内容1修改为0）
   3. persist.service.adb.enable=1 （在代码adb5555上面一行新增这个代码）
2. **9.0包修改方法**
   1. 在system/etc/prop.default里面加上一句persist.sys.usb.config=adb，即可默认开启ADB
   2. 检查system/etc/prop.default文件中的ro.secure=1，把数值改为0，还有就是在prop.default里面也可以加上这个。
3. 未验证，在system下的bin里面找到instll-recovery.sh文件，给最后添加如下代码

```c
	sleep 10
	stop adbd
	setprop service.adb.tcp.port 5555
	start adbd
	adbd &
```

## 其他一些目录文件存放位置和意义

1. 安卓9WiFi驱动存放在vendor/vendor/lib/modules里面

## 九彩固件解除升级限制

1. 状态表现是提示升级固件，是九彩专门恶心用户的
2. 代码表现如下，意思是i大于400就会提示，也就是事件发生次数超过400次就提示了

```java
public void onReceive(Context context, Intent intent) {
        if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction()) || "android.intent.action.MEDIA_MOUNTED".equals(intent.getAction()) || "android.intent.action.MEDIA_UNMOUNTED".equals(intent.getAction()) || "android.intent.action.MEDIA_EJECT".equals(intent.getAction()) || "android.intent.action.MEDIA_REMOVED".equals(intent.getAction()) || "android.intent.action.LOCKED_BOOT_COMPLETED".equals(intent.getAction()) || "android.intent.action.BOOT_PROGRESS".equals(intent.getAction()) || "android.intent.action.REBOOT".equals(intent.getAction())) {
            SharedPreferences sharedPreferences = context.getSharedPreferences("boot_count", 0);
            int i = sharedPreferences.getInt("count", 0) + 1; # 删除这个+1应该就好了
            SharedPreferences.Editor edit = sharedPreferences.edit();
            edit.putInt("counta", i);
            edit.apply();
            if (i < 400) {
                return;
            }
            Intent intent2 = new Intent(context, MainActivity.class);
            intent2.addFlags(268435456);
            context.startActivity(intent2);
        }
    }
```
