在电子秤这种基于 Android 的嵌入式设备上修改 hosts,一般有以下几种思路,前提都是需要对系统有写权限(也就是设备已经获得了 root 权限 或 使用了可写 system 分区的定制固件)。


一、前提准备

  1. 获取 Root 权限
    电子秤厂商往往并不会给你开放普通用户修改系统分区的权限,你需要先取得 root(比如通过刷入厂商提供的带有 su 的固件,或者利用 Magisk 等方式获取)。

  2. 打开 adb 调试
    确保设备系统里开启了 “USB 调试” 或者 “ADB over TCP”,并用 adb devices 能看到你的秤。

    adb devices
    

二、通过 ADB Shell 直接修改 hosts

  1. 重挂系统分区为可写

    adb root
    adb remount                      # 等同于 adb shell mount -o remount,rw /system
    
  2. 备份原始 hosts

    adb shell cp /system/etc/hosts /system/etc/hosts.bak
    
  3. 编辑或推送新的 hosts

    • 用 adb push:
      在本地准备一个修改好的 hosts 文件(例如把 192.168.1.100 my.server.local 加进去),然后:

      adb push hosts /system/etc/hosts
      
    • 用 vi/vim(如果设备有编辑器):

      adb shell
      su
      vi /system/etc/hosts
      # 在 vi 里添加或修改,保存退出
      
  4. 重启或刷新 DNS 缓存

    adb shell reboot
    

三、在设备上用 Terminal Emulator 或 Host Editor 应用

如果你能在秤上安装 APK,可以用带有 root 权限的 hosts 编辑器:

  1. 安装一个开源的 “Hosts Editor” APK(需支持 Android 5+)

  2. 打开后授予 root 权限

  3. 在图形界面中添加、删除或注释掉那些你想屏蔽或重定向的域名

  4. 保存,应用会自动重挂分区并写入 /system/etc/hosts,无需重启大多数情况即可生效。


四、在自研应用中动态修改(高级)

如果你在自己的秤 Android 应用里想以编程方式修改 hosts,可以在安装时调用 su 命令:

public static boolean installHosts(String hostsContent) {
    Process p = null;
    DataOutputStream os = null;
    try {
        p = Runtime.getRuntime().exec("su");
        os = new DataOutputStream(p.getOutputStream());
        // 挂载 system 分区为可写
        os.writeBytes("mount -o remount,rw /system\n");
        // 将新内容写入临时文件
        os.writeBytes("cat << 'EOF' > /system/etc/hosts\n"
                    + hostsContent + "\nEOF\n");
        // 挂载回只读
        os.writeBytes("mount -o remount,ro /system\n");
        os.writeBytes("exit\n");
        os.flush();
        p.waitFor();
        return (p.exitValue() == 0);
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    } finally {
        if (os != null) try { os.close(); } catch (IOException ignored) {}
        if (p != null) p.destroy();
    }
}

调用时,把你想写入 hosts 的文本传给 hostsContent 即可。


五、注意事项

  • 系统更新会覆盖:如果厂商推送 OTA 更新,可能会把你改的 hosts 覆盖回原始文件,需要重做一次。

  • 文件路径差异:部分 Android 版本上 hosts 在 /etc/hosts(而不是 /system/etc/hosts),可以先用 adb shell ls /system/etc/hostsls /etc/hosts 确认路径。

  • 权限问题:一定要确认执行命令时已经拿到 root。可通过 adb shell su -c id 看返回里是否有 uid=0(root)

  • 安全性:修改了 hosts 后,可能会影响秤上其他联网功能的域名解析,操作前务必备份原始文件 /system/etc/hosts.bak


通过以上方法,你就可以在电子秤的 Android 层面定制域名解析,实现屏蔽广告、重定向服务器或内网调试等需求。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐