My đầu tiên SO trả lời, xin vui lòng được nhẹ nhàng;)
Nhưng các bước cá nhân mà nó là gì? (Nhiệm vụ gradle nếu có)
Vì vậy, nếu bạn muốn có một cái nhìn tổng quan cấp cao về những gì nhiệm vụ ConnectedAndroidTest phụ thuộc vào, chỉ cần chạy ./gradlew connectedAndroidTest
hoặc ./gradlew cAT
(không có tùy chọn -q
) sẽ đưa ra tên của mỗi nhiệm vụ đó cAT
phụ thuộc vào trước khi nó được thực hiện. Nhiệm vụ chính nó không thể có các nhiệm vụ khác bên trong nó, nhưng có thể phụ thuộc vào những nhiệm vụ khác trước đó.
Từ this câu trả lời, nhiệm vụ gradle build
thực sự là một cái gì đó liên quan đến java và không chịu trách nhiệm về việc xây dựng gói thử nghiệm. Thay vào đó, đó là nhiệm vụ assembleAndroidTest
xuất hiện ngay trước connectedAndroidTest
. Bạn đã đúng về số connectedAndroidTest
mặc dù, nó thực sự cài đặt và chạy gói thử nghiệm. Nhưng tôi sẽ đến một chút. Phần còn lại của câu trả lời của tôi là đi vào chi tiết hơn là cần thiết để sử dụng tác vụ một cách hiệu quả, nhưng rất hữu ích nếu bạn muốn hiểu cách nó hoạt động.
Một số nền
Giống như nhiều người khác Android gradle plug-in nhiệm vụ, connectedAndroidTest là thực sự đặt lại với nhau tại một số điểm trong giai đoạn thực hiện vì việc xây dựng các biến thể khác nhau (debug, phát hành, hương vị 1, hương vị 2 vv). Vì vậy, connectedAndroidTest
không có sẵn cho bạn trong giai đoạn cấu hình (khi hầu hết logic tập lệnh xây dựng của bạn được thực hiện). Thay vào đó, khi nó được tạo, nó được đặt là thuộc tính connectedInstrumentTest
(về cơ bản là một trường) của thuộc tính testVariants
trong đối tượng android
.
Như một ví dụ để làm rõ, nếu bạn muốn truy cập hiện nhiệm vụ này để vận dụng nó bằng cách nào đó (có thể thêm một Action
đến phần cuối của nó), bạn có thể làm một cái gì đó như thế này trong tập tin build.gradle
của bạn:
android {
testVariants.all { variant ->
variant.connectedInstrumentTest.doLast {
println "This will be executed right after our connectedInstrumentTest!"
println "The name of the test type: $connectedInstrumentTest.name"
println "The type of test $connectedInstrumentTest.class"
}
}
}
và sau đó chạy ./gradlew -q cAT
Vì vậy, ở đây, tôi thêm một hành động để kết thúc bất cứ nhiệm vụ đã được xây dựng và giao cho connectedInstrumentTest
bất động sản, mà được lồng khá sâu trong đối tượng android
. Tác vụ này có thể là connectedDebugAndroidTest
hoặc một nội dung tương tự.
Nhiệm vụ là gì?
Bây giờ, từ thuộc tính loại tôi đặt trong println cuối cùng, chúng ta có thể thấy rằng lớp của tác vụ thực sự là com.android.build.gradle.internal.tasks.DeviceProviderInstrumentTestTask_Decorated
.Thành thật mà nói, tôi không quá chắc chắn nơi mà _Decorated
một phần đến từ, nhưng một tìm kiếm google cho phần còn lại của tên lớp cung cấp cho chúng tôi với source code cho lớp cơ sở của nhiệm vụ.
Chính Action
của tác vụ được gọi là runTests()
và hiển thị cho bạn nhiều hay ít cách tác vụ hoàn thành công việc của nó. Nếu bạn làm theo mã nguồn xung quanh một chút, cuối cùng bạn sẽ thấy rằng lệnh adb pm install
sẽ được sử dụng để cài đặt gói ứng dụng.
Mặc dù tôi không thể tìm thấy nó hoàn toàn, tôi nghi ngờ rằng ở một nơi khác lệnh adb adb shell am instrument -w com.package.name/android.support.test.runner.AndroidJUnitRunner
đang được sử dụng để cuối cùng lái thử nghiệm.
Vì vậy, tôi hy vọng điều đó không quá khó hiểu - tôi đã học hầu hết điều này gần đây vì vậy một số điều có thể không phải là 100%. Tôi sẽ đề nghị làm việc thông qua các tài liệu gradle, đặc biệt là làm thế nào để tạo ra một plugin tùy chỉnh và một nhiệm vụ tùy chỉnh, và cũng có thể kiểm tra các tài liệu công cụ Android gradle plug-in.
Vậy 'connectionAndroidTest' thực sự chạy 'build' và' compile' là gì? –
'@IgorGanapolsky,' connectedAndroidTest' phụ thuộc trực tiếp vào 'assembleDebug' (lắp ráp gỡ lỗi APK) và' assembleDebugAndroidTest' (lắp ráp APK thử nghiệm). Hai nhiệm vụ đó biên dịch mọi thứ. Ngoài ra còn có 'installDebug' và' installDebugAndroidTest' nhiệm vụ, nhưng tôi không rõ ràng chính xác nơi họ đang ở trên cây phụ thuộc. Chúng phải xảy ra sau khi các nhiệm vụ 'lắp ráp *', và trước khi các thử nghiệm thực sự chạy (tất nhiên), nhưng tôi không chắc chắn chính xác vị trí của nó. – AutonomousApps