Підсумок:
getprop net.hostname
(Ім'я хосту системи Android, швидше за все, ім’я типу Android
echo $HOSTNAME
(оболонка / термінал / env ім'я хоста, ймовірно, ro.product.device від build.prop)
cat /proc/sys/kernel/hostname
(Ім'я хоста Linux, ймовірно localhost )
head /etc/hosts
(Ім'я хоста Linux, ймовірно localhost )
hostname
(Команда не завжди встановлена, якщо встановлена через зайнятий вікно, буде читати / proc / sys / ядро / ім'я хоста )
Залежить від того, яку версію Android ви маєте.
Android 4.0 і вище
Новіші версії використовуватимуть правильний build.prop
запис. Ну, тобто, Android читає build.prop
як це нормальний процес завантаження. Як тільки служба підключення запускається, вона перевіряє, чи встановлено net.hostname у Налаштуваннях, потім якщо порожній, то він використовує "android_" + (постійний) ідентифікатор Android. Отже, це все, що вам потрібно зробити.
Додати net.hostname=HOSTNAMEHERE
в /system/build.prop
(може знадобитися корінь). Залиште порожній рядок у кінці файлу.
Kitkat's 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 і нижче
Старіші версії, Пряники, Фройо тощо, просто приборкають його. Це не турбує перевіряти. Він встановить 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 (на базі напів-галактики 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)
(команда ім'я хоста) порожня або localhost, і він не використовує внутрішньо net.hostname. libnetutils використовується для виклику dhcpcd з -h "net.hostname", але якщо з якихось причин він вирішив не дзвонити з -h, DHCPCD ВІДПОВІДУЄ НАДІСЛЕННЯ СИСТЕМИ HOSTNAME через gethostname (), поки це не "(none) "," localhost "або порожній. На запасі Froyo все одно. Компанія Samsung накрутила пуху на деяких пристроях, як у мене. Жодне ім'я хоста не проходить, примусовий час мережі тощо
Моє рішення для пряників та нижче Samsung, відредагуйте конфігурацію Daemon клієнта DHCP:
Останнє, що ви можете зробити, це редагувати /etc/dhcpcd/dhcpcd.conf. Якщо ви додасте hostname YOURHOSTNAME
у файл, він буде використовувати це, якщо тільки в командному рядку не вказано ім'я хоста. Це не виправить проблему android_234etc, але буде, якщо ім'я хоста - localhost (Моя проблема, оскільки Samsung вкрутив libnetutils і localhost в init.rc). Вам знадобиться Root, але це працює через перезавантаження. Це не працюватиме, якщо dhcpcd викликається опцією -h Hostname.