一、Android系统代码中实现设备名分配

  1. \frameworks\base\services\core\java\com\android\server\ConnectivityService.java

    建立连接时读取 "net.hostname" 属性值是否为空,如果为空则获取设备id,加上"android-"前缀并设置到属性:

protected ConnectivityService(Context context, INetworkManagementService netManager,
INetworkStatsService statsService, INetworkPolicyManager policyManager,
IpConnectivityLog logger) {
mHandlerThread = new HandlerThread("ConnectivityServiceThread");
mHandlerThread.start();
mHandler = new InternalHandler(mHandlerThread.getLooper());
mTrackerHandler = new NetworkStateTrackerHandler(mHandlerThread.getLooper()); // setup our unique device name
if (TextUtils.isEmpty(SystemProperties.get("net.hostname"))) {
String id = Settings.Secure.getString(context.getContentResolver(),
Settings.Secure.ANDROID_ID);
if (id != null && id.length() > 0) {
String name = new String("android-").concat(id);
SystemProperties.set("net.hostname"
, name);
}
}

     ......
}

  2. \frameworks\base\services\net\java\android\net\dhcp\DhcpInformPacket.java

   通过 addCommonClientTlvs() 接口获取设备ID并填入buffer:

    /**
* Adds additional parameters to the INFORM packet.
*/
void finishPacket(ByteBuffer buffer) {
addTlv(buffer, DHCP_MESSAGE_TYPE, DHCP_MESSAGE_TYPE_INFORM);
addTlv(buffer, DHCP_CLIENT_IDENTIFIER, getClientId());
addCommonClientTlvs(buffer);
addTlv(buffer, DHCP_PARAMETER_LIST, mRequestedParams);
addTlvEnd(buffer);
}

  调用到 \frameworks\base\services\net\java\android\net\dhcp\DhcpPacket.java 中获取 "net.hostname" 属性值,

  添加到Tlv信息中(TLV是一种编码方式,由数据的类型Tag,数据的长度Length,数据的内容Value构成的一组数据报文)

    protected void addCommonClientTlvs(ByteBuffer buf) {
addTlv(buf, DHCP_MAX_MESSAGE_SIZE, (short) MAX_LENGTH);
Option60 option60 = null; if (mIface != null) {
option60 = OptionManager.getInstance().getOption60(mIface);
} if (option60 != null && option60.getOptionSwitch() != 0
&& option60.getLogin() != null && option60.getPassword() != null){
byte[] dhcpPlusBuf = buildDhcpPlusMsg(option60.getLogin(),option60.getPassword());
addTlv(buf,DHCP_VENDOR_CLASS_ID,dhcpPlusBuf);
} else {
addTlv(buf, DHCP_VENDOR_CLASS_ID, getVendorId());
}
final String hn = getHostname();
if (!
TextUtils.isEmpty(hn)) addTlv(buf, DHCP_HOST_NAME, hn);
}
  getHostname() 实现:
    private String getHostname() {
if (testOverrideHostname != null) return testOverrideHostname;
return SystemProperties.get("net.hostname");
}

   addTlv() 实现:

    /**
* Adds an optional parameter containing an array of bytes.
*/
protected static void addTlv(ByteBuffer buf, byte type, byte[] payload) {
if (payload != null) {
if (payload.length > MAX_OPTION_LEN) {
throw new IllegalArgumentException("DHCP option too long: "
+ payload.length + " vs. " + MAX_OPTION_LEN);
}
buf.put(type);
buf.put((byte) payload.length);
buf.put(payload);
}
}

  编译及更新:

mmm frameworks/base/services/
adb push out/target/product/almond/system/framework/services.jar /system/framework/
adb push out/target/product/almond/system/framework/oat/arm64/services.odex /system/framework/oat/arm64/ (优化编译才有此目录)

  

二、通过build.prop文件配置设备名

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

net.hostname=###

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

 

Android:修改连接到AP端显示的设备名的更多相关文章

  1. Android 修改host文件的3种方法

    Android修改hosts文件的方法介绍 本文介绍三种Android手机修改hosts文 件的方法,但修改hosts文件一定要谨慎:Android手机hosts文件的换行符必须是n而不是window ...

  2. pc端页面在移动端显示问题

    1.pc端页面在移动端显示,默认视口宽度是980px(也就是body宽度是980px),可通过meta标签设置为需要的尺寸,比如页面中元素最大宽度是1220px,则如下所示 <meta name ...

  3. Android相机、相册获取图片显示并保存到SD卡

    Android相机.相册获取图片显示并保存到SD卡 [复制链接]   电梯直达 楼主    发表于 2013-3-13 19:51:43 | 只看该作者 |只看大图  本帖最后由 happy小妖同学 ...

  4. 学习EChart.js(四) 移动端显示

    ECharts.js 移动端显示 现在很多时候,我们是在用手机.pad等一些移动端设备来进行办公获取数据.所以我们的图表很多时候是需要用移动端设置来查看的,而我们的图表有时候因为数据的偏多,会出现遮挡 ...

  5. 【聊技术】在Android中实现自适应文本大小显示

    本周的聊技术话题和大家说说如何在Android中实现自适应文本大小显示. 想象一下,在布局中,通常显示文本的区域大小是固定的,但是文本长度并不总是固定的.比如列表中的文章标题.界面下方的按钮文本等等. ...

  6. Linux下修改禅道端自定义端口号

    第一种方式 一.        首先,如果我们的服务器的80端口没有开放的话,那么我们就是只能修改Apache应用服务的端口了,其实非常简单,安装完成禅道后,在任意目录下输入命令: /opt/zbox ...

  7. 解决Android Graphical Layout 界面效果不显示

    解决Android Graphical Layout 界面效果不显示 qq463431476

  8. Android ListView滑动过程中图片显示重复错乱闪烁问题解决

    最新内容建议直接访问原文:Android ListView滑动过程中图片显示重复错乱闪烁问题解决 主要分析Android ListView滚动过程中图片显示重复.错乱.闪烁的原因及解决方法,顺带提及L ...

  9. android 修改系统的dialog样式

    android 修改系统的dialog样式 一.觉得自定义配置文件麻烦?那就来修改系统自定义XML文件来实现修改系统dialog的样式吧. 如果是在XML中样式:首先来说下样式.  在 Style.x ...

随机推荐

  1. CISCO设备配置SSH 登陆

    1. 设置设备域名CISCO ip domain name CISCO2.创建密钥Server(config)#crypto key generate rsa The name for the key ...

  2. Python中的时间

    coding:utf-8 from time import strftime, localtime import time print(time.time()) time1=strftime('%Y- ...

  3. (转)大厂常问到的14个Java面试题

    1. synchronized和reentrantlock异同 相同点 都实现了多线程同步和内存可见性语义 都是可重入锁 不同点 实现机制不同 synchronized通过java对象头锁标记和Mon ...

  4. js中的forEach和map的区别

    我们先来看两者之间的相同之处 var arr = ['a','b','c','d']; arr.forEach(function(item,index,arr){ //item表示数组中的每一项,in ...

  5. Java学习笔记——第3篇

    面向对象 结构化程序的任何一个结构都具有唯一的入口和唯一的出口,并且程序不会出现死循环. 虽然Java是面向对象的,但Java的方法里则是一种结构化的程序流. 面向对象的基本思想:类.对象.继承.封装 ...

  6. 用BCB 画 Code128 B模式条码

    //--------------------------------------------------------------------------- #include <vcl.h> ...

  7. MySQL进阶18- 存储过程- 创建语句-参数模式(in/out/inout-对应三个例子) -调用语法-delimiter 结束标记'$'- 删除/查看/修改-三个练习

    /* MySQL-进阶18 存储过程 和 函数 存储过程和函数:类似于java中的方法 好处: 1.提高代码的重用性 2.简化操作 */ #存储过程 /* 含义: 一组已经预见编译好的SQL语句的集合 ...

  8. Mybatis之动态SQL&OGNL表达式

    1.接口 public interface MemberMapperDynamicSQL { public List<Members> selectMembersByIf(Members ...

  9. sqlplus、exp、imp不是内部或外部命令,也不是可运行的程序

    oracle 想exp导出数据库,参考网上的作业,进入CMD命令,黑屏后输入命令出现EXP后出现EXP不能内部或外部命令. 网上找到下列解决方法 摘自:http://blog.csdn.net/suz ...

  10. 如何学好java?

    忻州seo:如何学好java?想必对于任何一个在学习java的朋友们,都会在学习过程中遇到一些问题.例如:Java反射机制是什么?小编也是学习java编程的,现在给大家简单介绍一下:Java反射机制就 ...