Как изменить имя моего Android-устройства?

Мое Android-устройство — Nexus One. Но это должно относиться ко всем современным устройствам Android.

Как изменить имя моего Android-устройства?

Когда я подключаюсь к клиентским таблицам своего беспроводного маршрутизатора, мои устройства Android отображаются, например, как: android_1234567890abedfc. Я хотел бы дать ему более читаемое имя.

Также возможно настроить имя хоста через сервер DHCP. Но я не проверял, использует ли Android этот параметр конфигурации. В любом случае это просто косметический вариант.
@Flow (различается, но) Android DHCPCD не имеет dhcpcd-run-hooks для установки имени хоста из DHCP. По крайней мере, на моем устройстве Samsung Froyo. У него также нет перехватчиков ntp. Однако DHCPCD поддерживает это.
для GNU Linux: askubuntu.com/questions/9540/how-do-i-change-the-computer-name , низкоуровневые методы ядра будут работать

Ответы (7)

Чтобы изменить имя хоста (имя устройства), вы должны использовать терминал (как root):

Для Eclair (2.1): echo МОЕ ИМЯ > /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/terminal/env, вероятно, ro.product.device из build.prop)
  • cat /proc/sys/kernel/hostname(имя хоста системы Linux, вероятно, localhost )
  • head /etc/hosts(имя хоста системы Linux, вероятно, localhost )
  • hostname(Команда не всегда устанавливается, если она установлена ​​через Busy Box, будет читаться как /proc/sys/kernel/hostname )

Зависит от того, какая у вас версия Android.

Андроид 4.0 и выше

Более новые версии будут использовать правильную build.propзапись. Ну, то есть Android читает build.propкак обычный процесс загрузки. Как только служба подключения запускается, она проверяет, установлено ли в настройках значение net.hostname, а затем, если оно пусто, используется идентификатор «android_» + (постоянный) Android. Так что это все, что вам нужно сделать.

Добавить 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);

Android 2.3 и ниже

Старые версии, Gingerbread, Froyo и т. д., просто затмевают его. Не мешает проверить. Он установит для net.hostname значение android_24412414... несмотря ни на что. Поэтому вам нужно будет изменить его после завершения загрузки службы подключения. К счастью, он запускает запуск только один раз, а не при каждом новом подключении. Так что нам просто нужно бежать setprop net.hostname HOSTNAMEHEREза этим, чтобы он прилип. К сожалению, он запускается довольно поздно в процессе загрузки, поэтому вам нужно что-то, что внесет изменения в boot_complete. Скорее всего приложение, которое работает само по себе.

ConnectivityService.java от Froyo :

    // 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

Примечание. В зависимости от того, как вы это делаете, вам нужно будет запустить указанную выше команду от имени пользователя root, чтобы она работала. Init.rc обычно находится в системном разделе только для чтения, поэтому для его редактирования необходим root-доступ.

Команда dhcpcd, запускаемая для получения адреса dhcp, не будет обновляться до имени хоста, предоставленного сервером (это можно исправить, добавив правильные dhcpcd-run-hooks и dhcpcd.conf), и она не предоставит имя хоста. на сервер dhcp, если $(hostname)(команда hostname) пуста или является локальным хостом, и он не использует внутренне net.hostname. libnetutils используется для вызова dhcpcd с параметром -h "net.hostname", но если по какой-то причине он решит не вызывать с параметром -h, DHCPCD ВСЕ ЕЩЕ БУДЕТ ОТПРАВЛЯТЬ СИСТЕМНОЕ ИМЯ ХОСТА через gethostname(), если это не "(none) ", "localhost" или пустой. Во всяком случае, на Stock Froyo. Samsung облажался на некоторых устройствах, подобных моему. Отсутствие передачи имени хоста, принудительное сетевое время и т. д.

Мое решение для Gingerbread и ниже Samsung, отредактируйте конфигурацию демона DHCP-клиента:

Последнее, что вы можете сделать, это отредактировать файл /etc/dhcpcd/dhcpcd.conf. Если вы добавите hostname YOURHOSTNAMEв файл, он будет использовать его, если в командной строке не указано имя хоста. Это не решит проблему android_234etc, но решит проблему, если имя хоста — localhost (моя проблема, поскольку Samsung облажался с libnetutils и localhost в init.rc). Вам понадобится Root, но это работает при перезагрузке. Это не сработает, если dhcpcd вызывается с опцией -h Hostname.

Кто использует Android 2.3? Работает ли эта версия в 2020 году? Ссылки от 2008 года до сих пор работают, это обратная связь.

Я нашел способ сделать это на своем 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).
ICS не 4.2.2, это был бы JB
более простой способ сделать это — использовать setpropкоманду через корневую оболочку на устройстве: напримерsetprop net.hostname NewHostName
@mark, который будет стерт при перезагрузке. Этот ответ является постоянной версией.

Это работает на CyanogenMod и, возможно, на других модифицированных ПЗУ, но не на стандартных ПЗУ AOSP:

Перейдите в « Настройки» > «Параметры разработчика» и прокрутите вниз до «Имя хоста устройства» . Рут не нужен.

(Нажмите на изображение, чтобы увеличить)

ИЗОБРАЖЕНИЕ:

Да, вы не можете сделать это на планшете Acer A100 под управлением Android 4.0.3. На самом деле, в параметрах разработчика даже нет «Имени хоста устройства».

Я давно не запускал сток, но в «Настройки приложения»> «Разработка» вы увидите параметр «Имя хоста устройства».

на каких версиях андроида? Когда я смотрю на варианты разработки на своем Droid 3 (Android 2.3.4), у меня нет этого варианта.
Это работает на CyanogenMOD и, возможно, на других модифицированных ПЗУ, но не на стандартных ПЗУ AOSP.
Полностью зависит от производителя и сборщика, а также от версии андроида.

Перейдите в магазин Google Play. Найдите «имя хоста» и загрузите приложение для смены имени хоста .

Должен быть укоренен.

Не испортит ли что-нибудь внутреннее переименование устройства?

Имя хоста используется для легкой идентификации и запоминания хостов, подключенных к сети. Он устанавливается при загрузке, например, /etc/hostnameв системах на базе Linux. Имя хоста также является частью DHCPREQUEST(стандартизировано IETF как код 12 ), которую клиент DHCP (в нашем случае устройство Android) передает DHCP-серверу (маршрутизатору WiFi) для получения назначенного IP-адреса. DHCP-сервер хранит имена хостов для предоставления таких услуг, как DNS. Подробнее см. в разделе Как пропинговать хост локальной сети по имени хоста? .

Android — вместо использования службы имени хоста ядра Linux — используется свойство net.hostname(начиная с Android 2.2 ) для установки уникального имени хоста для каждого устройства, основанного на android_id. Это свойство имени хоста использовалось для рукопожатия DHCP (добавлено в Android 2.2 и 4.0 ). В Android 6 net.hostnameпродолжали использоваться ( 1 , 2 , 3 , 4 ) в новом DHCP-клиенте Java, когда от родного dhcpcdотказались, а позже служба была удалена в Android 7. Поскольку Android 8, когда он android_idстал уникальным для приложений net.hostname, больше не устанавливается, поэтому nullотправляется DHCPREQUEST. См. Изменения конфиденциальности и улучшения безопасности Android 8 :

net.hostnameтеперь пуст, и клиент dhcp больше не отправляет имя хоста

Таким образом, WiFi-маршрутизаторы не показывают имена хостов для Android 8+, и мы не можем их установить/сбросить/изменить.

Однако на корневых устройствах вы можете установить net.hostnameвручную с помощью setpropкоманды или добавить какой init- либо .rcфайл для установки при каждой загрузке. Или используйте сторонний клиент, например busybox udhcpc, чтобы отправить желаемое имя хоста и другие параметры на маршрутизатор. См. раздел Подключение к WiFi через ADB Shell .