Spectatio, ओपन सोर्स टेस्ट फ़्रेमवर्क है. इसे असली और वर्चुअल डिवाइसों पर Android Automotive OS (AAOS) की जांच करने के लिए बनाया गया है. Spectatio, ऑटोमोटिव डिवाइस पर ऐप्लिकेशन की जांच करने के लिए एपीआई उपलब्ध कराता है. यह एक ऐसा समाधान है जिसे बढ़ाया और घटाया जा सकता है. इसका इस्तेमाल, AAOS और उसके ऐप्लिकेशन की परफ़ॉर्मेंस और क्षमता की पुष्टि करने के लिए किया जाता है.
हाई-लेवल डिज़ाइन
Spectatio फ़्रेमवर्क को, AAOS के यूज़र इंटरफ़ेस (यूआई) के अलग-अलग वर्शन के लिए अडजस्ट किया जा सकता है. साथ ही, इसे बढ़ाया भी जा सकता है. इसका इस्तेमाल, डिवाइस के हार्डवेयर, एम्युलेटर, और वर्चुअलाइज़्ड एनवायरमेंट पर AAOS की परफ़ॉर्मेंस और क्षमता की जांच करने के लिए किया जाता है.
नीचे दी गई इमेज में, Spectatio फ़्रेमवर्क का हाई-लेवल डिज़ाइन दिखाया गया है.
पहली इमेज. Spectatio फ़्रेमवर्क का हाई-लेवल डिज़ाइन.
Spectatio फ़्रेमवर्क, यूज़र इंटरफ़ेस (यूआई) ऑटोमेटर पर बना है. यह AAOS पर, उपयोगकर्ता और सिस्टम ऐप्लिकेशन के साथ इंटरैक्ट करने वाले यूज़र इंटरफ़ेस (यूआई) टेस्ट बनाने के लिए, एपीआई का एक सेट उपलब्ध कराता है. ऑटोमोटिव टेस्ट, जांच के लिए Spectatio फ़्रेमवर्क से मिले एपीआई का इस्तेमाल करते हैं. इससे ये टेस्ट, जांच किए जा रहे डिवाइस (डीयूटी) से अलग हो जाते हैं. साथ ही, अगर अलग-अलग डिवाइसों की जांच की जा सकती है, तो उन्हें टेस्ट करने के लिए इन टेस्ट को बढ़ाया जा सकता है.
पहली इमेज से पता चलता है कि Spectatio फ़्रेमवर्क को, रेफ़रंस ऐप्लिकेशन के आधार पर मॉड्यूलर बनाया गया है. जैसे, डायलर, मेडिसेंटर, और सेटिंग. इसके लिए, ऐप्लिकेशन के हिसाब से इंटरफ़ेस और हेल्पर का इस्तेमाल किया जाता है. इससे नए ऐप्लिकेशन के लिए इसे आसानी से बढ़ाया जा सकता है. Spectatio फ़्रेमवर्क, सामान्य स्टैंडर्ड और यूटिलिटी हेल्पर क्लास का फिर से इस्तेमाल करता है. स्टैंडर्ड हेल्पर क्लास, ऐप्लिकेशन के सभी हेल्पर फ़ंक्शन के लिए पैरंट क्लास है. यह ऐसे स्टैंडर्ड फ़ंक्शन उपलब्ध कराता है जो डिवाइस के हिसाब से अलग-अलग होते हैं या सभी ऐप्लिकेशन पर लागू होते हैं. यूटिलिटी हेल्पर क्लास, डिवाइस से फ़ाइलें पढ़ने या लिखने जैसी यूटिलिटी उपलब्ध कराती हैं.
आर्किटेक्चर
Spectatio फ़्रेमवर्क, यूज़र इंटरफ़ेस (यूआई) टेस्ट बनाने के लिए, एपीआई का एक सेट उपलब्ध कराता है. इसके लिए, यह ऐप्लिकेशन के हिसाब से इंटरफ़ेस और हेल्पर लागू करता है. साथ ही, मौजूदा स्टैंडर्ड हेल्पर क्लास को बढ़ाता है और यूटिलिटी हेल्पर क्लास को इंपोर्ट करता है.
दूसरी इमेज में, Spectatio फ़्रेमवर्क का हाई-लेवल आर्किटेक्चर और किसी ऐप्लिकेशन की जांच करने के लिए एपीआई लागू करने में शामिल सभी इकाइयां दिखाई गई हैं.
दूसरी इमेज. Spectatio फ़्रेमवर्क का हाई-लेवल आर्किटेक्चर.
ऐप्लिकेशन हेल्पर इंटरफ़ेस, ऐप्लिकेशन हेल्पर को लागू करने के लिए एक ब्लूप्रिंट उपलब्ध कराता है. इसमें, ऐप्लिकेशन की जांच करने के लिए ज़रूरी अलग-अलग हेल्पर फ़ंक्शन शामिल होते हैं. हर ऐप्लिकेशन का अपना इंटरफ़ेस होता है. जैसे, IAutoSettingHelper
और IAutoDialHelper.
ज़्यादा जानकारी और इंटरफ़ेस फ़ंक्शन की सूची के लिए, AOSP पर ऐप्लिकेशन हेल्पर इंटरफ़ेस फ़ंक्शन देखें.
स्टैंडर्ड हेल्पर क्लास में, स्टैंडर्ड एट्रिब्यूट और फ़ंक्शन शामिल होते हैं. ये एट्रिब्यूट और फ़ंक्शन, डिवाइस सेटअप करने के लिए ज़रूरी होते हैं. हालांकि, ये किसी खास ऐप्लिकेशन के लिए नहीं होते. जैसे, pressHome और scroll. स्टैंडर्ड हेल्पर क्लास को AbstractAutoStandardAppHelper.java में तय किया जाता है.
फ़्रेमवर्क, यूटिलिटी हेल्पर क्लास का इस्तेमाल करता है. उदाहरण
के लिए, AutoJsonUtility.java एक
यूटिलिटी क्लास है. यह डिवाइस के दिए गए JSON कॉन्फ़िगरेशन फ़ाइल को लोड करती है और रनटाइम में फ़्रेमवर्क के कॉन्फ़िगरेशन को अपडेट
करती है.
ऐप्लिकेशन हेल्पर लागू करने वाला मॉड्यूल, Spectatio फ़्रेमवर्क का मुख्य हिस्सा है. इसमें, ऐप्लिकेशन हेल्पर इंटरफ़ेस में तय किए गए हेल्पर फ़ंक्शन को लागू करने की जानकारी होती है. ये फ़ंक्शन, ऑटोमोटिव डिवाइस पर ऐप्लिकेशन की जांच करने के लिए ज़रूरी होते हैं. हर ऐप्लिकेशन का अपना वर्शन होता है. जैसे, SettingHelperImpl
और
DialHelperImpl,
इनका इस्तेमाल
ऑटोमोटिव टेस्ट में ऐप्लिकेशन की जांच करने के लिए किया जाता है. ज़्यादा जानकारी और वर्bsp;ऐप्लिकेशन हेल्पर लागू करने के फ़ंक्शन देखें.
ऑटोमोटिव टेस्ट
ऐप्लिकेशन से जुड़ी अलग-अलग कार्रवाइयों की जांच करने के लिए, ऐप्लिकेशन हेल्पर लागू करने के फ़ंक्शन का इस्तेमाल करते हैं. ऐप्लिकेशन हेल्पर लागू करने के फ़ंक्शन को ऐक्सेस करने के लिए, HelperAccessor क्लास
का इस्तेमाल करें.
यहां दिए गए कोड में, ऑटोमोटिव टेस्ट के सेटअप, क्लीनअप, और एक्ज़ीक्यूशन के बारे में बताया गया है.
@RunWith(AndroidJUnit4.class)
public class AutoApplicationTest {
static HelperAccessor<IAutoApplicationHelper> autoApplicationHelper =
new HelperAccessor<>(IAutoApplicationHelper.class);
public AutoApplicationTest() {
// constructor
// Initialize any attributes that are required for the test execution
}
@Before
public void beforeTest() {
// Initial setup before each test
// For example - open the app
autoApplicationHelper.open();
}
@After
public void afterTest() {
// Cleanup after each test.
// For example - exit the app
autoApplicationHelper.exit();
}
@Test
public void testApplicationFeature() {
// Test
// For example - Test if app is open
assertTrue("Application is not open.", autoApplicationHelper.isOpen());
}
}
पसंद के मुताबिक बनाएं
Spectatio फ़्रेमवर्क, डिवाइस के यूज़र इंटरफ़ेस (यूआई) से अलग होता है. इसलिए, अलग-अलग यूज़र इंटरफ़ेस (यूआई) और हार्डवेयर वाले डिवाइसों की जांच करने के लिए, इसे बढ़ाया या घटाया जा सकता है. इस सुविधा को पाने के लिए, Spectatio, रेफ़रंस डिवाइस के आधार पर डिवाइस के डिफ़ॉल्ट कॉन्फ़िगरेशन का इस्तेमाल करता है. डिवाइस के डिफ़ॉल्ट कॉन्फ़िगरेशन के अलावा, अन्य कॉन्फ़िगरेशन के लिए, फ़्रेमवर्क रनटाइम में JSON कॉन्फ़िगरेशन फ़ाइल का इस्तेमाल करता है. इससे डिवाइस के लिए, यूज़र इंटरफ़ेस (यूआई) में मनचाहे बदलाव किए जा सकते हैं. JSON कॉन्फ़िगरेशन फ़ाइल, TEXT, DESCRIPTION, और RESOURCE_ID जैसे यूज़र इंटरफ़ेस (यूआई) एलिमेंट के साथ-साथ path सेटिंग को भी सपोर्ट करती है. इसमें, डीयूटी के लिए यूज़र इंटरफ़ेस (यूआई) में किए गए बदलावों की जानकारी ही होनी चाहिए. यूज़र इंटरफ़ेस (यूआई) के बाकी एलिमेंट, फ़्रेमवर्क में दी गई डिफ़ॉल्ट कॉन्फ़िगरेशन वैल्यू का इस्तेमाल करते हैं.
डिवाइस के डिफ़ॉल्ट कॉन्फ़िगरेशन
यहां दी गई JSON कॉन्फ़िगरेशन फ़ाइल के सैंपल में, डिवाइस के उपलब्ध कॉन्फ़िगरेशन और उनकी डिफ़ॉल्ट वैल्यू दिखाई गई हैं.
JSON कॉन्फ़िगरेशन फ़ाइल का सैंपल देखने के लिए, यहां क्लिक करें
{ "SETTINGS": { "APPLICATION_CONFIG": { "SETTINGS_TITLE_TEXT": "Settings", "SETTINGS_PACKAGE": "com.android.car.settings", "SETTINGS_RRO_PACKAGE": "com.android.car.settings.googlecarui.rro", "OPEN_SETTINGS_COMMAND": "am start -a android.settings.SETTINGS", "OPEN_QUICK_SETTINGS_COMMAND": "am start -n com.android.car.settings/com.android.car.settings.common.CarSettingActivity" }, "QUICK_SETTINGS": { "OPEN_MORE_SETTINGS": { "TYPE": "RESOURCE_ID", "VALUE": "toolbar_menu_item_1", "PACKAGE": "com.android.car.settings" }, "NIGHT_MODE": { "TYPE": "TEXT", "VALUE": "Night mode" } }, "DISPLAY": { "PATH": "Settings > Display", "OPTIONS": [ "Brightness level" ], "BRIGHTNESS_LEVEL": { "TYPE": "RESOURCE_ID", "VALUE": "seekbar", "PACKAGE": "com.android.car.settings" } }, "SOUND": { "PATH": "Settings > Sound", "OPTIONS": [ "Media volume", "Alarm volume" ] }, "NETWORK_AND_INTERNET": { "PATH": "Settings > Network & internet", "OPTIONS": [ ], "TOGGLE_WIFI": { "TYPE": "RESOURCE_ID", "VALUE": "master_switch", "PACKAGE": "com.android.car.settings" } }, "BLUETOOTH": { "PATH": "Settings > Bluetooth", "OPTIONS": [ ], "TOGGLE_BLUETOOTH": { "TYPE": "RESOURCE_ID", "VALUE": "car_ui_toolbar_menu_item_switch", "PACKAGE": "com.android.car.settings" } }, "APPS_AND_NOTIFICATIONS": { "PATH": "Settings > Apps & notifications", "OPTIONS": [ ], "SHOW_ALL_APPS": { "TYPE": "TEXT", "VALUE": "Show all apps" }, "ENABLE_DISABLE_BUTTON": { "TYPE": "RESOURCE_ID", "VALUE": "car_ui_toolbar_menu_item_text", "PACKAGE": "com.android.car.settings" }, "DISABLE_BUTTON_TEXT": { "TYPE": "TEXT", "VALUE": "Disable" }, "ENABLE_BUTTON_TEXT": { "TYPE": "TEXT", "VALUE": "Enable" }, "DISABLE_APP_BUTTON": { "TYPE": "TEXT", "VALUE": "DISABLE APP" }, "FORCE_STOP_BUTTON": { "TYPE": "TEXT", "VALUE": "Force stop" }, "OK_BUTTON": { "TYPE": "TEXT", "VALUE": "OK" }, "PERMISSIONS_MENU": { "TYPE": "TEXT", "VALUE": "Permissions" }, "ALLOW_BUTTON": { "TYPE": "TEXT", "VALUE": "Allow" }, "DENY_BUTTON": { "TYPE": "TEXT", "VALUE": "Deny" }, "DENY_ANYWAY_BUTTON": { "TYPE": "TEXT", "VALUE": "Deny anyway" } }, "DATE_AND_TIME": { "PATH": "Settings > Date & time", "OPTIONS": [ "Automatic date & time", "Automatic time zone" ], "AUTOMATIC_DATE_AND_TIME": { "TYPE": "TEXT", "VALUE": "Automatic date & time" }, "AUTOMATIC_TIME_ZONE": { "TYPE": "TEXT", "VALUE": "Automatic time zone" }, "SET_DATE": { "TYPE": "TEXT", "VALUE": "Set date" }, "SET_TIME": { "TYPE": "TEXT", "VALUE": "Set time" }, "SELECT_TIME_ZONE": { "TYPE": "TEXT", "VALUE": "Select time zone" }, "USE_24_HOUR_FORMAT": { "TYPE": "TEXT", "VALUE": "Use 24-hour format" }, "OK_BUTTON": { "TYPE": "RESOURCE_ID", "VALUE": "toolbar_menu_item_0", "PACKAGE": "com.android.car.settings" }, "NUMBER_PICKER_WIDGET": { "TYPE": "CLASS", "VALUE": "android.widget.NumberPicker" }, "EDIT_TEXT_WIDGET": { "TYPE": "CLASS", "VALUE": "android.widget.EditText" } }, "USERS": { "PATH": "Settings > Users", "OPTIONS": [ "Guest" ] }, "ACCOUNTS": { "PATH": "Settings > Accounts", "OPTIONS": [ "Automatically sync data" ], "ADD_ACCOUNT": { "TYPE": "TEXT", "VALUE": "ADD ACCOUNT" }, "ADD_GOOGLE_ACCOUNT": { "TYPE": "TEXT", "VALUE": "Google" }, "SIGN_IN_ON_CAR_SCREEN": { "TYPE": "TEXT", "VALUE": "Sign in on car screen" }, "GOOGLE_SIGN_IN_SCREEN": { "TYPE": "TEXT", "VALUE": "Sign in to your Google Account" }, "ENTER_EMAIL": { "TYPE": "CLASS", "VALUE": "android.widget.EditText" }, "ENTER_PASSWORD": { "TYPE": "CLASS", "VALUE": "android.widget.EditText" }, "NEXT_BUTTON": { "TYPE": "TEXT", "VALUE": "Next" }, "DONE_BUTTON": { "TYPE": "TEXT", "VALUE": "Done" }, "REMOVE_BUTTON": { "TYPE": "TEXT", "VALUE": "Remove" }, "REMOVE_ACCOUNT_BUTTON": { "TYPE": "TEXT", "VALUE": "Remove Account" } }, "SYSTEM": { "PATH": "Settings > System", "OPTIONS": [ "About", "Legal information" ], "ABOUT_MENU": { "TYPE": "TEXT", "VALUE": "About" }, "RESET_OPTIONS_MENU": { "TYPE": "TEXT", "VALUE": "Reset options" }, "LANGUAGES_AND_INPUT_MENU": { "TYPE": "TEXT", "VALUE": "Languages & input" }, "DEVICE_MODEL": { "TYPE": "TEXT", "VALUE": "Model" }, "ANDROID_VERSION": { "TYPE": "TEXT", "VALUE": "Android version" }, "ANDROID_SECURITY_PATCH_LEVEL": { "TYPE": "TEXT", "VALUE": "Android security patch level" }, "KERNEL_VERSION": { "TYPE": "TEXT", "VALUE": "Kernel version" }, "BUILD_NUMBER": { "TYPE": "TEXT", "VALUE": "Build number" }, "RECYCLER_VIEW_WIDGET": { "TYPE": "CLASS", "VALUE": "androidx.recyclerview.widget.RecyclerView" }, "RESET_NETWORK": { "TYPE": "TEXT", "VALUE": "Reset network" }, "RESET_SETTINGS": { "TYPE": "TEXT", "VALUE": "RESET SETTINGS" }, "RESET_APP_PREFERENCES": { "TYPE": "TEXT", "VALUE": "Reset app preferences" }, "RESET_APPS": { "TYPE": "TEXT", "VALUE": "RESET APPS" }, "LANGUAGES_MENU": { "TYPE": "TEXT", "VALUE": "Languages" }, "LANGUAGES_MENU_IN_SELECTED_LANGUAGE": { "TYPE": "TEXT", "VALUE": "Idiomas" } }, "SECURITY": { "PATH": "Settings > Security", "OPTIONS": [ ], "TITLE": { "TYPE": "RESOURCE_ID", "VALUE": "car_ui_toolbar_title", "PACKAGE": "com.android.car.settings.googlecarui.rro" }, "CHOOSE_LOCK_TYPE": { "TYPE": "TEXT", "VALUE": "Choose a lock type" }, "LOCK_TYPE_PASSWORD": { "TYPE": "TEXT", "VALUE": "Password" }, "LOCK_TYPE_PIN": { "TYPE": "TEXT", "VALUE": "PIN" }, "LOCK_TYPE_NONE": { "TYPE": "TEXT", "VALUE": "None" }, "CONTINUE_BUTTON": { "TYPE": "TEXT", "VALUE": "Continue" }, "CONFIRM_BUTTON": { "TYPE": "TEXT", "VALUE": "Confirm" }, "ENTER_PASSWORD": { "TYPE": "CLASS", "VALUE": "android.widget.EditText" }, "PIN_PAD": { "TYPE": "RESOURCE_ID", "VALUE": "pin_pad", "PACKAGE": "com.android.car.settings" }, "ENTER_PIN_BUTTON": { "TYPE": "RESOURCE_ID", "VALUE": "key_enter", "PACKAGE": "com.android.car.settings" }, "REMOVE_BUTTON": { "TYPE": "TEXT", "VALUE": "Remove" } } }, "PHONE": { "APPLICATION_CONFIG": { "DIAL_PACKAGE": "com.android.car.dialer", "PHONE_ACTIVITY": "com.android.car.dialer/.ui.TelecomActivity", "OPEN_DIAL_PAD_COMMAND": "am start -a android.intent.action.DIAL" }, "IN_CALL_VIEW": { "DIALED_CONTACT_TITLE": { "TYPE": "RESOURCE_ID", "VALUE": "user_profile_title", "PACKAGE": "com.android.car.dialer" }, "DIALED_CONTACT_NUMBER": { "TYPE": "RESOURCE_ID", "VALUE": "user_profile_phone_number", "PACKAGE": "com.android.car.dialer" }, "END_CALL": { "TYPE": "RESOURCE_ID", "VALUE": "end_call_button", "PACKAGE": "com.android.car.dialer" }, "MUTE_CALL": { "TYPE": "RESOURCE_ID", "VALUE": "mute_button", "PACKAGE": "com.android.car.dialer" }, "SWITCH_TO_DIAL_PAD": { "TYPE": "RESOURCE_ID", "VALUE": "toggle_dialpad_button", "PACKAGE": "com.android.car.dialer" }, "CHANGE_VOICE_CHANNEL": { "TYPE": "RESOURCE_ID", "VALUE": "voice_channel_view", "PACKAGE": "com.android.car.dialer" }, "VOICE_CHANNEL_CAR": { "TYPE": "TEXT", "VALUE": "Car speakers" }, "VOICE_CHANNEL_PHONE": { "TYPE": "TEXT", "VALUE": "Phone" } }, "DIAL_PAD_VIEW": { "DIAL_PAD_MENU": { "TYPE": "TEXT", "VALUE": "Dial Pad" }, "DIAL_PAD_FRAGMENT": { "TYPE": "RESOURCE_ID", "VALUE": "dialpad_fragment", "PACKAGE": "com.android.car.dialer" }, "DIALED_NUMBER": { "TYPE": "RESOURCE_ID", "VALUE": "title", "PACKAGE": "com.android.car.dialer" }, "MAKE_CALL": { "TYPE": "RESOURCE_ID", "VALUE": "call_button", "PACKAGE": "com.android.car.dialer" }, "DELETE_NUMBER": { "TYPE": "RESOURCE_ID", "VALUE": "delete_button", "PACKAGE": "com.android.car.dialer" } }, "CONTACTS_VIEW": { "CONTACTS_MENU": { "TYPE": "TEXT", "VALUE": "Contacts" }, "CONTACT_INFO": { "TYPE": "RESOURCE_ID", "VALUE": "call_action_id", "PACKAGE": "com.android.car.dialer" }, "CONTACT_NAME": { "TYPE": "RESOURCE_ID", "VALUE": "title", "PACKAGE": "com.android.car.dialer" }, "CONTACT_DETAIL": { "TYPE": "RESOURCE_ID", "VALUE": "show_contact_detail_id", "PACKAGE": "com.android.car.dialer" }, "ADD_CONTACT_TO_FAVORITE": { "TYPE": "RESOURCE_ID", "VALUE": "contact_details_favorite_button", "PACKAGE": "com.android.car.dialer" }, "SEARCH_CONTACT": { "TYPE": "RESOURCE_ID", "VALUE": "menu_item_search", "PACKAGE": "com.android.car.dialer" }, "CONTACT_SEARCH_BAR": { "TYPE": "RESOURCE_ID", "VALUE": "car_ui_toolbar_search_bar", "PACKAGE": "com.android.car.dialer" }, "SEARCH_RESULT": { "TYPE": "RESOURCE_ID", "VALUE": "contact_name", "PACKAGE": "com.android.car.dialer" }, "CONTACT_SETTINGS": { "TYPE": "RESOURCE_ID", "VALUE": "menu_item_setting", "PACKAGE": "com.android.car.dialer" }, "CONTACT_ORDER": { "TYPE": "TEXT", "VALUE": "Contact order" }, "SORT_BY_FIRST_NAME": { "TYPE": "TEXT", "VALUE": "First name" }, "SORT_BY_LAST_NAME": { "TYPE": "TEXT", "VALUE": "Last Name" }, "CONTACT_TYPE_WORK": { "TYPE": "TEXT", "VALUE": "Work" }, "CONTACT_TYPE_MOBILE": { "TYPE": "TEXT", "VALUE": "Mobile" }, "CONTACT_TYPE_HOME": { "TYPE": "TEXT", "VALUE": "Home" } }, "CALL_HISTORY_VIEW": { "CALL_HISTORY_MENU": { "TYPE": "TEXT", "VALUE": "Recents" }, "CALL_HISTORY_INFO": { "TYPE": "RESOURCE_ID", "VALUE": "call_action_id", "PACKAGE": "com.android.car.dialer" } }, "FAVORITES_VIEW": { "FAVORITES_MENU": { "TYPE": "TEXT", "VALUE": "Favorites" } } }, "NOTIFICATIONS": { "APPLICATION_CONFIG": { "OPEN_NOTIFICATIONS_COMMAND": "service call statusbar 1" }, "EXPANDED_NOTIFICATIONS_SCREEN": { "NOTIFICATION_VIEW": { "TYPE": "RESOURCE_ID", "VALUE": "notification_view", "PACKAGE": "com.android.systemui" }, "CLEAR_ALL_BUTTON": { "TYPE": "RESOURCE_ID", "VALUE": "clear_all_button", "PACKAGE": "com.android.systemui" }, "STATUS_BAR": { "TYPE": "RESOURCE_ID", "VALUE": "car_top_navigation_bar_container", "PACKAGE": "com.android.systemui" }, "APP_ICON": { "TYPE": "RESOURCE_ID", "VALUE": "app_icon", "PACKAGE": "com.android.systemui" }, "APP_NAME": { "TYPE": "RESOURCE_ID", "VALUE": "header_text", "PACKAGE": "com.android.systemui" }, "NOTIFICATION_TITLE": { "TYPE": "RESOURCE_ID", "VALUE": "notification_body_title", "PACKAGE": "com.android.systemui" }, "NOTIFICATION_BODY": { "TYPE": "RESOURCE_ID", "VALUE": "notification_body_content", "PACKAGE": "com.android.systemui" }, "CARD_VIEW": { "TYPE": "RESOURCE_ID", "VALUE": "card_view", "PACKAGE": "com.android.systemui" } } }, "MEDIA_CENTER": { "APPLICATION_CONFIG": { "MEDIA_CENTER_PACKAGE": "com.android.car.media", "MEDIA_ACTIVITY": "com.android.bluetooth/com.android.bluetooth.avrcpcontroller.BluetoothMediaBrowserService" }, "MEDIA_CENTER_SCREEN": { "PLAY_PAUSE_BUTTON": { "TYPE": "RESOURCE_ID", "VALUE": "play_pause_stop", "PACKAGE": "com.android.car.media" }, "NEXT_BUTTON": { "TYPE": "RESOURCE_ID", "VALUE": "skip_next", "PACKAGE": "com.android.car.media" }, "PREVIOUS_BUTTON": { "TYPE": "RESOURCE_ID", "VALUE": "skip_prev", "PACKAGE": "com.android.car.media" }, "SHUFFLE_BUTTON": { "TYPE": "RESOURCE_ID", "VALUE": "overflow_on", "PACKAGE": "com.android.car.media" }, "PLAY_QUEUE_BUTTON": { "TYPE": "RESOURCE_ID", "VALUE": "play_queue", "PACKAGE": "com.android.car.media" }, "MINIMIZED_MEDIA_CONTROLS": { "TYPE": "RESOURCE_ID", "VALUE": "minimized_playback_controls", "PACKAGE": "com.android.car.media" }, "TRACK_NAME": { "TYPE": "RESOURCE_ID", "VALUE": "title", "PACKAGE": "com.android.car.media" }, "TRACK_NAME_MINIMIZED_CONTROL": { "TYPE": "RESOURCE_ID", "VALUE": "minimized_control_bar_title", "PACKAGE": "com.android.car.media" }, "BACK_BUTTON": { "TYPE": "DESCRIPTION", "VALUE": "Back" } }, "MEDIA_CENTER_ON_HOME_SCREEN": { "PLAY_PAUSE_BUTTON": { "TYPE": "RESOURCE_ID", "VALUE": "play_pause_stop", "PACKAGE": "com.android.car.carlauncher" }, "NEXT_BUTTON": { "TYPE": "RESOURCE_ID", "VALUE": "skip_next", "PACKAGE": "com.android.car.carlauncher" }, "PREVIOUS_BUTTON": { "TYPE": "RESOURCE_ID", "VALUE": "skip_prev", "PACKAGE": "com.android.car.carlauncher" }, "TRACK_NAME": { "TYPE": "RESOURCE_ID", "VALUE": "title", "PACKAGE": "com.android.car.carlauncher" } } } }
डिवाइस के अन्य कॉन्फ़िगरेशन
यहां दिए गए कोड के सैंपल में, JSON कॉन्फ़िगरेशन फ़ाइल का एक उदाहरण दिखाया गया है. इसमें, डीयूटी पर मौजूद सेटिंग से डिफ़ॉल्ट सेटिंग को बदला गया है. इस उदाहरण में:
रेफ़रंस डिवाइसों पर इंटरनेट सेटिंग को नेटवर्क और इंटरनेट और डीयूटी पर कनेक्टिविटी कहा जाता है.
रेफ़रंस डिवाइसों के लिए, तारीख और समय की सेटिंग सेटिंग > तारीख और समय पर उपलब्ध होती हैं. वहीं, डीयूटी के लिए, ये सेटिंग सेटिंग > सिस्टम > तारीख और समय पर उपलब्ध होती हैं.
// Default configuration file
{
....
"SECURITY_SETTINGS_SCROLL_ELEMENT": {
"TYPE": "RESOURCE_ID",
"VALUE": "fragment_container",
},
....
}
// JSON configuration file for non-reference device
{
....
"SECURITY_SETTINGS_SCROLL_ELEMENT": {
"TYPE": "RESOURCE_ID",
"VALUE": "car_ui_recycler_view"
},
....
}
JSON कॉन्फ़िगरेशन फ़ाइल तैयार होने के बाद, इसे रनटाइम में उपलब्ध कराया जाता है. जैसा कि यहां दिए गए कोड ब्लॉक में दिखाया गया है:
# Push The JSON configuration file to the device
adb -s DEVICE-SERIAL push PATH-OF-JSON-FILE /data/local/tmp/runtimeSpectatioConfig.json
इस कमांड में:
DEVICE-SERIAL: डीयूटी का सीरियल आईडी. अगर होस्ट से सिर्फ़ एक डिवाइस कनेक्ट है, तो इस पैरामीटर की ज़रूरत नहीं होती.
PATH-TO-JSON-FILE: होस्ट मशीन पर JSON फ़ाइल का पाथ.
कॉन्फ़िगरेशन का फ़ॉर्मैट
कॉन्फ़िगरेशन में पांच टॉप-लेवल ऑब्जेक्ट होते हैं. इनमें ये कुंजियां और वैल्यू होती हैं:
| ऑब्जेक्ट | ब्यौरा |
|---|---|
PACKAGES |
यह एक ऑब्जेक्ट है. इसमें अलग-अलग ऐप्लिकेशन के मुख्य पैकेज की जानकारी होती है. इसका इस्तेमाल, यह पता लगाने के लिए किया जाता है कि कोई ऐप्लिकेशन फ़ोरग्राउंड में कब है. |
ACTIONS |
यह एक ऑब्जेक्ट है. इसमें अलग-अलग कार्रवाइयों के लिए, कार्रवाई के टाइप और पैरामीटर की जानकारी होती है. उदाहरण के लिए, स्क्रोल करने के लिए बटन या जेस्चर का इस्तेमाल करना है या नहीं. |
COMMANDS |
यह एक ऑब्जेक्ट है. इसमें ऐसी कमांड की जानकारी होती है जिनसे अलग-अलग कार्रवाइयां की जाती हैं. |
UI_ELEMENTS |
यह एक ऑब्जेक्ट है. इसका इस्तेमाल, यूज़र इंटरफ़ेस (यूआई) ऑटोमेटर `BySelectors` बनाने के लिए किया जाता है. इससे यूज़र इंटरफ़ेस (यूआई) एलिमेंट चुने जाते हैं. इनके बारे में ज़्यादा जानकारी नीचे दी गई है. |
WORKFLOWS |
यह कार्रवाइयों का क्रम है. इससे हाई-लेवल के टास्क पूरे किए जाते हैं. इनके बारे में ज़्यादा जानकारी नीचे दी गई है (विस्तार से बताया गया है). |
यूज़र इंटरफ़ेस (यूआई) एलिमेंट
हर यूज़र इंटरफ़ेस (यूआई) एलिमेंट का एक TYPE होता है. इससे यह तय होता है कि यूज़र इंटरफ़ेस (यूआई) ऑटोमेटर, एलिमेंट की पहचान करने के लिए क्या देखेगा. जैसे, रिसॉर्स आईडी, टेक्स्ट, और जानकारी. साथ ही, इसमें उस टाइप से जुड़ी कॉन्फ़िगरेशन वैल्यू भी होती हैं. आम तौर पर, जब भी कोई हेल्पर इस कॉन्फ़िगरेशन का इस्तेमाल करके स्क्रीन पर किसी एलिमेंट की पहचान करता है, तो उसे सिर्फ़ एक एलिमेंट मिलता है. अगर कई एलिमेंट, कॉन्फ़िगरेशन से मैच होते हैं, तो टेस्ट में उनमें से किसी एक का इस्तेमाल किया जाता है. इसलिए, कॉन्फ़िगरेशन को (आम तौर पर) इस तरह से लिखा जाना चाहिए कि वह संबंधित कॉन्टेक्स्ट में सिर्फ़ एक एलिमेंट को दिखाए.
TEXT
यह यूज़र इंटरफ़ेस (यूआई) एलिमेंट का सबसे आसान टाइप है. यूज़र इंटरफ़ेस (यूआई) एलिमेंट की पहचान उसके टेक्स्ट से की जाती है. इसके लिए, टेक्स्ट का सटीक मैच होना ज़रूरी है.
"CALL_HISTORY_MENU": {
"TYPE": "TEXT",
"VALUE": "Recents"
}
TEXT_CONTAINS
यह TEXT की तरह ही है. हालांकि, इसमें मैच होने के लिए, तय की गई VALUE का एलिमेंट के टेक्स्ट में कहीं भी दिखना ज़रूरी है.
"PRIVACY_CALENDAR": {
"TYPE": "TEXT_CONTAINS",
"VALUE": "Calendar"
}
DESCRIPTION
कंटेंट की जानकारी देने वाले एट्रिब्यूट से एलिमेंट की पहचान करें. इसके लिए, सटीक मैच होना ज़रूरी है.
"APP_GRID_SCROLL_BACKWARD_BUTTON": {
"TYPE": "DESCRIPTION",
"VALUE": "Scroll up"
}
RESOURCE_ID
एलिमेंट की पहचान उसके रिसॉर्स आईडी से करें. इसके अलावा, ज़रूरत पड़ने पर उस आईडी के पैकेज कॉम्पोनेंट की भी जांच करें. PACKAGE कुंजी ज़रूरी नहीं है. अगर इसे छोड़ दिया जाता है, तो कोई भी पैकेज मैच हो जाएगा. साथ ही, सिर्फ़ आईडी का वह हिस्सा दिखेगा जो :id/ के बाद आता है.
"APP_LIST_SCROLL_ELEMENT": {
"TYPE": "RESOURCE_ID",
"VALUE": "apps_grid",
"PACKAGE": "com.android.car.carlauncher"
}
CLICKABLE, SCROLLABLE
एलिमेंट की पहचान इस आधार पर करें कि वह क्लिक किया जा सकता है या नहीं या उसे स्क्रोल किया जा सकता है या नहीं.
ये एलिमेंट के बहुत बड़े टाइप हैं. आम तौर पर, इनका इस्तेमाल सिर्फ़ MULTIPLE में किया जाना चाहिए, ताकि एलिमेंट के किसी दूसरे टाइप को सीमित किया जा सके. FLAG कुंजी ज़रूरी नहीं है. यह डिफ़ॉल्ट रूप से true पर सेट होती है.
"SAMPLE_ELEMENT": {
"TYPE": "CLICKABLE",
"FLAG": false
}
CLASS
एलिमेंट की पहचान उसकी क्लास के आधार पर करें.
"SECURITY_SETTINGS_ENTER_PASSWORD": {
"TYPE": "CLASS",
"VALUE": "android.widget.EditText"
}
HAS_ANCESTOR
विजेट के लेआउट के क्रम में, उसके पैरंट एलिमेंट को देखकर एलिमेंट की पहचान करें. ANCESTOR कुंजी में एक ऑब्जेक्ट होता है. इससे पैरंट एलिमेंट की पहचान होती है. DEPTH कुंजी से यह तय होता है कि लेआउट के क्रम में कितनी गहराई तक देखना है. DEPTH ज़रूरी नहीं है. इसकी डिफ़ॉल्ट वैल्यू 1 होती है.
"SAMPLE_ELEMENT": {
"TYPE": "HAS_ANCESTOR",
"DEPTH": 2,
"ANCESTOR": {
"TYPE": "CLASS",
"VALUE": "android.view.ViewGroup"
}
}
HAS_DESCENDANT
लेआउट के क्रम में, उसके चाइल्ड एलिमेंट को देखकर एलिमेंट की पहचान करें. DESCENDANT कुंजी में एक ऑब्जेक्ट होता है. इससे उस चाइल्ड एलिमेंट की पहचान होती है जिसे ढूंढना है. DEPTH कुंजी से यह तय होता है कि लेआउट के क्रम में कितनी गहराई तक देखना है. DEPTH ज़रूरी नहीं है. इसकी डिफ़ॉल्ट वैल्यू 1 होती है.
"SAMPLE_ELEMENT": {
"TYPE": "HAS_DESCENDANT",
"DEPTH": 2,
"DESCENDANT": {
"TYPE": "CLASS",
"VALUE": "android.view.ViewGroup"
}
}
MULTIPLE
एलिमेंट की पहचान, एक साथ कई शर्तों के आधार पर करें. ये सभी शर्तें पूरी होनी चाहिए.
"APP_INFO_SETTINGS_PERMISSION_MANAGER": {
"TYPE": "MULTIPLE",
"SPECIFIERS": [
{
"TYPE": "CLASS",
"VALUE": "android.widget.RelativeLayout"
},
{
"TYPE": "HAS_DESCENDANT",
"MAX_DEPTH": 2,
"DESCENDANT": {
"TYPE": "TEXT",
"VALUE": "Permission manager"
}
}
]
}
इस उदाहरण में, कॉन्फ़िगरेशन एक RelativeLayout की पहचान करता है. इसमें, 2 की गहराई पर एक चाइल्ड एलिमेंट है. इसमें Permission manager टेक्स्ट है.
Workflows
वर्कफ़्लो, किसी खास टास्क को पूरा करने के लिए इस्तेमाल की जाने वाली कार्रवाइयों का क्रम होता है. यह डिवाइस के टाइप के हिसाब से अलग-अलग हो सकता है. इसे कोड के मुकाबले कॉन्फ़िगरेशन में ज़्यादा आसानी से दिखाया जा सकता है.
"WORKFLOWS": {
"OPEN_SOUND_SETTINGS_WORKFLOW": [
{
"NAME": "Go to Home",
"TYPE": "PRESS",
"CONFIG": {
"TEXT": "HOME"
}
},
{
"NAME": "Open Settings",
"TYPE": "COMMAND",
"CONFIG": {
"TEXT": "am start -a android.settings.SETTINGS"
}
},
{
"NAME": "Open Sound Settings",
"TYPE": "SCROLL_TO_FIND_AND_CLICK",
"CONFIG": {
"UI_ELEMENT": {
"TYPE": "TEXT",
"VALUE": "Sound"
}
},
"SCROLL_CONFIG": {
"SCROLL_ACTION": "USE_GESTURE",
"SCROLL_DIRECTION": "VERTICAL",
"SCROLL_ELEMENT": {
"TYPE": "RESOURCE_ID",
"VALUE": "car_ui_recycler_view"
}
}
}
]
}
हर वर्कफ़्लो, एक की-वैल्यू पेयर होता है. इसमें की, वर्कफ़्लो का नाम होती है और वैल्यू, की जाने वाली कार्रवाइयों का कलेक्शन होती है. हर कार्रवाई का एक NAME, एक TYPE,
(आम तौर पर) एक CONFIG, और (कभी-कभी) एक SWIPE_CONFIG या SCROLL_CONFIG होता है. ज़्यादातर TYPE के लिए, CONFIG एक ऑब्जेक्ट होता है. इसमें UI_ELEMENT कुंजी होती है. इसकी वैल्यू, यूज़र इंटरफ़ेस (यूआई) एलिमेंट की एंट्री के जैसी होती है. इसके बारे में ऊपर बताया गया है. ये TYPE हैं:
| PRESS LONG_PRESS CLICK LONG_CLICK CLICK_IF_EXIST |
HAS_UI_ELEMENT_IN_FOREGROUND SCROLL_TO_FIND_AND_CLICK SCROLL_TO_FIND_AND_CLICK_IF_EXIST SWIPE_TO_FIND_AND_CLICK SWIPE_TO_FIND_AND_CLICK_IF_EXIST |
अन्य TYPE के लिए, कॉन्फ़िगरेशन की जानकारी यहां दी गई है:
| ऑब्जेक्ट | ब्यौरा |
|---|---|
COMMAND |
यह एक ऑब्जेक्ट है. इसमें TEXT वैल्यू होती है. इसमें एक्ज़ीक्यूट की जाने वाली कमांड होती है. |
HAS_PACKAGE_IN_FOREGROUND |
यह एक ऑब्जेक्ट है. इसमें TEXT वैल्यू होती है. इसमें पैकेज की जानकारी होती है. |
SWIPE |
SWIPE कार्रवाई के लिए, CONFIG key को छोड़ दें. इसमें सिर्फ़ SWIPE_CONFIG का इस्तेमाल किया जाता है |
WAIT_MS |
यह एक ऑब्जेक्ट है. इसमें TEXT वैल्यू होती है. इसमें इंतज़ार करने के लिए मिलीसेकंड की संख्या होती है. |
स्क्रोल और स्वाइप से जुड़ी कार्रवाइयों के लिए, अतिरिक्त कॉन्फ़िगरेशन की ज़रूरत होती है. इसके बारे में यहां बताया गया है:
SCROLL_CONFIG
| ऑब्जेक्ट | ब्यौरा |
|---|---|
SCROLL_ACTION |
USE_GESTURE या USE_BUTTON |
SCROLL_DIRECTION |
HORIZONTAL या VERTICAL |
SCROLL_ELEMENT |
यह एक ऑब्जेक्ट है. इसमें स्क्रोल करने के लिए कंटेनर की जानकारी होती है. इसके लिए, यूज़र इंटरफ़ेस (यूआई) एलिमेंट के कॉन्फ़िगरेशन के जैसा ही फ़ॉर्मैट इस्तेमाल किया जाता है. इसके बारे में ऊपर बताया गया है. |
SCROLL_FORWARD, SCROLL_BACKWARD |
आगे और पीछे की ओर स्क्रोल करने के बटन. जब
SCROLL_ACTION की वैल्यू USE_BUTTON होती है, तब इनकी ज़रूरत होती है. |
SCROLL_MARGIN |
अगर SCROLL_ACTION की वैल्यू USE_GESTURE है, तो कंटेनर के किनारे से उस दूरी की जानकारी दें जहां से ड्रैग करना शुरू और खत्म करना है. इसका इस्तेमाल, स्क्रोल करने के लिए किया जाएगा (ज़रूरी नहीं, डिफ़ॉल्ट वैल्यू = 10). |
SCROLL_WAIT_TIME |
अगर SCROLL_ACTION की वैल्यू USE_GESTURE है, तो क्लिक करने के लिए किसी ऑब्जेक्ट को ढूंढते समय, स्क्रोल जेस्चर के बीच इंतज़ार करने के लिए मिलीसेकंड में समय की जानकारी दें.
(ज़रूरी नहीं, डिफ़ॉल्ट वैल्यू = 1). |
SWIPE_CONFIG
| ऑब्जेक्ट | ब्यौरा |
|---|---|
SWIPE_DIRECTION |
TOP_TO_BOTTOM, BOTTOM_TO_TOP,
LEFT_TO_RIGHT, या RIGHT_TO_LEFT |
SWIPE_FRACTION |
इनमें से कोई एक:
|
NUMBER_OF_STEPS |
स्वाइप करने के लिए इस्तेमाल किए जाने वाले चरणों की संख्या.
segmentSteps देखें.
|
बिल्ड और एक्ज़ीक्यूट करना
Spectatio फ़्रेमवर्क, टेस्ट APK के हिस्से के तौर पर अपने-आप बिल्ड हो जाता है. टेस्ट APK को बिल्ड करने के लिए, AOSP कोड बेस को लोकल वर्कस्टेशन पर मौजूद होना चाहिए. टेस्ट APK बिल्ड होने के बाद, उपयोगकर्ता को डिवाइस पर APK इंस्टॉल करना होगा और टेस्ट को एक्ज़ीक्यूट करना होगा.
यहां दिए गए कोड के सैंपल में, टेस्ट APK को बिल्ड करने, इंस्टॉल करने, और एक्ज़ीक्यूट करने के बारे में बताया गया है.
# Build Test APK make TEST-APK-NAME# Install Test APK adb -s DEVICE-SERIAL install -r PATH-FOR-BUILT-TEST-APK# Execute Test with the JSON file adb -s DEVICE-SERIAL shell am instrument -w -r -e debug false -e config-file-path /data/local/tmp/jsonFile.json -e class TEST-PACKAGE.TEST-CLASSNAME TEST-PACKAGE/androidx.test.runner.AndroidJUnitRunner
इन कमांड में:
TEST-APK-NAME: टेस्ट किए जाने वाले ऐप्लिकेशन का नाम. उदाहरण के लिए, वाई-फ़ाई की सेटिंग की जांच करने के लिए, TEST-APK-NAME को
AndroidAutomotiveSettingsTestsपर सेट करें जैसा किAndroid.bpफ़ाइल में बताया गया है. ऑटोमोटिव टेस्ट के लिए, APK का नाम संबंधितAndroid.bpफ़ाइल में देखा जा सकता है .DEVICE-SERIAL: डीयूटी का सीरियल आईडी. अगर होस्ट से सिर्फ़ एक डिवाइस कनेक्ट है, तो इस पैरामीटर की ज़रूरत नहीं होती.
config-file-path: यह एक वैकल्पिक पैरामीटर है जिसकी ज़रूरत सिर्फ़ तब होती है, जब JSON कॉन्फ़िगरेशन फ़ाइल में बताए गए डिवाइस के यूज़र इंटरफ़ेस (यूआई) के डिफ़ॉल्ट कॉन्फ़िगरेशन के अलावा, अन्य कॉन्फ़िगरेशन की जानकारी देनी हो. अगर यह जानकारी नहीं दी जाती है, तो फ़्रेमवर्क, टेस्ट को एक्ज़ीक्यूट करने के लिए डिफ़ॉल्ट वैल्यू का इस्तेमाल करता है.PATH-FOR-BUILT-TEST-APK: यह वह पाथ है जहां टेस्ट APK बिल्ड होता है जब
makeकमांड एक्ज़ीक्यूट होती है.TEST-PACKAGE: टेस्ट पैकेज का नाम.
TEST-CLASSNAME: टेस्ट क्लास का नाम. उदाहरण के लिए, वाई-फ़ाई की सेटिंग की जांच के लिए, टेस्ट पैकेज
android.platform.testsहै और टेस्ट क्लास का नामWifiSettingTestहै.
ऑटोमोटिव स्निपेट लाइब्रेरी
ऑटोमोटिव स्निपेट लाइब्रेरी, Android Open Source Project (AOSP) के लिए, Android टेस्ट लाइब्रेरी का एक सेट है. इसे ऑटोमोटिव ऐप्लिकेशन और सेवाओं के साथ इंटरैक्ट करने के लिए डिज़ाइन किया गया है. यह Spectatio का इस्तेमाल करती है. इसमें, होस्ट (टेस्ट) मशीन से Android पर चलने वाले डिवाइस पर, रिमोट प्रोसीजर कॉल (आरपीसी) को एक्ज़ीक्यूट करने के लिए एक आसान तरीका है.
शुरू करें
शुरू करने से पहले, इन सेक्शन को देखें.
ज़रूरी शर्तें
- होस्ट मशीन पर Python 3.x इंस्टॉल होना चाहिए.
- AOSP एनवायरमेंट सेटअप में, ज़रूरी बिल्ड टूल होने चाहिए.
- Android ऑटोमोटिव डिवाइस (एम्युलेटर या फ़िज़िकल डिवाइस) पर, adb ऐक्सेस होना चाहिए.
कंपाइलेशन
ऑटोमोटिव स्निपेट लाइब्रेरी में दिए गए अलग-अलग स्निपेट को कंपाइल करने के लिए, आप
दी गई android.bp फ़ाइल का इस्तेमाल कर सकते हैं. APK को कंपाइल करने के लिए, पिछले सेक्शन में दी गई कमांड का इस्तेमाल करें.
डिप्लॉयमेंट
स्निपेट लाइब्रेरी को कंपाइल करने के बाद, टारगेट डिवाइस पर APK डिप्लॉय करें. इसके लिए, पिछले सेक्शन में बताई गई adb install कमांड का इस्तेमाल करें.
टेस्ट रन करें
स्निपेट लाइब्रेरी, ऑटोमोटिव सिस्टम के साथ इंटरैक्ट करने के लिए, कई आरपीसी तरीके उपलब्ध कराती हैं. होस्ट मशीन से, Mobly फ़्रेमवर्क की मदद से इन तरीकों को लागू किया जा सकता है. मान लें कि आपने Mobly टेस्ट एनवायरमेंट सेट अप कर लिया है. ऐसे में, इंटरैक्टिव Python शेल खोलने के लिए,
snippet_shell.py स्क्रिप्ट का इस्तेमाल किया जा सकता है. इसमें, डिवाइस पर आरपीसी तरीकों को
मैन्युअल तरीके से लागू किया जा सकता है. लागू करने का उदाहरण:
python3 snippet_shell.py com.google.android.mobly.snippet.bundled -s <serial>
<serial> को डिवाइस के सीरियल नंबर से बदलें. अगर एक से ज़्यादा डिवाइस कनेक्ट हैं, तो
adb devices की मदद से सीरियल नंबर पाया जा सकता है.
शामिल की गई लाइब्रेरी
ऑटोमोटिव स्निपेट लाइब्रेरी में, ये स्निपेट लाइब्रेरी और हेल्पर शामिल हैं:
AutomotiveSnippet: इसमें, वाहन से जुड़ी कार्रवाइयों के लिए एपीआई उपलब्ध कराए जाते हैं. जैसे, डायल करना, आवाज़ कंट्रोल करना, वाहन की हार्ड की, और मीडिया सेंटर के साथ इंटरैक्ट करना.
PhoneSnippet: इसमें, टेलीफ़ोनी से जुड़े एपीआई उपलब्ध कराए जाते हैं. जैसे, कॉल हैंडल करना, संपर्क ब्राउज़ करना, और एसएमएस से जुड़ी कार्रवाइयां.
ऑटोमोटिव स्निपेट और PhoneSnippet, कुछ लॉजिक शेयर करते हैं.
खास तौर पर, ऑटोमोटिव और फ़ोन डिवाइस को पेयर करने के लिए, ब्लूटूथ से जुड़े आरसीपी कॉल को लागू किया जा सकता है. This bt_discovery_test में इसका तरीका बताया गया है.
- TEST-CLASSNAME: टेस्ट क्लास का नाम. उदाहरण के लिए, वाई-फ़ाई की सेटिंग की जांच के लिए,
टेस्ट पैकेज
android.platform.testsहै और टेस्ट क्लास का नामWifiSettingTestहै.