Screengrab là một tiện ích trong hệ sinh thái Fastlane để tự động hóa việc tạo ảnh chụp màn hình cho ứng dụng di động trên Android và iOS. Thay vì thủ công vuốt qua các màn hình trên hàng chục thiết bị, nhà phát triển chạy một lệnh và Screengrab độc lập chụp tất cả các màn hình cần thiết. Theo Fastlane Docs, 2026, công cụ này hỗ trợ đồng thời đến 30 ngôn ngữ và mọi độ phân giải màn hình được chỉ định trong cấu hình.
Điểm chính
Screengrab là một thành phần của hệ sinh thái Fastlane được thiết kế để tự động tạo ảnh chụp màn hình cho ứng dụng di động. Công cụ này xuất hiện vào năm 2015 như một giải pháp cho vấn đề: để xuất bản trên Google Play và App Store cần 4 đến 10 ảnh chụp cho mỗi ngôn ngữ. Với hỗ trợ 30 ngôn ngữ, đó là 120–300 ảnh chụp thủ công.
Nhà phát triển thủ công khởi chạy ứng dụng trên trình mô phỏng hoặc thiết bị, vuốt đến màn hình mong muốn, chụp ảnh màn hình, chuyển nó sang máy tính, cắt và lưu vào thư mục đúng. Quy trình này được lặp lại cho mỗi ngôn ngữ và mỗi hướng. Theo Google Play Console, ứng dụng trung bình được cập nhật hai tuần một lần, biến ảnh chụp màn hình thành một công việc thường xuyên.
Screengrab giải quyết vấn đề một cách triệt để: nhà phát triển mô tả kịch bản kiểm thử bằng framework UI (Espresso cho Android, XCTest cho iOS), và Screengrab tự động chạy chúng trên tất cả các thiết bị và ngôn ngữ cần thiết. Fastlane điều phối quy trình: biên dịch ứng dụng, chạy kiểm thử, thu thập ảnh chụp và đóng gói chúng vào cấu trúc thư mục cần thiết.
Kết quả là hàng trăm ảnh chụp màn hình trong 10–15 phút thay vì vài giờ làm việc thủ công. Google khuyến nghị cập nhật ảnh chụp sau mỗi thay đổi giao diện đáng kể, và nếu không có tự động hóa, lời khuyên này thường bị bỏ qua.
Kiến trúc của Screengrab được xây dựng xoay quanh hai thành phần chính: một client trên thiết bị (screengrab-lib) và một trình chạy quản lý việc thực thi kiểm thử và thu thập kết quả. Trên Android, nó sử dụng framework kiểm thử có cài cắm; trên iOS — XCTest.
Fastlane gọi hành động screengrab, đọc tệp cấu hình Screengrabfile. Trình chạy biên dịch APK kiểm thử với thư viện screengrab-lib được kết nối, cài đặt nó trên các thiết bị hoặc trình giả lập được kết nối và chạy các kiểm thử UI được đánh dấu bằng chú thích cho ảnh chụp màn hình.
# Fastfile — mô tả lane cho ảnh chụp màn hình
lane :screenshots do
capture_android_screenshots(
output_directory: "fastlane/metadata/android/screenshots",
locales: ["ru-RU", "en-US", "de-DE"],
devices: ["pixel_6", "pixel_tablet"],
use_tests_external_storage: true
)
end
Screengrab tạo một phân cấp thư mục: ngôn ngữ → thiết bị → ảnh chụp. Cấu trúc này hoàn toàn phù hợp với các yêu cầu của Google Play Console và App Store Connect. App Store yêu cầu kích thước được xác định nghiêm ngặt cho mỗi loại thiết bị, và Screengrab tạo ảnh chụp chính xác theo thông số kỹ thuật.
Công cụ có thể chạy kiểm thử song song trên tất cả các thiết bị và trình giả lập được kết nối. Trình giả lập Android tự động khởi động nếu chưa hoạt động. Đối với iOS, Screengrab sử dụng trình mô phỏng Xcode.
Việc cài đặt Screengrab gồm hai phần: thêm thư viện vào dự án và cấu hình tệp cấu hình. Trên Android, cần có framework UI Espresso và thư viện screengrab-lib từ kho lưu trữ Fastlane.
Trong build.gradle của module ứng dụng, phụ thuộc screengrab-lib được thêm vào. Thư viện cung cấp lớp ScreenCapturer, lớp này chụp ảnh màn hình tại thời điểm gọi.
// build.gradle (module: app)
androidTestImplementation(
'tools.fastlane:screengrab-lib:2.1.0'
)
Một kiểm thử UI được đánh dấu bằng chú thích Screengrab.screenshot() tại các điểm cần thiết. Mỗi lần gọi sẽ chụp màn hình hiện tại và lưu nó với tên đã chỉ định.
import tools.fastlane.screengrab.Screengrab
import tools.fastlane.screengrab.locale.LocaleTestRule
class ScreenshotTest {
@get:Rule
val localeTestRule = LocaleTestRule()
@Test
fun testTakeScreenshots() {
Screengrab.screenshot("main_screen")
// Hành động: nhấn nút đăng nhập
Screengrab.screenshot("login_screen")
}
}
Tệp Screengrabfile lưu trữ các tham số khởi chạy: danh sách thiết bị, ngôn ngữ, thời gian chờ và đường dẫn lưu. Tệp này thường nằm trong thư mục fastlane bên cạnh Fastfile.
Bản địa hóa là tính năng chính của Screengrab và lý do chính khiến nó được chọn nhiều nhất. Công cụ tự động chuyển đổi ngôn ngữ ứng dụng trước mỗi lần chạy kiểm thử và chụp ảnh ở tất cả các ngôn ngữ đã chỉ định.
Các ngôn ngữ được đặt trong Screengrabfile bằng tham số locales. Đối với mỗi ngôn ngữ, Screengrab cài đặt lại ứng dụng với các tài nguyên tương ứng và chạy toàn bộ chu kỳ kiểm thử. LocaleTestRule trên Android tự động chuyển đổi ngôn ngữ của thiết bị.
# Screengrabfile
locales [
"ru-RU",
"en-US",
"de-DE",
"fr-FR",
"es-ES",
"ja-JP",
"ko-KR"
]
Screengrab tạo các thư mục theo sơ đồ: screenshots/{locale}/{device_name}/{screenshot_name}.png. Cấu trúc này trực tiếp đáp ứng các yêu cầu của Google Play, cho phép tải lên ảnh chụp qua Fastlane deliver chỉ bằng một lệnh.
Đối với iOS, App Store Connect mong đợi ảnh chụp trong cấu trúc phẳng theo ngôn ngữ. Fastlane tự động chuyển đổi hệ thống phân cấp của Screengrab sang định dạng cần thiết khi xuất bản.
Tích hợp CI/CD là một trong những lợi thế chính của Screengrab. Công cụ chạy từ dòng lệnh và không yêu cầu giao diện đồ họa, khiến nó trở nên lý tưởng cho các bản dựng trên máy chủ.
Trong môi trường CI, bạn cần khởi động trình giả lập Android hoặc trình mô phỏng iOS, sau đó gọi lane với ảnh chụp. GitHub Actions hỗ trợ bộ nhớ đệm AVD, giúp tăng tốc các lần chạy lặp lại.
Trong cấu hình CI, điều quan trọng là phải xem xét các giới hạn về bộ nhớ và thời gian. Trình giả lập Android yêu cầu ít nhất 2 GB RAM cho mỗi thiết bị và một lần chạy đầy đủ trên 7 ngôn ngữ và 2 thiết bị mất 20–40 phút.
# Fastfile — lane cho CI với thời gian chờ
lane :ci_screenshots do
capture_android_screenshots(
locales: ["en-US", "ru-RU"],
devices: ["pixel_6"],
clear_previous_screenshots: true,
tests_timeout: "600",
output_directory: "screenshots/ci"
)
end
Đối với Jenkins, bước sh với lệnh gọi bundle exec fastlane được sử dụng. Nên chạy ảnh chụp vào ban đêm hoặc theo trình kích hoạt sau khi hợp nhất vào nhánh chính để không làm chậm chu kỳ phát triển.
Screengrab không phải là công cụ duy nhất để tự động hóa ảnh chụp màn hình. Có các lựa chọn thay thế với cách tiếp cận khác nhau: công cụ tích hợp sẵn trong hệ điều hành, nền tảng thương mại và thư viện chụp ảnh trong mã nguồn.
| Công cụ | Nền tảng | Bản địa hóa | CI/CD |
|---|---|---|---|
| Screengrab | Android, iOS | Tự động | Nguyên bản |
| ADB Shell | Android | Thủ công | Qua script |
| XCTest | iOS | Thủ công | Qua xcodebuild |
| Firebase Test Lab | Android | Cần cấu hình | Có |
| Appium | Đa nền tảng | Thủ công | Qua WebDriver |
ADB Shell cung cấp quyền kiểm soát hoàn toàn nhưng yêu cầu viết script cho mỗi kịch bản. XCTest được tích hợp trong Xcode nhưng không tự động quản lý bản địa hóa. Firebase Test Lab chạy kiểm thử trên các thiết bị thật trong đám mây, cung cấp độ phủ sóng tối đa nhưng tính phí theo phút.
Screengrab thắng nhờ sự kết hợp: Fastlane quản lý toàn bộ vòng đời bản dựng — từ biên dịch đến xuất bản. Google Play chấp nhận trực tiếp cấu trúc thư mục của Screengrab qua Fastlane deliver.
Khi làm việc với Screengrab, các nhà phát triển thường gặp một số vấn đề lặp lại. Biết được các lỗi thường gặp sẽ giúp giảm thời gian gỡ lỗi trong lần chạy đầu tiên.
Vấn đề xảy ra khi Screengrab chụp ảnh trước khi kết thúc quá trình kết xuất màn hình. Giải pháp là thêm độ trễ Thread.sleep() trước khi gọi screenshot() hoặc sử dụng IdlingResource của Espresso để chờ các thao tác bất đồng bộ.
Phiên bản của screengrab-lib phải khớp với phiên bản của Fastlane. Fastlane được cập nhật hàng tháng và thư viện cũ có thể không hỗ trợ các tham số cấu hình mới. Giải pháp là đồng bộ hóa các phiên bản qua Gemfile và gradle.properties.
Chạy trên 30 ngôn ngữ trên 5 thiết bị có thể mất hơn một giờ. Giải pháp là chia các lần chạy: một cho cửa hàng trên tất cả các ngôn ngữ, một cho nhu cầu nội bộ trên hai ngôn ngữ. GitHub Actions cho phép sử dụng các chiến lược ma trận cho các lần chạy song song.
Trình giả lập Android yêu cầu ảo hóa phần cứng, không phải lúc nào cũng có sẵn trên các máy chủ CI. KVM phải được bật, nếu không trình giả lập sẽ không khởi động được. Giải pháp là sử dụng hình ảnh x86 mà không có tăng tốc GPU hoặc Firebase Test Lab.
Câu hỏi thường gặp
ADB chụp những gì đang hiển thị trên màn hình ở thời điểm hiện tại. Screengrab tích hợp với các kiểm thử UI, tự động chuyển đổi ngôn ngữ và thiết bị, và chụp một loạt ảnh theo kịch bản mà không cần sự can thiệp của con người.
Không, Screengrab là một thành phần của hệ sinh thái Fastlane và sử dụng cơ sở hạ tầng của nó để biên dịch, cài đặt và điều phối. Riêng thư viện screengrab-lib không thể chạy độc lập — cần có Fastlane làm bộ điều phối.
Trên một thiết bị, một lần chạy trên 10 ngôn ngữ mất 15–25 phút. Mỗi ngôn ngữ yêu cầu cài đặt lại ứng dụng và một chu kỳ kiểm thử UI đầy đủ. Chạy song song trên nhiều thiết bị sẽ giảm thời gian tương ứng.
Có, Screengrab hỗ trợ iOS qua XCTest và các trình mô phỏng Xcode. Cấu hình tương tự Android: thêm ngôn ngữ và thiết bị, các kiểm thử UI trong Swift được viết bằng XCTest với ảnh chụp qua XCUIScreenshot.
Screengrab không hỗ trợ chế độ tăng dần — mỗi lần chạy tạo một bộ ảnh chụp đầy đủ. Nên thiết lập một lane riêng cho CI với danh sách ngôn ngữ giới hạn để tránh ghi đè các ảnh chụp hiện có từ lần chạy chính.
Tổng kết
Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay
IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.
Đọc thêm