2010-11-13 41 views
11

Tôi có vấn đề sau:Android lưu trữ tập tin sử dụng

Tôi tạo một tệp máy chủ tùy chỉnh để kiểm tra một số tính năng của ứng dụng và sau đó đẩy nó vào trình giả lập Android của tôi. Vấn đề là các cài đặt này không có hiệu lực ngay lập tức. Tôi phải chờ khoảng 10 phút trước khi chúng hoạt động.

Vì vậy, câu hỏi của tôi là: làm cách nào để làm cho tệp máy chủ lưu trữ mới hoạt động ngay lập tức? Tôi có nhiều cài đặt khác nhau để kiểm tra và tôi không thể đợi 10 phút mỗi lần.

+0

Tôi chưa thử đợi 10 phút, nhưng tôi thấy rằng các thay đổi của tôi không hiệu quả ngay lập tức (khi được cập nhật qua 'adb pull/etc/hosts', chỉnh sửa cục bộ,' adb push hosts/etc/hosts'). Tìm kiếm trợ giúp tương tự về chủ đề này! –

+2

@Matt Một quirk là mục nhập máy chủ phải kết thúc bằng LineFeed hoặc Android sẽ bỏ qua nó. Không phải là CR/LF và bạn không thể rời khỏi LF trên mục nhập cuối cùng. Điều đó làm tôi bối rối một lúc. Tôi không thấy sự chậm trễ 10 phút, những thay đổi mà tôi thực hiện dường như diễn ra ngay lập tức. – mhenry1384

Trả lời

5

Java duy trì bộ nhớ cache DNS nội bộ của chính nó. Hệ điều hành sẽ phản ánh tệp máy chủ mới ngay lập tức (xác minh rằng với ping trên dòng lệnh) nhưng bạn sẽ cần phải yêu cầu java không lưu vào bộ nhớ cache bất kỳ thứ gì. Thêm những dòng này vào ứng dụng thử nghiệm của bạn:

System.setProperty("networkaddress.cache.ttl" , "0"); System.setProperty("networkaddress.cache.negative.ttl" , "0");

Để biết thêm thông tin về các đặc tính này, xem tại đây: http://docs.oracle.com/javase/7/docs/technotes/guides/net/properties.html

+0

Điều này làm việc tuyệt vời cho tôi. – Lee

0

Tôi chưa thử sử dụng tệp máy chủ; nhưng tôi đã thử sử dụng DNS tùy chỉnh ...

  1. Bắt đầu máy chủ DNS ở đâu đó (bạn có thể tải DD-WRT, có bộ định tuyến ưa thích hoặc chạy daemon trên PC).
  2. TÙY CHỌN: Định cấu hình bộ định tuyến cục bộ của bạn (máy chủ DHCP) với vị trí của máy chủ DNS đang chạy (đặt tên đầu tiên trong danh sách máy chủ DNS).
  3. NẾU SKIPPING # 2: Định cấu hình điện thoại của bạn cho IP tĩnh (Cài đặt Wi-Fi-> Nút menu-> nâng cao). Đặt DNS1 làm máy chủ của bạn.
  4. Để điện thoại của bạn kết nối với mạng này qua WIFI.

Bạn đã hoàn tất! Giờ đây, bạn có thể quản lý các lần gửi tên DNS/IP cùng với thời gian thuê (ví dụ: do đó điện thoại sẽ cập nhật IP mỗi 30 giây nếu bạn cần). Hơi phức tạp, nhưng bạn không phải tải tệp máy chủ trên điện thoại :-).

+0

Điều này sẽ không hoạt động. Java đang lưu bộ nhớ đệm tra cứu DNS nội bộ, nó thậm chí sẽ không làm phiền việc truy vấn máy chủ DNS tùy chỉnh. –

2

Tôi vừa mới chỉnh sửa file host của tôi trên Samsung bắt nguồn của tôi Galaxy S, và thay đổi có hiệu lực ngay lập tức. Có lẽ vấn đề bạn đang thấy là điều gì đó liên quan đến ADB?

Tôi đã làm điều này:

  1. Sử dụng Busybox, sao chép các tập tin host đến một vị trí có thể chỉnh sửa với cp /etc/hosts /mnt/sdcard/hosts.new;
  2. Chỉnh sửa /mnt/sdcard/hosts.new bằng trình chỉnh sửa văn bản được cài đặt sẵn, thêm hai mục tôi cần.Tôi đã sử dụng IP, sau đó tên máy chủ không đủ tiêu chuẩn, sau đó là FQDN, ví dụ: 192.168.2.81 siva siva.myinventeddomain.org.au, nhưng các định dạng khác cũng nên hoạt động theo lý thuyết;
  3. Trong BusyBox lần nữa, su để root;
  4. /system được ro theo mặc định, vì vậy tôi phải làm cho nó rw với mount -o remount,rw /system;
  5. Để lưu nhập sau, cd /etc (khi xảy ra dấu nhắc trình bao hiển thị /system/etc thay vì /etc, điều này làm cho tôi nghi ngờ shenanigans liên kết tượng trưng);
  6. Sao lưu tệp máy chủ lưu trữ mặc định (chỉ chứa 127.0.0.1 localhost) với mv hosts hosts.old;
  7. Cài đặt tệp máy chủ mới với mv /mnt/sdcard/hosts.new hosts;
  8. Thực hiện sync (chỉ vì tôi hoang tưởng - điều này không cần thiết);
  9. Remount /system fs ro với mount -o remount,ro /system;
  10. Thoát khỏi BusyBox;
  11. Khởi động trình duyệt web (FireFox) và nhập siva vào URL kết hợp/trường tìm kiếm thingy (siva là một trong hai mục nhập mà tôi đã thêm).

Trước những thay đổi này, bước 11 dẫn đến tìm kiếm Google ngu ngốc cho 'siva' hoặc một cái gì đó; ngay sau đó, tôi nhận được trang đầu tiên của mạng httpd vhost của LAN, như tôi mong đợi.

Có dưới 10 phút trôi qua giữa thời gian hoạt động và không hoạt động.

Liên kết tới tài liệu Java của Sun có thể có hoặc không liên quan (có thể là không). Android hoàn toàn không chứa một máy ảo Java, hãy để một mình mặt trời của Sun. Nó chạy một máy ảo khác được gọi là Dalvik - xem mục nhập Wikipedia: http://en.wikipedia.org/wiki/Dalvik_%28software%29

Thực tế là bạn có thể lập trình điện thoại Android bằng một ngôn ngữ trông rất giống Java bên cạnh điểm.

Các vấn đề liên quan