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

59

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

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

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

Spong
источник
Также возможно настроить имя хоста через сервер DHCP. Но я не проверял, использует ли Android эту опцию конфигурации. В любом случае это просто косметический вариант.
Поток
@Flow (различается, но) Android DHCPCD не имеет dhcpcd-run-hooks для установки имени хоста из DHCP. По крайней мере, на моем устройстве Samsung Froyo. Он также не имеет хуков NTP. DHCPCD действительно поддерживает это все же.
CDE
для GNU Linux: askubuntu.com/questions/9540/how-do-i-change-the-computer-name , методы ядра низкого уровня будут работать
Ciro Santilli 事件 改造 中心 法轮功 六四 事件

Ответы:

22

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

Для Eclair (2.1): echo MYNAME> / proc / sys / kernel / hostname

Для Froyo (2.2): (работает также на большинстве 2.3) setprop net.hostname MYNAME

Затем перезапустите свой Wi-Fi. Чтобы увидеть изменения, наберите uname -a

некоторые устройства требуют перезагрузки для работы!

Эдер Гусатто
источник
Это работает на желе?
2012 года
3
Это работает, но не сохраняется при перезагрузке.
Palswim
1
uname -aне показывает имя хоста для меня, хотя и говорит localhost. что вы ожидаете показать?
Эндолит
15

Резюме:

  • 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(Команда не всегда устанавливается, если она установлена ​​через окно занятости, будет читать / proc / sys / kernel / hostname )

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

Android 4.0 и выше

Более новые версии будут использовать правильную build.propзапись. Ну, то есть Android читает build.propкак нормальный процесс загрузки. После запуска службы подключений она проверяет, задано ли в Настройках имя net.hostname, затем, если оно пустое, используется идентификатор 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. Скорее всего, приложение, которое запускается само по себе.

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

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

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

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

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

CDE
источник
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 и, возможно, на других модифицированных ПЗУ, но не на стандартных AOSP:

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

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

IMG:

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

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

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

Зайдите в Google Play Store. Найдите "hostname" и загрузите приложение смены имени хоста .

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

Райан Нелл
источник
Переименует ли устройство что-нибудь внутренне?
bgmCoder
0

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

Android - вместо использования службы имени хоста ядра Linux - использовал свойство, net.hostnameчтобы установить уникальное имя хоста для каждого устройства на основе идентификатора Android. Это свойство имени хоста также использовалось для рукопожатия DHCP. Однако , так как Android 5 - когда родной dhcpcdбыл оставлен в пользу Java DHCP клиента - имя хоста нуль в DHCPREQUEST. net.hostnameне ни установить , ни оценивали DHCP клиента. Таким образом, маршрутизаторы WiFi не показывают имена хостов для новых устройств Android, и мы не можем установить / отменить / изменить его.

Ирфан Латиф
источник