Screengrab হল Fastlane ইকোসিস্টেমের একটি ইউটিলিটি যা Android এবং iOS এ মোবাইল অ্যাপ এর জন্য স্ক্রিনশহট তৈরি স্বচালিত করে। ডাজন ডিভাইসে ম্যানুয়ালি স্ক্রিন স্যাইপ করার পরিবর্তে, ডেভেলপার একটি কমান্ড চালায়, এবং Screengrab স্বতন্ত্রভাবে সকল প্রয়োজনীয় স্ক্রিনের ছবি তুলে নেয়। Fastlane Docs, 2026 অনুসারে, টুলটি এককালে 30টি ভাষা এবং কনফিগরেশনে উল্লিখিত যে কোনো স্ক্রিন রিজোলিউশন সমর্থন করে।
মূল বিষয়
Screengrab হল Fastlane ইকোসিস্টেমের একটি উপাদান যা মোবাইল অ্যাপ এর জন্য স্বচালিত স্ক্রিনশহট তৈরির জন্য ডিজাইন করা হয়েছে। টুলটি 2015 সালে একটি সমস্যার সমাধান হিসেবে আবির্ভূত হয়েছিল: Google Play এবং App Store এ প্রকাশের জন্য প্রতি ভাষায় 4 থেকে 10টি স্ক্রিনশহট প্রয়োজন। 30টি ভাষার সমর্থনে, এটি হল 120–300টি ম্যানুয়াল ছবির সমান।
একজন ডেভেলপার ম্যানুয়ালি সিমুলেটর বা ডিভাইসে অ্যাপ চালু করে, কাঙ্ক্ষিত স্ক্রিনে যায়, স্ক্রিনশহট নেয়, কম্পিউটারে স্থানান্তর করে, ক্রপ করে এবং সঠিক ফল্ডারে সংরক্ষণ করে। প্রক্রিয়াটি প্রতিটি ভাষা এবং প্রতিটি ওরিয়েন্টেশনের জন্য পুনরাবৃত্ত হয়। Google Play Console অনুসারে, গড় অ্যাপ প্রতি দুই সপ্তাহে আপডেট হয়, যা স্ক্রিনশহটকে একটি নিয়মিত রৌটিনে পরিণত করে।
Screengrab সমস্যাটি মূলত সমাধান করে: ডেভেলপার UI ফ্রেমওয়ার্ক (Android এর জন্য Espresso, iOS এর জন্য XCTest) ব্যবহার করে পরীক্ষা পরিদৃশ্য বর্ণনা করে, এবং Screengrab স্বচালিতভাবে সব প্রয়োজনীয় ডিভাইস এবং ভাষায় সেগুলো চালায়। Fastlane প্রক্রিয়াটি সমন্বয় করে: অ্যাপ বেন্ধ করে, পরীক্ষা চালায়, স্ক্রিনশহট সংগ্রহ করে এবং প্রয়োজনীয় ফল্ডার গঠনে প্যাক করে।
ফলাফল — কয়েক ঘণ্টা ম্যানুয়াল কাজের পরিবর্তে 10–15 মিনিটের মধ্যে শত শত স্ক্রিনশহট। Google প্রতিটি গুরুত্বপূর্ণ UI পরিবর্তনের সঙ্গে স্ক্রিনশহট আপডেট করার পরামর্শ দেয়, এবং স্বচালন ছাড়া এই পরামর্শ প্রায়ই উপেক্ষা করা হয়।
Screengrab এর আর্কিটেকচার দুটি মূল উপাদানের চারপাশে গঠিত: ডিভাইসে একটি ক্লায়েন্ট (screengrab-lib) এবং একটি রানার যা পরীক্ষা চালানো এবং ফলাফল সংগ্রহ পরিচালনা করে। Android এ, এটি ইন্স্ট্রুমেন্টেড টেস্ট ফ্রেমওয়ার্ক ব্যবহার করে; iOS এ — XCTest।
Fastlane screengrab অ্যাকশনটি কল করে, যা Screengrabfile কনফিগরেশন ফাইল পড়ে। রানার screengrab-lib লাইব্রেরী সংযুক্ত করে পরীক্ষা APK বানায়, সংযুক্ত ডিভাইস বা ইমিউলেটরে ইনস্টল করে, এবং স্ক্রিনশহটের জন্য অ্যানোটেশন দিয়া চিহ্নিত UI পরীক্ষা চালায়।
# Fastfile — স্ক্রিনশহটের জন্য lane বর্ণনা
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 একটি ফল্ডার নিচনা তৈরি করে: ভাষা → ডিভাইস → স্ক্রিনশহট। গঠনটি Google Play Console এবং App Store Connect এর প্রয়োজনীয়তার সঙ্গে সম্পূর্ণ মেল খায়। App Storeএর প্রতিটি ডিভাইস প্রকারের জন্য কঠোরভাবে সংজ্ঞায়িত আকার প্রয়োজন, এবং Screengrab সপেসিফিকেশন অনুযায়ী ছবি তৈরি করে।
টুলটি সকল সংযুক্ত ডিভাইস এবং ইমিউলেটরে সমান্তরালে পরীক্ষা চালাতে পারে। Android ইমিউলেটর সক্রিয় না থাকলে স্বচালিতভাবে শুরু হয়। iOS এর জন্য, Screengrab Xcode সিমুলেটর ব্যবহার করে।
Screengrab ইনস্টলেশন দুটি অংশে বিভক্ত: প্রজেক্টে লাইব্রেরী যোগ করা এবং কনফিগরেশন ফাইল কনফিগার করা। Android এ, Espresso UI ফ্রেমওয়ার্ক এবং Fastlane রিপোজিটরি থেকে screengrab-lib লাইব্রেরী প্রয়োজন।
অ্যাপ মডিউলের build.gradle এ, screengrab-lib ডিপেন্ডেন্সি যোগ করা হয়। লাইব্রেরী ScreenCapturer ক্লাস প্রদান করে, যা কলের সময় স্ক্রিনশহট নেয়।
// build.gradle (module: app)
androidTestImplementation(
'tools.fastlane:screengrab-lib:2.1.0'
)
একটি UI পরীক্ষা প্রয়োজনীয় বিন্দুতে Screengrab.screenshot() অ্যানোটেশন দিয়া চিহ্নিত করা হয়। প্রতিটি কল বর্তমান স্ক্রিন ক্যাপচার করে এবং নির্দিষ্ট নামে সংরক্ষণ করে।
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")
// কর্ম: লগইন বাটনে ট্যাপ করুন
Screengrab.screenshot("login_screen")
}
}
Screengrabfile লঞ্চ প্যারামিটার সংরক্ষণ করে: ডিভাইস তালিকা, ভাষা, টাইমআউট এবং সংরক্ষণ পথ। ফাইলটি সাধারণত Fastfile এর পাশে fastlane ফল্ডারে অবস্থিত।
লোকালাইজেশন হল Screengrab এর চাবিকাঠামো বৈশিষ্ট্য, এবং প্রধান কারণ যেটি বেশিরভাগ ক্ষেত্রে বেছে নেওয়া হয়। টুলটি প্রতিটি পরীক্ষা রানের আগে স্বচালিতভাবে অ্যাপের ভাষা পরিবর্তন করে এবং সকল নির্দিষ্ট ভাষায় স্ক্রিনশহট নেয়।
ভাষাগুলো Screengrabfile এ locales প্যারামিটার ব্যবহার করে সেট করা হয়। প্রতিটি ভাষার জন্য, Screengrab সংশ্লিষ্ট রিসোর্স সহ অ্যাপটি পুনরায় ইনস্টল করে এবং পূর্ণ পরীক্ষা চক্র চালায়। Android এ LocaleTestRule স্বচালিতভাবে ডিভাইসের লোকেল পরিবর্তন করে।
# Screengrabfile
locales [
"ru-RU",
"en-US",
"de-DE",
"fr-FR",
"es-ES",
"ja-JP",
"ko-KR"
]
Screengrab নিম্নলিখিত স্কিম অনুসারে ডিরেক্টরি তৈরি করে: screenshots/{locale}/{device_name}/{screenshot_name}.png। এই গঠন সরাসরি Google Play এর প্রয়োজনীয়তার সঙ্গে মেল খায়, যা Fastlane deliver এর মাধ্যমে একটি কমান্ডে স্ক্রিনশহট আপলোড করার অনুমতি দেয়।
iOS এর জন্য, App Store Connect ভাষা অনুযায়ী একটি সমতল গঠনে স্ক্রিনশহট প্রত্যাশা করে। Fastlane প্রকাশনের সময় Screengrab নিচনাটি স্বচালিতভাবে প্রয়োজনীয় ফরম্যাটে রূপান্তর করে।
CI/CD সংযোজন Screengrab এর অন্যতম বৃহত সুবিধা। টুলটি কমান্ড লাইন থেকে চালে এবং গ্রাফিক্যাল ইন্টারফেসের প্রয়োজন নেই, যা এটিকে সার্ভার বাইল্ডের জন্য আদর্শ করে তোলে।
CI পরিবেশে, আপনাকে একটি Android ইমিউলেটর বা iOS সিমুলেটর শুরু করতে হবে, তারপর স্ক্রিনশহট সহ lane কল করতে হবে। GitHub Actions AVD ক্যাশিং সমর্থন করে, যা পুনরাবৃত্ত রান দ্রুত করে।
CI কনফিগরেশনে, মেমোরি এবং সময়ের সীমাবদ্ধতা বিবেচনা করা গুরুত্বপূর্ণ। Android ইমিউলেটরগুলোর প্রতি ডিভাইসে ন্যূনতম 2 GB RAM প্রয়োজন, এবং 7টি ভাষা এবং 2টি ডিভাইসে একটি পূর্ণ রানে 20–40 মিনিট লাগে।
# Fastfile — টাইমআউট সহ CI এর জন্য lane
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
Jenkins এর জন্য, bundle exec fastlane এর কলের সঙ্গে sh ধাপটি ব্যবহার করা হয়। ডেভেলপমেন্ট চক্র ধীম না করার জন্য রাতে বা প্রধান শাখায় মার্জ করার পর ট্রিগারের মাধ্যমে স্ক্রিনশহট চালানো সুপারিশ করা হয়।
Screengrab স্ক্রিনশহট স্বচালনের একমাত্র টুল নয়। বিকল্প বিক্ষিপ্ত পদ্ধতিতে বিদ্যমান: অন্তর্নির্মিত OS টুল, বাণিজ্যিক প্লেটফর্ম এবং কোডে স্ক্রিনশহট লাইব্রেরী।
| টুল | প্লেটফর্ম | লোকালাইজেশন | CI/CD |
|---|---|---|---|
| Screengrab | Android, iOS | স্বচালিত | নেটিভ |
| ADB Shell | Android | ম্যানুয়াল | স্ক্রিপ্টের মাধ্যমে |
| XCTest | iOS | ম্যানুয়াল | xcodebuild এর মাধ্যমে |
| Firebase Test Lab | Android | সেটআপ প্রয়োজন | হ্যাঁ |
| Appium | ক্রস-প্লেটফর্ম | ম্যানুয়াল | WebDriver এর মাধ্যমে |
ADB Shell সম্পূর্ণ নিয়ন্ত্রণ দেয়, কিন্তু প্রতিটি পরিদৃশ্যের জন্য স্ক্রিপ্ট লেখার প্রয়োজন। XCTest Xcode এ অন্তর্নির্মিত, কিন্তু স্বচালিতভাবে লোকালাইজেশন পরিচালনা করে না। Firebase Test Lab ক্লাউডে বাস্তব ডিভাইসে পরীক্ষা চালায়, যা সর্বোচ্চ কাভারেজ দেয়, কিন্তু প্রতি মিনিটে চার্জ করে।
Screengrab সংমিশ্রণের জন্য জয়ী হয়: Fastlane সম্পূর্ণ বাইল্ড জীবনচক্র পরিচালনা করে — কম্পিলেশন থেকে প্রকাশন পর্যন্ত। Google Play Fastlane deliver এর মাধ্যমে Screengrab ফল্ডার গঠন সরাসরি গ্রহণ করে।
Screengrab এর সাথে কাজ করার সময়, ডেভেলপাররা প্রায়ই কয়েকটি পুনরাবৃত্ত সমস্যার সমাগামী হন। সাধারণ ত্রুটি জানা প্রথম রানে ডিবাগিং সময় হ্রাস করে।
সমস্যাটি হয় যখন Screengrab স্ক্রিন রেন্ডারিং শেষ হবার আগে স্ক্রিনশহট নেয়। সমাধান screenshot() কলের আগে Thread.sleep() বিলম্ব যোগ করা বা অসিংক্রোনাস কাজের জন্য অপেক্ষা করতে Espresso এর IdlingResource ব্যবহার করা।
screengrab-lib এর ভার্সন Fastlane এর ভার্সনের সঙ্গে মিলতে হবে। Fastlane মাসিকভাবে আপডেট হয়, এবং পুরনো লাইব্রেরী নতুন কনফিগরেশন প্যারামিটার সমর্থন না-ও দিতে পারে। সমাধান Gemfile এবং gradle.properties এর মাধ্যমে ভার্সন সিংক করা।
5টি ডিভাইসে 30টি ভাষায় রান এক ঘণ্টার বেশি সময় নিতে পারে। সমাধান রান ভাগ করা: একটি সকল ভাষায় স্টোরের জন্য, অন্যটি দুইটি ভাষায় অভ্যন্তরীণ প্রয়োজনের জন্য। GitHub Actions সমান্তরাল রানের জন্য ম্যাট্রিক্স স্ট্রাটেজি ব্যবহারের অনুমতি দেয়।
Android ইমিউলেটরের হার্ডওয়ের ভার্চুয়াল প্রয়োজন, যা CI সার্ভারে সবসময় উপলব্ধ থাকে না। KVM সক্রিয় থাকতে হবে, অন্যথা ইমিউলেটর শুরু হবে না। সমাধান GPU এক্সেলারেশন ছাড়া x86 ইমেজ বা Firebase Test Lab ব্যবহার করা।
সাধারণ প্রশ্নাবলী
ADB বর্তমানে স্ক্রিনে যা দেখানো হচ্ছে তাই ক্যাপচার করে। Screengrab UI পরীক্ষার সঙ্গে সংযুক্ত, স্বচালিতভাবে ভাষা এবং ডিভাইস পরিবর্তন করে, এবং মানব হাস্তক্ষেপ ছাড়া একটি পরিদৃশ্য অনুযায়ী স্ক্রিনশহটের একটি সিরিজ নেয়।
না, Screengrab হল Fastlane ইকোসিস্টেমের একটি উপাদান এবং বাইল্ড, ইনস্টল এবং সমন্বয়ের জন্য এর অবকাঠামো ব্যবহার করে। screengrab-lib লাইব্রেরী আলাদাভাবে চালানো যায় না — অরকেস্ট্রেটর হিসেবে Fastlane প্রয়োজন।
একটি ডিভাইসে, 10টি ভাষায় একটি রানে 15–25 মিনিট লাগে। প্রতিটি ভাষার জন্য অ্যাপটি পুনরায় ইনস্টল এবং UI পরীক্ষার সম্পূর্ণ চক্র প্রয়োজন। একাধিক ডিভাইসে সমান্তরাল চালানো সময় আনুপাতিকভাবে হ্রাস করে।
হ্যাঁ, Screengrab XCTest এবং Xcode সিমুলেটরের মাধ্যমে iOS সমর্থন করে। কনফিগরেশন Android এর অনুরূপ: ভাষা এবং ডিভাইস যোগ করা হয়, এবং Swift এ UI পরীক্ষা XCTest ব্যবহার করে XCUIScreenshot এর মাধ্যমে ক্যাপচার সহ লেখা হয়।
Screengrab ইন্ক্রিমেন্টাল মোড সমর্থন করে না — প্রতিটি রান স্ক্রিনশহটের একটি সম্পূর্ণ সেট তৈরি করে। প্রধান রান থেকে বর্তমান ক্যাপচার অধিলেখন এড়াতে সীমিত ভাষা তালিকা সহ CI এর জন্য একটি আলাদা lane সেট করার পরামর্শ দেওয়া হয়।
সারাংশ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন