Мое Android-устройство — Nexus One. Но это должно относиться ко всем современным устройствам Android.
Как изменить имя моего Android-устройства?
Когда я подключаюсь к клиентским таблицам своего беспроводного маршрутизатора, мои устройства Android отображаются, например, как: android_1234567890abedfc. Я хотел бы дать ему более читаемое имя.
Чтобы изменить имя хоста (имя устройства), вы должны использовать терминал (как 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.
Более новые версии будут использовать правильную 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);
Старые версии, 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 облажался на некоторых устройствах, подобных моему. Отсутствие передачи имени хоста, принудительное сетевое время и т. д.
Последнее, что вы можете сделать, это отредактировать файл /etc/dhcpcd/dhcpcd.conf. Если вы добавите hostname YOURHOSTNAME
в файл, он будет использовать его, если в командной строке не указано имя хоста. Это не решит проблему android_234etc, но решит проблему, если имя хоста — localhost (моя проблема, поскольку Samsung облажался с libnetutils и localhost в init.rc). Вам понадобится Root, но это работает при перезагрузке. Это не сработает, если dhcpcd вызывается с опцией -h Hostname.
Я нашел способ сделать это на своем Nexus 7 с рутом 4.2.2. Настройка сохраняется постоянно и работает во время перезагрузки.
Источник: 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
команду через корневую оболочку на устройстве: напримерsetprop net.hostname NewHostName
Я давно не запускал сток, но в «Настройки приложения»> «Разработка» вы увидите параметр «Имя хоста устройства».
Перейдите в магазин 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 .
Поток
Джаред Берроуз
cde
Чиро Сантилли OurBigBook.com