我的Android设备是Nexus One。但这应适用于所有当前的Android设备。
如何更改Android设备的名称?
当我连接到无线路由器的客户端表时,例如,我的android设备列为:android_1234567890abedfc。我想给它一个更易读的名称。
我的Android设备是Nexus One。但这应适用于所有当前的Android设备。
如何更改Android设备的名称?
当我连接到无线路由器的客户端表时,例如,我的android设备列为:android_1234567890abedfc。我想给它一个更易读的名称。
Answers:
要更改主机名(设备名称),您必须使用终端(以root用户身份):
对于Eclair(2.1):echo MYNAME> / proc / sys / kernel / hostname
对于Froyo(2.2):(也适用于大多数2.3)setprop net.hostname MYNAME
然后重新启动您的Wi-Fi。要查看更改,请键入uname -a
有些设备需要重启才能正常工作!
uname -a
尽管显示了,但没有显示我的主机名localhost
。您希望它显示什么?
getprop net.hostname
(Android系统主机名,可能是android_24412414类型名)echo $HOSTNAME
(shell /终端/ env主机名,可能是来自build.prop的ro.product.device)cat /proc/sys/kernel/hostname
(Linux系统主机名,可能是localhost)head /etc/hosts
(Linux系统主机名,可能是localhost)hostname
(命令并非总是安装,如果通过忙碌框安装,将显示为/ proc / sys / kernel / hostname)取决于您拥有的Android版本。
较新的版本将使用正确的build.prop
条目。好吧,也就是说,Android会build.prop
像正常启动过程一样读取。连接服务运行后,将检查是否在“设置”中设置了net.hostname,如果为空,则使用“ android _” +(永久)android ID。这就是您需要做的。
添加net.hostname=HOSTNAMEHERE
到/system/build.prop
(可能需要root)。在文件末尾留空行。
Kitkat的ConnectivityService.java,请注意IF isEmpty语句:
// 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);
较旧的版本(姜饼,Froyo等)只会破坏它。它不会打扰检查。它将把net.hostname设置为android_24412414 ...无论如何。因此,在连接服务完成加载后,您将需要对其进行更改。幸运的是,它只运行一次启动,而不是在每个新连接上运行。因此,我们只需要setprop net.hostname HOSTNAMEHERE
在那之后运行即可使其坚持下去。不幸的是,它在启动过程中运行得很晚,因此您需要在boot_complete上进行更改的内容。最有可能自行运行的应用程序。
Froyo的ConnectivityService.java:
// setup our unique device name
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);
net.hostname设置不会复制到整个系统!如果使用控制台/终端应用程序,则可能不会获得相同的主机名。我的手机是Samsung Sidekick 4G(基于半Galaxy S),具有init.rc运行hostname localhost
,因此所有下面的命令都看不到您的build.prop主机名或android_id主机名!因此,您也需要进行设置。
hostname HOSTNAMEHERE
要么echo HOSTNAMEHERE > /proc/sys/kernel/hostname
注意:根据您的操作方式,您需要以超级用户身份运行以上命令才能使其正常运行。Init.rc通常位于只读系统分区上,因此需要root访问权限才能对其进行编辑。
运行以获取dhcp地址的dhcpcd命令不会更新为服务器提供的主机名(可以通过添加正确的dhcpcd-run-hooks和dhcpcd.conf进行修复),并且不会提供主机名如果$(hostname)
(主机名命令)为空白或本地主机,并且内部不使用net.hostname,则将其连接到dhcp服务器。libnetutils用于以-h“ net.hostname”调用dhcpcd,但是如果由于某种原因它决定不以-h调用,则DHCPCD仍会通过gethostname()发送系统主机名,只要它不是“(none)”即可。 ”,“ localhost”或为空。仍然在股票Froyo。三星把狗狗固定在像我这样的设备上。没有主机名通过,强制网络时间等。
您可以做的最后一件事是编辑/etc/dhcpcd/dhcpcd.conf。如果添加hostname YOURHOSTNAME
到文件,它将使用该文件,除非在命令行上指定了主机名。这不能解决android_234etc问题,但是如果主机名是localhost(我的问题,因为三星在init.rc中将libnetutils和localhost搞砸了)就可以了。您将需要Root,但这可以在重新启动后起作用。如果使用-h Hostname选项调用dhcpcd,则此方法将无效。
我找到了一种在4.6.2上扎根的Nexus 7上执行此操作的方法。该设置将永久保存,并在整个重新引导期间起作用。
来源:http://nileshgr.com/2012/10/13/how-to-change-wifi-host-name-of-your-android-device
- 请注意,设备必须植根才能使用adb
- 跑
adb pull /system/build.prop
- 编辑
build.prop
文件并追加net.hostname=NewHostname
- 运行
adb push build.prop /sdcard/build.prop
(或者/mnt/sdcard
,如果失败)- 运行
adb shell
并执行以下命令:(
$ su
# mount -o rw,remount /system
# cp /sdcard/build.prop /system/build.prop
或者/mnt/sdcard
如果您以前使用过该命令)
# mount -o ro,remount /system
# exit
- 重新启动设备
setprop
通过设备上的root shell 使用命令:例如setprop net.hostname NewHostName
我已经很久没有库存了,但是在“应用程序设置”>“开发”中,您会看到“设备主机名”选项。
主机名用于轻松识别和记住连接到网络的主机。它是在引导时设置的,例如/etc/hostname
在基于Linux的系统上。主机名也是DHCP客户端(在本例中为Android设备)通过DHCP服务器(WiFi路由器)获取IP地址分配的一部分DHCPREQUEST
(由IETF 标准化为代码12)。DHCP服务器存储主机名以提供DNS之类的服务。
Android而不是使用Linux内核的主机名服务,而是使用属性net.hostname
为每个基于Android ID的设备设置唯一的主机名。此主机名属性也用于DHCP握手。不过由于Android 5 -当本机dhcpcd
支持Java的DHCP客户端的被遗弃-主机名是空的DHCPREQUEST
。net.hostname
是既不置,也不由DHCP客户端评估。因此,WiFi路由器不会显示较新的Android设备的主机名,我们也无法设置/取消设置/更改它。