Có thể viết mã/biên dịch ứng dụng Android trên một máy và gỡ lỗi từ xa trên trình mô phỏng được khởi chạy trên một máy khác không? Tôi bị bệnh và mệt mỏi với giả lập liên tục ăn một nửa CPU của máy tính xách tay của tôi.Gỡ lỗi từ xa bằng trình giả lập Android
Trả lời
Trước đây tôi chưa thử (hoặc thậm chí được chú ý), lệnh adb connect
đã được đề cập, nhưng tôi có thể xác nhận rằng chuyển tiếp cổng TCP cho mình — chẳng hạn như qua SSH — hoạt động tốt.
Trình giả lập lắng nghe trên hai cổng TCP trên mỗi trường hợp: 5554 cho giao diện telnet và 5555 để liên lạc điều khiển với các công cụ như DDMS. Vì vậy, bạn có thể có thể nhận được ngay với chỉ chuyển tiếp cổng 5555 (mặc dù tôi đã chỉ thử nó cho đến nay với cả hai). Mỗi trình mô phỏng tiếp theo sẽ có bộ số cổng lẻ + lẻ có sẵn tiếp theo (lên tới khoảng 5580, tôi nghĩ).
Để tham khảo, tôi đã làm theo các bước sau trên máy tính địa phương của tôi:
ssh -NL 5554:localhost:5554 -L 5555:localhost:5555 [email protected]
killall adb; adb devices
Tôi tin rằng giả lập cố gắng thông báo cho một máy chủ adb địa phương lúc khởi động; do đó cần phải khởi động lại adb để nó thăm dò các cổng 5554+ cục bộ.
Lưu ý rằng localhost
trong lệnh ssh đề cập đến giao diện cục bộ của máy từ xa từ xa.
adb devices
hiển thị trình giả lập mới — emulator-5554
— và tôi có thể sử dụng nó như thể nó đang chạy trên máy cục bộ của tôi.
Tôi không có một máy thứ hai với SDK để bàn, nhưng tôi lưu ý của giả lập lắng nghe cổng (mặc định 5554, 5555) đều được lắng nghe trên 0.0.0.0
, tức là có thể truy cập từ các máy tính từ xa, và rằng adb --help
cho thấy một lệnh connect <host>:<port>
. Tôi giả định rằng nó sẽ hiển thị trong các câu lệnh adb devices
để adb
hoạt động trên đó. Đối với Eclipse, hãy thử "Run/Run Configurations ..." và đặt Target to Manual. Điều đó mang lại cho bạn một "lựa chọn thiết bị" mà tôi đoán sẽ bao gồm một trình mô phỏng từ xa nếu adb được kết nối với nó. Đáng thử.
Điện thoại của nhà phát triển ít tốn kém hơn máy tính bổ sung và có thể được sửa lỗi từ xa. Nó có lợi ích bổ sung khi có tất cả các cảm biến tùy chọn mà trình giả lập không hiển thị theo mặc định.
Tôi đặc biệt khuyên bạn nên có điện thoại của nhà phát triển để thử nghiệm.
Đây là cách tôi đã giải quyết nó trên Windows. Tôi theo đuổi Christopher rất nhiều, nhưng tôi không thể chỉnh sửa, nên một câu trả lời mới sẽ phải làm.
Vấn đề tôi gặp phải là ADB cũng như trình giả lập vừa lắng nghe trên 127.0.0.1, không phải 0.0.0.0, đối với tôi. Nếu không, tôi đã sử dụng TCPMon. Tôi đoán điều này là khác nhau trên Windows hoặc đã thay đổi với phiên bản SDK mới nhất. (Bạn có thể kiểm tra với netstat -ban
.)
Tôi đã cài đặt WinSSHD trên máy chạy bộ mô phỏng. (Tôi tin rằng nó sẽ làm việc với freeSSHd là tốt, nhưng tôi không thể có được một đăng nhập làm việc ở đó.)
Tôi đã mở cổng 22 (TCP) trong Tường lửa của Windows. (WinSSHD có thể làm điều đó cho bạn.)
Tôi đã tạo một tài khoản ảo trong giao diện WinSSHD.
Tôi đã tạo kết nối PuTTY mới từ máy phát triển đến máy mô phỏng và đảm bảo tôi có thể kết nối.
Sau đó, tôi thiết lập đường hầm trong PuTTY: Kết nối -> SSH -> Tunnels
Source port: 5554
Destination: localhost:5554
Type: Local/Auto
Source port: 5555
Destination: localhost:5555
Type: Local/Auto
(Connect và giữ Đặt TY mở, để duy trì đường hầm.)
Bây giờ tôi đã khởi chạy trình giả lập trên máy từ xa và đảm bảo rằng ADB không chạy ở đó.
Tôi đã khởi động lại ADB trên máy phát triển (
adb kill-server
, sau đóadb start-server
).adb devices
và trình mô phỏng từ xa hiển thị làemulator-5554 device
. Bây giờ tôi có thể triển khai và chạy ứng dụng của tôi trực tiếp từ Eclipse/ADT, nơi trình giả lập hiển thị trong Thiết bị ảo như thể nó là một trình mô phỏng cục bộ.
Đã làm việc tuyệt vời! Cảm ơn các chi tiết. –
Đẹp, nhưng tôi muốn làm rõ: Sau bước 4 bạn phải đóng putty, sau đó trong bước 5 mở nó một lần nữa, cấu hình các đường hầm và kết nối lại. Các bước 6-8: bộ mô phỏng bắt đầu đầu tiên, sau đó khởi động adb (trong máy chủ). Bước 9: bạn có thể muốn khởi động lại adb trong máy khách và nhập các thiết bị adb để đảm bảo rằng nó ổn. DDMS thông thường và các công cụ nhật thực cũng hoạt động tốt. –
@MisterSmith Điểm rất hợp lệ, tại sao bạn không gửi chỉnh sửa? :) –
Tôi nhận thấy câu hỏi này thực sự cũ, nhưng tôi đã giải quyết được vấn đề hơi khác một chút và tôi mất một thời gian để tìm ra giải pháp tầm thường này.
Tôi thường sử dụng PC hoặc laptop Windows7 (tùy thuộc vào nơi tôi đang làm việc) làm giao diện người dùng vì tôi thích GUI, tuy nhiên tôi thích chỉnh sửa/biên dịch/gỡ lỗi trên máy chủ Ubuntu không đầu vì tất cả sức mạnh dòng lệnh mà nó cung cấp. Mục tiêu của tôi là làm cho mỗi cửa sổ hệ thống càng nhiều khách hàng mỏng càng tốt mà không cần thêm bất kỳ dịch vụ nào (chẳng hạn như sshd) hoặc lỗ hổng tường lửa.
Vì vậy, đây là senario:
- System-A: hệ thống với giả lập Android chạy
- System-B Windows7: Ubuntu máy chủ với SDK được cài đặt
Vấn đề như mô tả ở trên là giả lập trên System-A liên kết với localhost, không phải giao diện ethernet bên ngoài, do đó adb trên System-B không thể truy cập trình giả lập trên System-A. Tất cả những gì bạn cần làm là thiết lập cổng chuyển tiếp từ xa trong PuTTY cho kết nối SSH của bạn tới System-B. Bí quyết là kiểm tra nút radio "Từ xa" khi bạn tạo hai đường hầm để hướng đường hầm được đảo ngược (đường hầm từ máy chủ bạn đang đăng nhập vào máy khách mà bạn đang đăng nhập).
Cuối cùng, kết nối với adb để "localhost" vào System-B sau khi thiết lập kết nối SSH:
System-B$ adb connect localhost
connected to localhost:5555
System-B$ adb devices
List of devices attached
localhost:5555 device
Bây giờ bạn có thể tải hình ảnh/debug như bình thường, và nó là một tầm thường vấn đề để chuyển sang một hệ thống Windows khác nếu bạn muốn lấy máy tính xách tay của bạn ra và nhận được một số cà phê.
Ngoài ra, bằng cách cũng hầm cổng 5037 theo cách tương tự, bạn có thể thực sự chuyển tiếp kết nối máy chủ adb để có thể kết nối thiết bị Android thực trên USB trên Hệ thống-A và tải hình ảnh xuống từ System-B. Để làm việc này, bạn cần đảm bảo rằng máy chủ adb đang chạy trên System-A và không chạy trên System-B trước khi bắt đầu phiên SSH của bạn:
Trước tiên, hãy khởi động máy chủ adb trên System-A (command prompt)
C:\> adb start-server
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
C:\> adb devices
List of devices attached
3435F6E6035B00EC device
Tiếp theo, giết server adb vào System-B
System-B$ adb kill-server
Cuối cùng, khởi động lại phiên ssh của bạn để System-B và xác minh
System-B$ adb devices
List of devices attached
3435F6E6035B00EC device
Có cách nào để làm điều này mà không cần cài đặt sdk android trên System-A? (máy cửa sổ?) –
Không, vì máy chủ adb và trình điều khiển USB cần phải chạy trên System-A để giao tiếp với thiết bị. –
Tôi cũng đã thực hiện việc này với thiết lập như: Windows 7 (trình chạy giả lập) -> Linux (yêu cầu hop, do mạng ...) -> OS X đang chạy Eclipse. Tôi có thể xem các thiết bị có 'thiết bị adb' và sử dụng trình giả lập từ Eclipse. Vấn đề là nó không nhận ra mục tiêu Android của trình mô phỏng, vì vậy tôi phải chọn mục tiêu ở mỗi lần chạy thủ công. – Frank
Tôi đã tìm thấy một cách dễ dàng để thực hiện điều này nếu hai máy của bạn nằm trong cùng một mạng riêng và do đó không cần sử dụng mã hóa SSH (đây là trường hợp phổ biến). Điều này có thể giúp ích như một đường hầm SSH có thể khá dài và khó cài đặt. Ví dụ, cài đặt một SSH daemon dưới Cygwin/Windows lần đầu tiên có thể dẫn đến bỏ cuộc (tốt, tôi đã từ bỏ).
Trong Windows, những gì sau yêu cầu phải cài đặt Cygwin với gói httptunnel. Điều này cũng phải hoạt động trong Linux/httptunnel nhưng tôi không thử.
Chạy giả lập trên một trong những máy (giả sử tên máy chủ của nó là HostEmulator)
Khởi động Eclipse trên máy khác (chúng ta hãy gọi nó HostEclipse)
Mở một thiết bị đầu cuối Cygwin trên mỗi máy và sau đó,
Trên HostEmulator, nhập Cygwin sau lệnh:
hts -F localhost:5554 10000 hts -F localhost:5555 10001
HTS nghĩa Http Tunnel server.
Hai lệnh này tạo hai nửa cầu nghe các cổng 10001 và 10001 và chuyển hướng I/O của các cổng này đến các cổng địa phương 5554 và 5555, là các cổng được trình mô phỏng sử dụng (thực sự, bộ giả lập được phát tán đầu tiên - nếu bạn là một số người trong số họ chạy, họ sẽ sử dụng số cổng cao hơn như được thấy trong các trả lời khác của trang này).
On HostEclipse, nhập những cái:
htc -F 5554 HostEmulator:10000 htc -F 5555 HostEmulator:10001
htc nghĩa Http Tunnel Khách hàng.
Các lệnh này tạo nửa cầu còn thiếu. Họ lắng nghe các cổng địa phương 5554 và 5555 và chuyển hướng I/O của các cổng này đến nửa cầu mà chúng tôi đã tạo trên HostEmulator ngay trước đây.
Sau đó, vẫn còn trên HostEclipse, nhập ba lệnh dưới đây:
adb kill-server adb start-server adb devices
này khởi động lại adb vì nó không phát hiện ra sự giả lập từ xa khác. Nó phải được thực hiện một số chức năng quét khi khởi động. Và sau đó nó liệt kê các thiết bị (các trình giả lập có sẵn) chỉ để kiểm tra.
- Và bạn đã đến đó.
Bạn có thể làm việc với trình mô phỏng từ xa như thể là cục bộ. Bạn phải giữ các thiết bị đầu cuối Cygwin mở trên cả hai máy nếu không bạn sẽ giết nửa cây cầu bạn tạo ra.
Tôi đã sử dụng cổng 10000 và 10001 để trao đổi máy/máy tại đây, nhưng tất nhiên bạn có thể sử dụng các cổng khác miễn là chúng chưa được sử dụng.
Giải pháp của tôi dành cho windows + AndroVM (yêu cầu bộ điều hợp chỉ dành cho máy chủ) khi dịch vụ ssh của tôi không khởi động được. vì vậy nó không yêu cầu bất kỳ phần mềm bổ sung nào.
adb connect <Andro VM IP>
adp tcpip 555
On chạy cmd như admin:
netsh interface portproxy add v4tov4 listenport=5555 listenaddress=<host ip> connectport=5555 connectaddress=<Andro VM IP>
mở cổng TCP 5555 trong các cửa sổ tường lửa.
Sau đó, từ chạy PC thứ hai:
adb connect <host ip>
Không ai trong số các giải pháp được đề nghị làm việc cho tôi. Tôi đã bắt đầu từ giải pháp của Emirikol và tinh chỉnh nó, như với API Android mới> 21 trình mô phỏng đang xuất hiện ngoại tuyến và tôi phải chuyển đến cài đặt Genymotion và để trống đường dẫn Android SDK. Và từ dòng lệnh:
netsh interface portproxy add v4tov4 listenport=5555 connectport=5555 connectaddress=<emulatorIP>
netsh interface portproxy add v4tov4 listenport=5554 connectport=5554 connectaddress=<emulatorIP>
nguồn: http://www.sarpex.co.uk/index.php/2016/10/02/connect-genymotion-emulator-remotely/ Disclaimer, tôi là tác giả.
- 1. Trình giả lập Android (Không thể liên kết với 8601 trình gỡ lỗi cục bộ)
- 2. Bắt gỡ lỗi từ xa được thiết lập với PhantomJS
- 3. Gỡ lỗi từ xa PyCharm
- 4. Lỗi gỡ lỗi từ xa với GDB
- 5. Gỡ lỗi từ xa Eclipse với jboss
- 6. Tùy chọn gỡ lỗi từ xa CasperJS
- 7. Lập trình từ xa
- 8. Trình giả lập Android ABI
- 9. Gỡ lỗi ứng dụng GWT trong trình duyệt từ xa
- 10. Giao thức trình gỡ lỗi từ xa WinDbg
- 11. Sử dụng trình gỡ lỗi từ xa Eclipse ném com.sun.jdi.InternalException
- 12. Gỡ lỗi từ xa Weblogic bằng cách sử dụng eclipse
- 13. Gỡ lỗi mã gốc trong Android trên thiết bị * * (không giả lập)
- 14. Tự gọi mình bằng trình giả lập android
- 15. Trình giả lập Android 4.0 - hết lỗi không gian
- 16. Làm thế nào để thiết lập Eclipse để gỡ lỗi C từ xa bằng gdbserver?
- 17. Có thể thiết lập các điểm ngắt khi gỡ lỗi từ xa bằng Visual Studio không?
- 18. Kết nối thiết bị USB với Trình giả lập Android?
- 19. Lỗi giả lập Android: std :: bad_alloc
- 20. Proxy yêu cầu xác thực bằng Trình giả lập Android
- 21. Gỡ lỗi từ xa trên máy chủ
- 22. Visual studio + gdb gỡ lỗi từ xa
- 23. Gỡ lỗi kết nối từ xa VisualVM
- 24. Gỡ lỗi từ xa trong Tomcat 6
- 25. java.net.ConnectException: /127.0.0.1:8080 trình giả lập android
- 26. Làm thế nào để chạy hoặc gỡ lỗi trên điện thoại Android thay vì giả lập?
- 27. Tạo tệp trong trình giả lập android
- 28. Giả lập Android thay thế
- 29. Trình giả lập Android có thể nhận âm thanh không?
- 30. x86 Dịch vụ gỡ lỗi từ xa trên x64
hoạt động như một nét duyên dáng, thậm chí từ máy tính Windows 7 của tôi với cổng chuyển tiếp Putty SSH. Cảm ơn bạn. – gsbabil
@gsbabil Lệnh cho Putty SSH là gì? –
@JimMcKeeth: Dựa trên cấu hình mạng ở trên, mở Putty, đi tới Connection> SSH> Tunnels. Bây giờ thêm một mục với Source-port: 5556 và Destination: localhost: 5554. Lặp lại tương tự với Source-port: 5557 và Destination: localhost: 5555. Chúc mừng! – gsbabil