Tóm lược:
getprop net.hostname
(Tên máy chủ hệ thống Android, có thể là tên loại android_24412414)
echo $HOSTNAME
(tên máy chủ shell / terminal / env, có khả năng ro.product.device từ build.prop)
cat /proc/sys/kernel/hostname
(Tên máy chủ hệ thống Linux, có khả năng localhost )
head /etc/hosts
(Tên máy chủ hệ thống Linux, có khả năng localhost )
hostname
(Lệnh không phải lúc nào cũng được cài đặt, nếu được cài đặt qua hộp bận, sẽ đọc / Proc / sys / kernel / hostname )
Phụ thuộc vào phiên bản Android bạn có.
Android 4.0 trở lên
Các phiên bản mới hơn sẽ sử dụng đúng build.prop
mục. Vâng, có nghĩa là, Android đọc build.prop
như là quá trình khởi động bình thường. Khi Dịch vụ kết nối chạy, nó sẽ kiểm tra xem net.hostname có được đặt trong Cài đặt không, sau đó nếu trống, thì nó sẽ sử dụng ID android "android_" + (vĩnh viễn). Vì vậy, đó là tất cả những gì bạn cần làm.
Thêm net.hostname=HOSTNAMEHERE
vào /system/build.prop
(Root có thể cần thiết). Để lại một dòng trống ở cuối tập tin.
Kitkat's ConnectivityService.java, lưu ý câu lệnh 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 trở xuống
Các phiên bản cũ hơn, Gingerbread, Froyo, v.v., chỉ cần ghi đè lên nó. Nó không bận tâm để kiểm tra. Nó sẽ đặt net.hostname thành android_24412414 ... không có vấn đề gì. Vì vậy, bạn sẽ cần thay đổi nó sau khi Dịch vụ kết nối đã tải xong. May mắn thay, nó chỉ chạy khởi động một lần, không phải trên mọi kết nối mới. Vì vậy, chúng tôi chỉ cần chạy setprop net.hostname HOSTNAMEHERE
sau đó để nó dính. Thật không may, nó chạy khá muộn trong quá trình khởi động, vì vậy bạn cần một cái gì đó sẽ thực hiện các thay đổi trên boot_complete. Nhiều khả năng là một ứng dụng tự chạy.
ConnectivityService.java của 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);
Nhưng sau đó có một vấn đề khác.
Cài đặt net.hostname, không được sao chép vào toàn bộ hệ thống! Nếu bạn sử dụng ứng dụng console / terminal, bạn có thể không có cùng tên máy chủ. Điện thoại của tôi, Samsung Sidekick 4G (dựa trên bán Galaxy S) có init.rc chạy hostname localhost
, vì vậy tất cả các lệnh bên dưới sẽ không thấy tên máy chủ build.prop hoặc tên máy chủ android_id! Vì vậy, bạn cần phải thiết lập điều đó quá.
hostname HOSTNAMEHERE
hoặc là echo HOSTNAMEHERE > /proc/sys/kernel/hostname
Lưu ý: Tùy thuộc vào cách bạn đang thực hiện, bạn sẽ cần chạy lệnh trên dưới dạng root để nó hoạt động. Init.rc thường nằm trên phân vùng hệ thống chỉ đọc, vì vậy cần có quyền truy cập root để chỉnh sửa nó.
Lệnh dhcpcd, được chạy để lấy địa chỉ dhcp, sẽ không cập nhật tên máy chủ do máy chủ cung cấp (Điều đó có thể được sửa bằng cách thêm dhcpcd-run-hook và dhcpcd.conf) và nó sẽ không cung cấp tên máy chủ đến máy chủ dhcp nếu $(hostname)
(Lệnh hostname) trống hoặc localhost và bên trong nó không sử dụng net.hostname. libnetutils được sử dụng để gọi dhcpcd với -h "net.hostname", nhưng nếu vì lý do nào đó, nó quyết định không gọi bằng -h, DHCPCD SILL GỬI HỆ THỐNG HOSTNAME qua gethostname (), miễn là không phải "(không có) "," localhost "hoặc trống. Trên cổ phiếu Froyo nào. Samsung đã vặn pooch trên một số thiết bị như của tôi. Không có tên máy chủ nào đi qua, thời gian mạng bắt buộc, v.v.
Giải pháp của tôi cho Gingerbread và bên dưới Samsung, Chỉnh sửa cấu hình DHCP Client Daemon:
Điều cuối cùng bạn có thể làm là chỉnh sửa /etc/dhcpcd/dhcpcd.conf. Nếu bạn thêm hostname YOURHOSTNAME
vào tập tin, nó sẽ sử dụng nó, trừ khi tên máy chủ được đưa ra trên dòng lệnh. Điều này sẽ không khắc phục sự cố android_234etc, nhưng nếu tên máy chủ là localhost (Vấn đề của tôi, do Samsung đã vặn libnetutils và localhost trong init.rc). Bạn sẽ cần Root, nhưng điều này hoạt động trên các lần khởi động lại. Điều này sẽ không hoạt động nếu dhcpcd được gọi với tùy chọn -h Hostname.