Thiết lập mạng cho Trình mô phỏng Android

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

Trình mô phỏng cung cấp chức năng nối mạng linh hoạt mà bạn có thể dùng để thiết lập môi trường thử nghiệm và mô hình phức tạp cho ứng dụng. Các phần sau giới thiệu cấu trúc và chức năng của mạng trình mô phỏng.

Không gian địa chỉ mạng

Mỗi phiên bản của trình mô phỏng đều chạy sau một dịch vụ tường lửa/bộ định tuyến (router) ảo để tách biệt nó với giao diện và cài đặt của mạng máy phát triển và với Internet. Thiết bị được mô phỏng không thể thấy máy phát triển hoặc các phiên bản của trình mô phỏng khác trên mạng. Thay vào đó, thiết bị này chỉ thấy rằng nó được kết nối qua Ethernet vào một bộ định tuyến/tường lửa.

Bộ định tuyến ảo cho mỗi phiên bản quản lý không gian địa chỉ mạng 10.0.2/24 — tất cả địa chỉ do bộ định tuyến quản lý có dạng 10.0.2.xx, trong đó xx là một con số. Các địa chỉ trong không gian này được trình mô phỏng/bộ định tuyến phân bổ trước như sau:

Địa chỉ mạng Mô tả
10.0.2.1 Địa chỉ của bộ định tuyến/cổng vào
10.0.2.2 Bí danh đặc biệt cho giao diện quay ngược của máy chủ (ví dụ: 127.0.0.1 trên máy phát triển)
10.0.2.3 Máy chủ DNS thứ nhất
10.0.2.4 / 10.0.2.5 / 10.0.2.6 Máy chủ DNS thứ hai, thứ ba và thứ tư tuỳ chọn (nếu có)
10.0.2.15 Giao diện mạng/ethernet của thiết bị được mô phỏng
127.0.0.1 Giao diện quay ngược (loopback) của thiết bị được mô phỏng

Lưu ý rằng cùng các cách chỉ định địa chỉ được sử dụng trong tất cả phiên bản trình mô phỏng đang chạy. Điều đó có nghĩa là nếu bạn có hai phiên bản chạy đồng thời trên máy, mỗi phiên bản sẽ có bộ định tuyến riêng và sau bộ định tuyến đó thì mỗi phiên bản sẽ có địa chỉ IP là 10.0.2.15. Các phiên bản này được bộ định tuyến tách riêng và không thể nhìn thấy nhau trên cùng một mạng. Để biết thông tin về cách cho phép các phiên bản trình mô phỏng giao tiếp qua TCP/UDP, hãy xem phần Phiên bản trình mô phỏng kết nối.

Ngoài ra, xin lưu ý rằng địa chỉ 127.0.0.1 trên máy phát triển tương ứng với giao diện quay ngược của chính trình mô phỏng. Nếu muốn truy cập dịch vụ đang chạy trên giao diện quay ngược của máy phát triển (còn gọi là 127.0.0.1 trên máy) thì thay vào đó bạn nên sử dụng địa chỉ đặc biệt 10.0.2.2.

Cuối cùng, xin lưu ý rằng địa chỉ được phân bổ trước của một thiết bị được mô phỏng là dành riêng cho Trình mô phỏng Android và có thể sẽ rất khác trên thiết bị thực (thường rất có thể đã được dịch địa chỉ mạng, cụ thể là sau một bộ định tuyến/tường lửa).

Giới hạn về mạng cục bộ

Ứng dụng Android chạy trong trình mô phỏng có thể kết nối với mạng có sẵn trên máy trạm. Tuy nhiên, ứng dụng kết nối thông qua trình mô phỏng, chứ không trực tiếp đến phần cứng, và trình mô phỏng hoạt động như một ứng dụng bình thường trên máy trạm. Điều này có thể gây ra một số hạn chế:

  • Chương trình tường lửa chạy trên máy có thể chặn giao tiếp với thiết bị được mô phỏng.
  • Một tường lửa/bộ định tuyến (vật lý) khác mà máy được kết nối có thể chặn giao tiếp với thiết bị được mô phỏng.

Bộ định tuyến ảo của trình mô phỏng phải có khả năng xử lý tất cả các thông báo/kết nối TCP và UDP chiều đi thay mặt cho thiết bị được mô phỏng, miễn là môi trường mạng của máy phát triển cho phép nó làm như vậy. Không có giới hạn có sẵn nào đối với số hoặc phạm vi cổng, ngoại trừ giới hạn do hệ điều hành và mạng máy chủ đề ra.

Tuỳ thuộc vào môi trường, trình mô phỏng có thể không hỗ trợ được giao thức khác (chẳng hạn như ICMP, dùng để "ping"). Hiện tại, trình mô phỏng không hỗ trợ IGMP hoặc phát đa hướng.

Sử dụng lệnh chuyển hướng mạng

Để giao tiếp với một phiên bản trình mô phỏng phía sau bộ định tuyến ảo, bạn cần thiết lập lệnh chuyển hướng mạng trên bộ định tuyến ảo. Sau đó, ứng dụng có thể kết nối với một cổng khách được chỉ định trên bộ định tuyến, trong khi bộ định tuyến chuyển hướng lưu lượng truy cập đến/từ cổng đó đến cổng máy chủ của thiết bị được mô phỏng.

Để thiết lập lệnh chuyển hướng mạng, bạn cần tạo một liên kết cho các cổng/địa chỉ máy chủ và khách trên phiên bản trình mô phỏng. Có hai cách để thiết lập lệnh chuyển hướng mạng: sử dụng lệnh trong bảng điều khiển của trình mô phỏng và sử dụng công cụ adb, như mô tả bên dưới.

Thiết lập lệnh chuyển hướng thông qua Bảng điều khiển trình mô phỏng

Mỗi phiên bản trình mô phỏng cung cấp một bảng điều khiển mà bạn có thể kết nối để đưa ra lệnh dành riêng cho phiên bản đó. Bạn có thể dùng lệnh trong bảng điều khiển redir để thiết lập lệnh chuyển hướng nếu cần cho một phiên bản trình mô phỏng.

Đầu tiên, xác định số cổng của bảng điều khiển cho phiên bản trình mô phỏng mục tiêu. Ví dụ: số cổng của bảng điều khiển của phiên bản trình mô phỏng thứ nhất được chạy là 5554. Tiếp theo, kết nối với bảng điều khiển của phiên bản trình mô phỏng mục tiêu, chỉ định số cổng của bảng điều khiển của phiên bản trình mô phỏng như sau:

telnet localhost 5554

Sau khi kết nối, hãy sử dụng lệnh redir để thao tác với lệnh chuyển hướng. Để thêm lệnh chuyển hướng, hãy sử dụng:

add <protocol>:<host-port>:<guest-port>

trong đó <protocol>tcp hoặc udp, <host-port><guest-port> sẽ thiết lập tương ứng liên kết giữa máy và hệ thống được mô phỏng.

Ví dụ: lệnh sau đây thiết lập lệnh chuyển hướng xử lý tất cả các kết nối TCP đến máy chủ (phát triển) có địa chỉ 127.0.0.1:5000 và sẽ chuyển chúng tới hệ thống được mô phỏng có địa chỉ 10.0.2.15:6000:

redir add tcp:5000:6000

Để xoá lệnh chuyển hướng, bạn có thể sử dụng lệnh redir del. Để liệt kê tất cả lệnh chuyển hướng cho một phiên bản cụ thể, bạn có thể sử dụng redir list. Để biết thêm thông tin về các lệnh này và các lệnh trong bảng điều khiển khác, xem Sử dụng bảng điều khiển của trình mô phỏng.

Lưu ý rằng số cổng bị hạn chế theo môi trường địa phương. Điều này thường có nghĩa là bạn không thể sử dụng số cổng máy chủ dưới 1024 nếu không có đặc quyền của quản trị viên. Ngoài ra, bạn sẽ không thể thiết lập lệnh chuyển hướng cho cổng máy chủ mà một quy trình khác đang sử dụng trên máy. Trong trường hợp đó, redir sẽ tạo một thông báo lỗi có ý nghĩa đó.

Thiết lập lệnh chuyển hướng thông qua adb

Công cụ Cầu gỡ lỗi Android (adb) cung cấp tính năng chuyển tiếp cổng, một cách thay thế để bạn thiết lập lệnh chuyển hướng mạng. Để biết thêm thông tin, xem Cổng chuyển tiếp trong tài liệu adb.

Lưu ý rằng adb hiện không cung cấp bất kỳ cách nào để xoá lệnh chuyển hướng, ngoại trừ bằng cách loại bỏ máy chủ adb.

Định cấu hình cài đặt DNS của trình mô phỏng

Khi khởi động, trình mô phỏng đọc danh sách máy chủ DNS mà hệ thống hiện đang sử dụng. Sau đó, trình mô phỏng lưu trữ địa chỉ IP của tối đa bốn máy chủ trong danh sách này và thiết lập bí danh cho các máy chủ đó trên các địa chỉ được mô phỏng 10.0.2.3, 10.0.2.4, 10.0.2.5 và 10.0.2.6 nếu cần.

Trên Linux và OS X, trình mô phỏng sẽ lấy địa chỉ máy chủ DNS bằng cách phân tách tệp /etc/resolv.conf. Trên Windows, trình mô phỏng sẽ lấy địa chỉ bằng cách gọi API GetNetworkParams(). Xin lưu ý rằng điều này thường có nghĩa là trình mô phỏng bỏ qua nội dung của tệp "máy chủ" (/etc/hosts trên Linux/OS X, %WINDOWS%/system32/HOSTS trên Windows).

Khi khởi động trình mô phỏng ở dòng lệnh, bạn cũng có thể sử dụng tuỳ chọn -dns-server <serverList> để chỉ định thủ công địa chỉ máy chủ DNS sẽ sử dụng, trong đó <serverList> là danh sách tên máy chủ hoặc địa chỉ IP (phân tách bằng dấu phẩy). Bạn có thể thấy tuỳ chọn này hữu ích nếu gặp phải sự cố phân giải DNS trong mạng được mô phỏng (ví dụ: thông báo "Unknown Host error" (Lỗi máy chủ không xác định) xuất hiện khi sử dụng trình duyệt web).

Sử dụng trình mô phỏng với proxy

Trên nhiều mạng công ty, kết nối trực tiếp đến internet không hoạt động (do bị quản trị viên mạng từ chối), trừ trường hợp kết nối này được thực hiện thông qua một proxy riêng. Trình duyệt web và ứng dụng khác của công ty được định cấu hình trước để sử dụng proxy này sao cho bạn có thể duyệt web. Ứng dụng thông thường, như trình mô phỏng, cần biết rằng có proxy và chúng cần kết nối với proxy đó.

Do tính chất của HTTP, kết nối máy chủ web trực tiếp và kết nối thông qua proxy sẽ dẫn đến các yêu cầu GET khác nhau. Trình mô phỏng chép lại một cách minh bạch yêu cầu GET từ thiết bị ảo trước khi trao đổi với proxy để proxy hoạt động.

Nếu trình mô phỏng phải truy cập Internet thông qua máy chủ proxy, bạn có thể định cấu hình proxy HTTP tuỳ chỉnh trên màn hình Điều khiển mở rộng của trình mô phỏng. Khi trình mô phỏng mở, nhấp vào Thêm , rồi nhấp vào Cài đặtProxy. Từ đây, bạn có thể xác định tuỳ chọn cài đặt proxy HTTP của riêng mình.

Ngoài ra, bạn có thể định cấu hình một proxy qua dòng lệnh bằng tuỳ chọn -http-proxy <proxy> khi khởi động trình mô phỏng. Trong trường hợp này, bạn chỉ định thông tin proxy theo <proxy> ở một trong các định dạng này:

http://<machineName>:<port>

hoặc

http://<username>:<password>@<machineName>:<port>

Tuỳ chọn -http-proxy buộc trình mô phỏng sử dụng proxy HTTP/HTTPS đã chỉ định cho tất cả kết nối TCP đi. Lệnh chuyển hướng cho UDP hiện không được hỗ trợ.

Ngoài ra, bạn có thể chỉ định biến môi trường http_proxy thành giá trị bạn muốn sử dụng cho <proxy>. Trong trường hợp này, bạn không cần chỉ định giá trị cho <proxy> trong lệnh -http-proxy – trình mô phỏng kiểm tra giá trị của biến môi trường http_proxy khi khởi động và tự động sử dụng giá trị của biến môi trường nếu đã chỉ định.

Bạn có thể sử dụng tuỳ chọn -debug-proxy để chẩn đoán sự cố kết nối proxy.

Các phiên bản trình mô phỏng kết nối

Để cho phép phiên bản trình mô phỏng này giao tiếp với phiên bản trình mô phỏng khác, bạn phải thiết lập lệnh chuyển hướng mạng cần thiết như minh hoạ bên dưới.

Giả sử rằng môi trường là

  • A là máy phát triển
  • B là phiên bản trình mô phỏng thứ nhất, chạy trên A
  • C là phiên bản trình mô phỏng thứ hai, cũng chạy trên A

và bạn muốn chạy một máy chủ trên B, mà lại kết nối với cả C, bạn có thể thiết lập theo cách này:

  1. Thiết lập máy chủ trên B, đang nghe 10.0.2.15:<serverPort>
  2. Trên bảng điều khiển B, thiết lập lệnh chuyển hướng từ A:localhost:<localPort> đến B:10.0.2.15:<serverPort>
  3. Trên C, để ứng dụng kết nối với 10.0.2.2:<localPort>

Ví dụ: nếu muốn chạy máy chủ HTTP, bạn có thể chọn <serverPort> là 80 và <localPort> là 8080:

  • B nghe trên 10.0.2.15:80
  • Trên bảng điều khiển B, ban hành redir add tcp:8080:80
  • C kết nối với 10.0.2.2:8080

Gửi cuộc gọi thoại hoặc SMS đến một phiên bản trình mô phỏng khác

Trình mô phỏng tự động chuyển tiếp cuộc gọi thoại và tin nhắn SMS được mô phỏng từ phiên bản này sang phiên bản khác. Để gửi cuộc gọi thoại hoặc SMS, hãy dùng ứng dụng quay số hoặc ứng dụng SMS tương ứng từ một trong các trình mô phỏng.

Cách bắt đầu cuộc gọi thoại được mô phỏng đến một phiên bản trình mô phỏng khác:

  1. Chạy ứng dụng quay số trên phiên bản trình mô phỏng gốc.
  2. Nhập số điện thoại để quay số, đó chính là số cổng của bảng điều khiển mà bạn muốn gọi. Bạn có thể xác định số cổng của bảng điều khiển của phiên bản mục tiêu bằng cách kiểm tra tiêu đề cửa sổ của nó, trong đó số cổng của bảng điều khiển được báo cáo là "Trình mô phỏng Android (<port>).
  3. Nhấn "Quay số". Một cuộc gọi đến mới sẽ xuất hiện trong phiên bản trình mô phỏng mục tiêu.

Để gửi tin nhắn SMS đến một phiên bản trình mô phỏng khác, chạy ứng dụng SMS (nếu có). Chỉ định số cổng của bảng điều khiển của phiên bản trình mô phỏng mục tiêu dưới dạng địa chỉ SMS, nhập văn bản tin nhắn rồi gửi tin nhắn. Tin nhắn sẽ được gửi đến phiên bản trình mô phỏng mục tiêu.

Bạn cũng có thể kết nối với một bảng điều khiển trình mô phỏng để mô phỏng cuộc gọi đến hoặc SMS. Để biết thêm thông tin, hãy xem nội dung Mô phỏng điện thoạiMô phỏng SMS.