Làm thế nào để tôi dừng kiểm tra thiết bị Gradle chạy khỏi gỡ cài đặt ứng dụng?


8

Nếu tôi:

  • Tạo dự án Android Studio 3.5.1 hoàn toàn mới (mẫu Kotlin, API 21, mẫu "Hoạt động trống")
  • Chạy ứng dụng từ bên trong IDE
  • Xác nhận ứng dụng đã được cài đặt và có biểu tượng launcher
  • Chạy connectedAndroidDebugTesttác vụ Gradle (từ bên trong Android Studio hoặc thông qua gradlew)

Ứng dụng kết thúc được gỡ cài đặt khi chạy thử. Tôi nhận được hành vi đó ngay cả khi tôi thêm một testApplicationIdgiá trị defaultConfigđể có mã kiểm tra sử dụng ID ứng dụng khác.

Làm thế nào để tôi dừng hành vi đó? Làm cách nào tôi có thể chạy thử nghiệm cụ từ dòng lệnh mà không làm phiền cài đặt ứng dụng hiện có?


2
Tương tự như stackoverflow.com/questions/47670066/ này (họ không nhận được giải pháp, chỉ là một số cách giải quyết)
Tyler V

@TylerV: Vấn đề là, tôi thề là nó đã không làm điều này một năm trước. Tôi sử dụng một nhiệm vụ Gradle cho một báo cáo bảo hiểm thống nhất (hợp nhất đầu ra của các bài kiểm tra cụ và kiểm tra đơn vị). Tôi đã sử dụng nó cho một dự án một năm trước và tôi không nhớ đã gặp phải vấn đề này. Tôi vừa thực hiện báo cáo một lần nữa về một dự án mới và bây giờ tôi đang thấy vấn đề gỡ cài đặt. Có thể trí nhớ của tôi về những gì đã xảy ra một năm trước là mờ nhạt, nhưng việc gỡ cài đặt một ứng dụng yêu cầu xác thực là khó chịu, vì vậy tôi muốn nghĩ rằng tôi sẽ nhớ nó.
CommonsWare

Nếu tôi nhấp chuột phải vào một tệp thử nghiệm riêng lẻ và chạy nó theo cách đó, nó cũng sẽ không gỡ cài đặt ứng dụng khi hoàn tất (đôi khi tôi làm điều này để tải lên một số dữ liệu được điền trước trong ứng dụng). Đây có lẽ là một bước bổ sung trong nhiệm vụ thử nghiệm được kết nối ...
Tyler V

Câu trả lời:


2

Các connectedChecknhiệm vụ có loại DeviceProviderInstrumentTestTask. Đối với một thử nghiệm đơn giản chạy trên một thiết bị, nó sử dụng một SimpleTestRunner, lần lượt sử dụng một SimpleTestRunnableđể thực sự kiểm tra. Ở đây bạn tìm thấy một cấu trúc của

try {
    // connect to device
    // install all APKs
    // run tests
} catch(Exception e) {
    // handle error
} finally {
    // get test report
    // uninstall all APKs
    // disconnect from device
}

Tôi không hoàn toàn chắc chắn nếu tôi đã tìm thấy các triển khai gần đây nhất, nhưng hành vi chính xác này có từ vài năm trước. Vì vậy, tôi đoán bạn không thể đạt được những gì bạn yêu cầu.


3

Có thể thử chạy nó adbnhư thế này:

adb shell am instrument -w com.android.demo.app.tests/android.support.test.runner.AndroidJUnitRunner

Nó sẽ không gỡ cài đặt ứng dụng của bạn.

ở đây nó được mô tả chi tiết hơn.


1
Điều đó có thể thực tế trong một số tình huống. Trong trường hợp của tôi, nhiệm vụ mà tôi thực sự muốn thực hiện là createDebugCoverageReporttùy thuộc vào connectedAndroidDebugTest. Vì vậy, tôi không thể tránh connectedAndroidDebugTest, bằng cách nào đó viết lại createDebugCoverageReport.
CommonsWare

Trong liên kết đến tài liệu chính thức tôi đã cung cấp trong câu trả lời có một danh sách các am instrumenttùy chọn lệnh adb có thể bạn có thể sử dụng am instrument. Và bạn có thể chạy báo cáo bảo hiểm thông qua adb với sự trợ giúp của emmatùy chọn được đặt thành true. Ngoài ra, bạn có thể thay đổi tệp đích của báo cáo bảo hiểm với sự trợ giúp của coverageFile tùy chọn. Hy vọng nó giúp.
Pavlo Ostasha

"Và bạn có thể chạy báo cáo bảo hiểm thông qua adb với sự trợ giúp của tùy chọn emma được đặt thành đúng." - AFAIK, Android đã không sử dụng bảo hiểm emma trong nhiều năm, đã chuyển từ lâu sang Jacoco. Tôi cho rằng họ có thể giữ nguyên tên tùy chọn trong khi thay đổi cách triển khai ...
CommonsWare

Có lẽ - tôi không biết chi tiết. Nhưng có khả năng như vậy.
Pavlo Ostasha

2

Thiết bị sẽ cài đặt 2 APK: APK đang được thử nghiệm và APK có mã kiểm tra.

Nó cũng gỡ cài đặt cả hai APK trước khi nó cố gắng cài đặt những cái mới và tôi không biết liệu có thể ngăn chặn việc gỡ cài đặt hay không.

testApplicationIdchỉ thay đổi id ứng dụng cho APK với mã kiểm tra (thường giống với APK chính có ".test" được thêm vào) id ứng dụng của APK được kiểm tra vẫn giữ nguyên. Nhưng có thể tạo buildType riêng cho APK đang thử nghiệm (với cấu hình chính xác giống như loại xây dựng gỡ lỗi) và sử dụng loại đó.

Sau đó connectedAndroidXYZTestcó thể được sử dụng để chạy thử nghiệm (hoặc createXYZCoverageReport).


1
Tôi chấp nhận câu trả lời của tynn, vì đó là câu trả lời chính xác nhất. Tôi sẽ mang lại cho bạn tiền thưởng cho cách giải quyết an toàn nhất ... giả sử mã của bạn không thử làm bất cứ điều gì trong thời gian chạy dựa trên loại bản dựng. Nếu có, bạn sẽ cần nhớ ghi nhớ XYZkiểu xây dựng với mã đó.
CommonsWare

@CoommonsWare đó là chính xác. Tôi thường tránh kiểm tra trực tiếp loại xây dựng và sử dụng chỉ thị "buildConfigField" trong lớp để tạo cờ boolean (hoặc bất cứ điều gì phù hợp với vấn đề) trong BuildConfiglớp.
Josef Adamcik
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.