Chúng tôi đang thiết lập một máy chủ tích hợp liên tục để phát triển Android và chúng tôi đã nhanh chóng gặp phải sự cố về thiết bị của ADB .
Đối với hồ sơ, chúng tôi đã cố gắng rất nhiều sự kết hợp của adb kill-server
, adb start-server
, adb devices
, vv để vô ích.
Đáng buồn thay, tất cả những gì tôi tìm thấy trên internet là các biến thể của "rút phích cắm và cắm lại thiết bị", đây rõ ràng không phải là một giải pháp cho chúng tôi (chúng tôi không thể cho phép một người ngồi trước máy chủ CI để rút và cắm lại thiết bị trước đó mỗi bản dựng).
Để làm nền tảng, chúng tôi sử dụng Jenkins trên máy Mac, vì nó cũng chạy CI cho iOS của chúng tôi.
Trong khi tiếp cận vấn đề, tôi nghĩ rằng nếu ở cấp độ HĐH, thiết bị được tìm thấy, đó ít nhất là một sự khởi đầu. Thật vậy, chạy một lệnh như system_profiler SPUSBDataType
tìm thấy thành công thiết bị, bao gồm số sê-ri mà ADB báo cáo khi hoạt động chính xác.
Tôi đã thử một vài lệnh khá khập khiễng để "làm mới" tất cả hoạt động của USB, nhưng tôi không đi đâu cả. Không phải là bạn có thể gắn / ngắt kết nối thiết bị, nhưng thành thật mà nói tôi thậm chí không chắc vấn đề là ở đâu, tôi không biết đủ về các giao thức USB cấp thấp, chứ đừng nói đến máy Mac. Việc tôi giấu mã nguồn ADB là một cú đánh rất, rất dài.
Vì vậy, tại thời điểm này, tôi luôn chú ý đến một giải pháp cho phép chúng tôi chạy Android liên tục trên máy chủ CI của chúng tôi. Có thể là một vài lệnh trước mỗi công việc của Jenkins, vá ADB hoặc bất kỳ trò ảo thuật đen nào khác.