• Android11修改连接WiFi后AP端显示的设备名


    修改build.prop文件

    1.修改 /system/build.prop 最后添加,xxx 为自己设置的设备名:

    net.hostname=xxx
    2. 重启、重连wifi,从热点或路由器后台查看设备名即为修改后的名称

    代码里动态配置

    暴力手段:grep -rn “net.hostname” *
    可以看到/packages/modules/NetworkStack / src/android/net/dhcp/DhcpPacket.java 类里

        @VisibleForTesting
        public String getHostname() {
            if (mHostName == null
                    && !ShimUtils.isReleaseOrDevelopmentApiAbove(Build.VERSION_CODES.Q)) {
                return SystemProperties.get("net.hostname");
            }
            return mHostName;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    打印日志可知,mHostName为null,并且ShimUtils.isReleaseOrDevelopmentApiAbove(Build.VERSION_CODES.Q)为true,所以if里面为false,走了return mHostName;所以AP端没有收到这个值,路由器页面显示设备,显示匿名主机。
    在这里插入图片描述
    既然搞清楚这里了,那就很简单了,第一:让if里走进去,return SystemProperties.get(“net.hostname”);
    第二:找个合适的位置,合适的时机set一下net.hostname,这不就完事了。
    由于我们需求显示的是设备名加上SN号后四位,这里没有权限读取SN,还得处理Selinux权限,所以换个地方。

    //frameworks/base / services/core/java/com/android/server/ConnectivityService.java 
    //构造里添加了下面一个方法
       private void updateApName() {
            String apName = SystemProperties.get("net.hostname");
            if (apName == null || apName.equals("")) {
            String deviceSn = SystemProperties.get("ro.serialno");
            if (deviceSn != null && !deviceSn.equals("")) {
                if (deviceSn.length() > 4) {
                    apName = "XXXXXX_" + deviceSn.substring(deviceSn.length() - 4);
                } else {
                    apName = "XXXXXX_" + deviceSn;
                }
    
            } else {
                apName = "XXXXX";
            }
    
           SystemProperties.set("net.hostname", apName);
           }
        }
    
    @VisibleForTesting
        protected ConnectivityService(Context context, INetworkManagementService netManager,
                INetworkStatsService statsService, INetworkPolicyManager policyManager,
                IDnsResolver dnsresolver, IpConnectivityLog logger, INetd netd, Dependencies deps) {
            if (DBG) log("ConnectivityService starting up");
            //*************************************************
             updateApName();
           //*************************************************
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    编译一下,验证,连接上WiFi后,在路由器上可以看到如下:
    在这里插入图片描述

  • 相关阅读:
    Xcode工程统计代码行数(Swift版)
    Mysql(视图)
    includes问题
    找不到msvcp140.dll解决方法的5个解决方法以及msvcp140.dll丢失原因分析
    【Java 进阶篇】CSS盒子模型详解
    【JavaScript】参考手册-String对象的3个属性和17个方法
    Python学习笔记-序列
    AWT中常用组件
    使用Docker部署debezium来监控 MySQL 数据库
    月销破30万辆后,比亚迪整了波大的
  • 原文地址:https://blog.csdn.net/jwg1988/article/details/134267943