ฉันจะเปลี่ยนชื่ออุปกรณ์ Android ของฉันได้อย่างไร


59

อุปกรณ์ Android ของฉันคือ Nexus One แต่สิ่งนี้ควรใช้กับอุปกรณ์ Android ปัจจุบันทั้งหมด

ฉันจะเปลี่ยนชื่ออุปกรณ์ Android ของฉันได้อย่างไร

เมื่อฉันเชื่อมต่อกับตารางไคลเอนต์เราเตอร์ไร้สายของฉันอุปกรณ์ Android ของฉันจะแสดงตัวอย่างเช่น: android_1234567890abedfc ฉันต้องการตั้งชื่อที่อ่านได้มากขึ้น


นอกจากนี้ยังเป็นไปได้ที่จะกำหนดค่าชื่อโฮสต์ผ่านเซิร์ฟเวอร์ DHCP แต่ฉันไม่ได้ตรวจสอบว่า Android ใช้ตัวเลือกการกำหนดค่านี้หรือไม่ มันเป็นเพียงแค่ตัวเลือกเครื่องสำอาง
Flow

2
blog.burrowsapps.com/2011/09/android-change-hostname.html
Jared Burrows

@Flow (แตกต่างกันไป) Android DHCPCD ไม่มี dhcpcd-run-hooks สำหรับตั้งค่าชื่อโฮสต์จาก DHCP อย่างน้อยบนอุปกรณ์ Samsung Froyo ของฉัน มันไม่มี hooks ntp เหมือนกัน DHCPCD รองรับ
cde

สำหรับ GNU Linux: askubuntu.com/questions/9540/how-do-i-change-the-computer-nameวิธีเคอร์เนลระดับต่ำจะทำงาน
Ciro Santilli新疆改造中心法轮功六四事件

คำตอบ:


22

ในการเปลี่ยนชื่อโฮสต์ (ชื่ออุปกรณ์) คุณต้องใช้เทอร์มินัล (เหมือนรูท):

สำหรับ Eclair (2.1): echo MYNAME> / proc / sys / kernel / hostname

สำหรับ Froyo (2.2): (ใช้ได้กับ 2.3 ส่วนใหญ่ด้วย) setprop net.hostname MYNAME

จากนั้นรีสตาร์ท Wi-Fi ของคุณ หากต้องการดูการเปลี่ยนแปลงให้พิมพ์ uname -a

อุปกรณ์บางอย่างต้องรีบูทเพื่อใช้งาน!


สิ่งนี้ใช้ได้กับ Jelly Bean หรือไม่
jrg

3
ใช้งานได้ แต่ไม่คงอยู่ในการรีบูต
palswim

1
uname -alocalhostไม่แสดงชื่อโฮสต์สำหรับฉันแม้ว่ามันจะบอกว่า คุณคาดหวังให้แสดงอะไร
endolith

15

สรุป:

  • getprop net.hostname (ชื่อโฮสต์ระบบ Android อาจเป็นชื่อประเภท android_24412414)
  • echo $HOSTNAME (ชื่อโฮสต์ของเชลล์ / เทอร์มินัล / env อาจเป็นไปได้ว่า ro.product.device จาก build.prop)
  • cat /proc/sys/kernel/hostname(ระบบ Linux ชื่อโฮสต์แนวโน้มlocalhost )
  • head /etc/hosts(ระบบ Linux ชื่อโฮสต์แนวโน้มlocalhost )
  • hostname(คำสั่งไม่ได้ถูกติดตั้งเสมอหากติดตั้งผ่านช่องว่างจะอ่าน/ proc / sys / kernel / hostname )

ขึ้นอยู่กับเวอร์ชันของ Android ที่คุณใช้

Android 4.0 ขึ้นไป

เวอร์ชันที่ใหม่กว่าจะใช้build.propรายการที่ถูกต้อง นั่นคือ Android จะอ่านbuild.propว่ามันเป็นกระบวนการบูตปกติหรือเปล่า เมื่อเชื่อมต่อบริการทำงานมันจะตรวจสอบเพื่อดูว่า net.hostname ตั้งอยู่ในการตั้งค่าจากนั้นถ้าว่างเปล่าจากนั้นจะใช้ ID Android "android_" + (ถาวร) นั่นคือทั้งหมดที่คุณต้องทำ

เพิ่มnet.hostname=HOSTNAMEHEREไปที่/system/build.prop(อาจจำเป็นต้องใช้รูท) เว้นบรรทัดว่างไว้ท้ายไฟล์

ConnectivityService.java ของ Kitkat สังเกตคำสั่ง 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);

Android 2.3 ขึ้นไป

เวอร์ชั่นที่เก่ากว่า Gingerbread, Froyo เป็นต้นเพียงปิดบังมัน ไม่รำคาญที่จะตรวจสอบ มันจะตั้งค่า net.hostname เป็น android_24412414 ... ไม่ว่าจะเกิดอะไรขึ้น ดังนั้นคุณจะต้องเปลี่ยนหลังจากที่บริการการเชื่อมต่อโหลดเสร็จแล้ว โชคดีที่มันรันการเริ่มต้นเพียงครั้งเดียวเท่านั้นไม่ใช่ทุกการเชื่อมต่อใหม่ ดังนั้นเราก็ต้องวิ่งไปsetprop net.hostname HOSTNAMEHEREหลังจากนั้นเพื่อให้มันติด น่าเสียดายที่มันทำงานค่อนข้างล่าช้าในกระบวนการบู๊ตดังนั้นคุณต้องมีบางอย่างที่จะทำการเปลี่ยนแปลงใน boot_complete น่าจะเป็นแอพที่ทำงานด้วยตัวเอง

Froyo's 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 โดยปกติจะอยู่ในพาร์ติชันระบบแบบอ่านอย่างเดียวดังนั้นจำเป็นต้องเข้าถึงรูทเพื่อแก้ไข

คำสั่ง dhcpcd ซึ่งถูกเรียกใช้เพื่อรับที่อยู่ dhcp จะไม่อัปเดตเป็นชื่อโฮสต์ที่ระบุโดยเซิร์ฟเวอร์ (ที่สามารถแก้ไขได้โดยการเพิ่ม dhcpcd-run-hooks ที่เหมาะสมและ dhcpcd.conf) และจะไม่ให้ชื่อโฮสต์ ไปยังเซิร์ฟเวอร์ dhcp หาก$(hostname)(คำสั่ง hostname) ว่างเปล่าหรือ localhost และไม่ใช้ net.hostname ภายใน libnetutils ใช้สำหรับการเรียก dhcpcd ด้วย -h "net.hostname" แต่ถ้าด้วยเหตุผลบางอย่างมันจะไม่โทรด้วย -h, DHCPCD จะส่งระบบโฮสต์ผ่านทาง gethostname () ตราบใดที่มันไม่ใช่ "(ไม่มี) "," localhost "หรือว่างเปล่า ในสต็อก Froyo อยู่ดี ซัมซุงเมาบนอุปกรณ์บางอย่างเช่นของฉัน ไม่มีชื่อโฮสต์ผ่านเวลาเครือข่ายบังคับ ฯลฯ

โซลูชันของฉันสำหรับ Gingerbread และ Samsung ด้านล่างแก้ไขการกำหนดค่า DHCP Client Daemon:

สิ่งสุดท้ายที่คุณทำได้คือแก้ไข /etc/dhcpcd/dhcpcd.conf หากคุณเพิ่มhostname YOURHOSTNAMEไฟล์มันจะใช้สิ่งนั้นเว้นแต่ว่าได้รับชื่อโฮสต์ใน commandline สิ่งนี้จะไม่แก้ไขปัญหา android_234etc แต่จะถ้าชื่อโฮสต์เป็น localhost (ปัญหาของฉันเนื่องจาก Samsung ขัน libnetutils และ localhost ใน init.rc) คุณจะต้องรูท แต่วิธีนี้ใช้ได้กับการรีบูต สิ่งนี้จะไม่ทำงานหาก dhcpcd ถูกเรียกด้วยตัวเลือก -h Hostname


10

ฉันพบวิธีในการทำสิ่งนี้บน Nexus 7 ที่รูตกับ 4.2.2 การตั้งค่าจะได้รับการบันทึกอย่างต่อเนื่องและใช้งานได้ตลอดการบูตเครื่องใหม่
ที่มา: http://nileshgr.com/2012/10/13/how-to-change-wifi-host-name-of-your-android-device

  1. โปรดทราบว่าอุปกรณ์จะต้องถูกรูทเพื่อใช้ adb
  2. วิ่ง adb pull /system/build.prop
  3. แก้ไขbuild.propไฟล์และผนวกnet.hostname=NewHostname
  4. เรียกใช้adb push build.prop /sdcard/build.prop(หรือ/mnt/sdcardหากล้มเหลว)
  5. เรียกใช้adb shellและดำเนินการคำสั่งต่อไปนี้:
    $ su
    # mount -o rw,remount /system
    # cp /sdcard/build.prop /system/build.prop(หรือ/mnt/sdcardถ้าคุณใช้ก่อนหน้านี้)
    # mount -o ro,remount /system
    # exit
  6. รีบูตอุปกรณ์

สิ่งนี้ได้รับการแก้ไขใน Android เวอร์ชันใหม่กว่า มันตรวจสอบ net.hostname จาก build.prop เวอร์ชั่น Android ที่เก่ากว่าไม่ได้ (ส่วนใหญ่ Froyo อาจ Gingerbread)
cde

ICS ไม่ใช่ 4.2.2 นั่นคือ JB
HasH_BrowN

วิธีที่ง่ายกว่าในการทำเช่นนี้คือการใช้setpropคำสั่งผ่านรูทเชลล์บนอุปกรณ์: ตัวอย่างเช่นsetprop net.hostname NewHostName
Mark

1
@ เครื่องหมายที่จะถูกอุดตันเมื่อรีบูต คำตอบนี้เป็นรุ่นถาวร
CDE

9

สิ่งนี้ใช้ได้กับ CyanogenMod และอาจเป็น ROM ที่ปรับเปลี่ยนอื่น ๆ แต่ไม่ใช่ AOSP ROM ที่มีอยู่:

ไปที่การตั้งค่า> ตัวเลือกสำหรับนักพัฒนาและเลื่อนลงไปชื่อโฮสต์อุปกรณ์ ไม่จำเป็นต้องรูท

(คลิกที่ภาพเพื่อขยาย)

IMG:


2
ใช่คุณไม่สามารถทำได้บนแท็บเล็ต Acer A100 ที่ใช้ Android 4.0.3 ในความเป็นจริงมันไม่ได้มี "ชื่อโฮสต์อุปกรณ์" ในตัวเลือกของนักพัฒนา
bgmCoder

7

ฉันไม่ได้วิ่งในสต็อกนาน แต่ในการตั้งค่าแอปพลิเคชัน> การพัฒนาคุณจะเห็นตัวเลือก 'ชื่อโฮสต์อุปกรณ์'


บน Android รุ่นใด เมื่อฉันดูตัวเลือกการพัฒนาบน Droid 3 (Android 2.3.4) ของฉันฉันไม่มีตัวเลือกนั้น
Michael Kohne

3
สิ่งนี้ใช้ได้กับ CyanogenMOD และอาจเป็น ROM ที่ปรับเปลี่ยนอื่น ๆ แต่ไม่ใช่ในสต็อค AOSP
คาเลบ

ขึ้นอยู่กับผู้ผลิตและผู้สร้างรวมถึงรุ่น Android อย่างสมบูรณ์
cde

5

ไปที่ Google Play Store ค้นหา "ชื่อโฮสต์" และดาวน์โหลดแอปตัวเปลี่ยนชื่อโฮสต์

จะต้องมีการรูท


การเปลี่ยนชื่ออุปกรณ์จะทำให้เกิดความผิดปกติภายในหรือไม่
bgmCoder

0

ชื่อโฮสต์ใช้เพื่อระบุและจดจำโฮสต์ที่เชื่อมต่อกับเครือข่ายได้อย่างง่ายดาย มันตั้งอยู่ในการบูตเช่นจาก/etc/hostnameบนระบบที่ใช้ Linux ชื่อโฮสต์ยังเป็นส่วนหนึ่งของDHCPREQUEST(มาตรฐานเป็นรหัส 12โดย IETF) ซึ่งไคลเอนต์ DHCP (อุปกรณ์ Android ในกรณีของเรา) ทำกับเซิร์ฟเวอร์ DHCP (เราเตอร์ WiFi) เพื่อรับที่อยู่ IP ที่กำหนด เซิร์ฟเวอร์ DHCP เก็บชื่อโฮสต์ที่จะนำเสนอบริการเช่นDNS

Android - แทนที่จะใช้บริการชื่อโฮสต์ของเคอร์เนล Linux - ใช้คุณสมบัติnet.hostnameเพื่อตั้งชื่อโฮสต์ที่ไม่ซ้ำกันสำหรับทุกอุปกรณ์ที่ใช้ Android ID คุณสมบัติชื่อโฮสต์นี้ยังใช้สำหรับการจับมือ DHCP อย่างไรก็ตามตั้งแต่ Android ที่ 5 - เมื่อพื้นเมืองdhcpcdที่ถูกทอดทิ้งในความโปรดปรานของลูกค้า Java DHCP - ชื่อโฮสต์เป็นnullDHCPREQUESTใน net.hostnameเป็นชุดค่าหรือการประเมินโดยไคลเอ็นต์ DHCP ดังนั้นเราเตอร์ WiFiจึงไม่แสดงชื่อโฮสต์สำหรับอุปกรณ์ Android รุ่นใหม่เราไม่สามารถตั้งค่า / ยกเลิกการตั้งค่า / เปลี่ยนแปลงได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.