syntax = "proto2"; option java_package = "com.google.wireless.android.sdk.stats"; option java_outer_classname = "AndroidStudioStats"; // IntelliJ gets really upset with the large proto files we generate // and disables auto-complete for the classes. // This option will generate multiple files and restore auto-completion. option java_multiple_files = true; package android_studio; message AndroidStudioEvent { // Describes a group of event kinds related to each other. // Necessary only for events that were originally being reported to Google // Analytics (GA). optional EventCategory category = 1; // Specific kind of event, primary separation key of all Android Studio // related events. optional EventKind kind = 2; // The session id is a UUID tracking a single instance of Android Studio // to associate events together such as kind = TEST_RUN optional string studio_session_id = 3; // Fully set when kind = STUDIO_PING // or ANDROID_STUDIO_TEST // or ANDROID_STUDIO_THROUGH_GRADLE // or kind = EMULATOR_PING // or kind = TEST_RUN // or kind = GAME_TOOLS_PING // or kind = AGDE_PING. // The version field is set for most messages. optional ProductDetails product_details = 4; // set when kind = MONITOR_ACTIVATED or kind = MONITOR_RUNNING // Deprecated by AndroidProfilerEvent optional MonitorType monitor_type = 5 [deprecated = true]; // set when kind = MONITOR_RUNNING // Deprecated by AndroidProfilerEvent optional bool monitor_paused = 6 [deprecated = true]; // set when kind = PROFILING_OPEN or PROFILING_CAPTURE // Deprecated by AndroidProfilerEvent optional ProfilerCaptureType profiler_capture_type = 7 [deprecated = true]; // set when kind = CLOUD_TESTING_BACKEND_ERROR optional string cloud_testing_error_message = 8; // set when kind = CLOUD_TESTING_COMPARE_SCREENSHOTS_OPENED optional int32 cloud_testing_loaded_screenshots_count = 9; // Deprecated, use debug_session_start_details instead. // set when kind = LLDB_SESSION_STARTED optional RunConfigurationType run_configuration_type = 10 [deprecated = true]; // Deprecated, use debug_session_start_details instead. // set when kind = LLDB_SESSION_STARTED optional DebuggerType debugger_type = 11 [deprecated = true]; // set when kind = LLDB_LAUNCHED // or kind = DEPLOYMENT_APK // or kind = DEPLOYMENT_EMULATOR // or kind = CLOUD_TESTING_CONFIGURE_CLOUD_DEVICE // or kind = CLOUD_TESTING_LAUNCH_CLOUD_DEVICE // or kind = CLOUD_TESTING_DEBUG_FROM_RESULTS // or kind = TEST_RUN // or kind = LayoutInspectorEvent and LayoutInspectorEventType = CAPTURE // or kind = ANDROID_PROFILER and AndroidProfilerEvent.Type = CHANGE_DEVICE // or kind = DynamicLayoutInspectorEvent // or kind = AppInspectionEvent and AppInspectionEvent.Type = PROCESS_SELECTED optional DeviceInfo device_info = 12; // set when kind = LLDB_INSTALL_FAILED // e.g. 'failed to get reply to handshake packet' optional string lldb_session_failure_message = 13; // set when kind = DEVELOPER_SERVICES_INSTALLED // or kind = DEVELOPER_SERVICES_REMOVED optional DeveloperServiceKind developer_service_kind = 14; // set when category = GRADLE_SYNC optional string gradle_version = 15; // e.g. '2.10' // set when kind = GRADLE_SYNC_FAILURE_DETAILS (previously set when kind = // GRADLE_SYNC_FAILURE) optional GradleSyncFailure gradle_sync_failure = 16; // set when kind = GRADLE_SYNC_FAILURE and gradle_sync_failure = *_NOT_FOUND // e.g. 'org.gradle.api.internal.DemoClass.demoMethod' optional string gradle_missing_signature = 17; // set when kind = TEMPLATE_RENDERER optional TemplateRenderer template_renderer = 18; // set when kind = STUDIO_CRASH optional StudioCrash studio_crash = 19; // set when kind = GRADLE_BUILD_DETAILS or INSTANT_RUN // In the case of INSTANT_RUN, only the plugin version information is included optional GradleBuildDetails gradle_build_details = 20; // set when kind = INSTANT_RUN optional InstantRun instant_run = 21; // set when kind = META_METRICS optional MetaMetrics meta_metrics = 22; // set when kind = EMULATOR_PING optional EmulatorDetails emulator_details = 23; // set when kind = TEST_RUN optional TestRun test_run = 24; // set when kind = EMULATOR_UI_EVENT (deprecated), use the repeated // field emulator_ui_events instead. optional EmulatorUiEvent emulator_ui_event = 25 [deprecated = true]; // set when kind = HYPERVISOR optional Hypervisor hypervisor = 26; // set when kind = EMULATOR_HOST optional EmulatorHost emulator_host = 27; // set when kind = GRADLE_BUILD_PROFILE optional GradleBuildProfile gradle_build_profile = 28; // set when kind = LLDB_FRONTEND_EXITED optional LLDBFrontendDetails lldb_frontend_details = 29; // set when kind = FIREBASE_ASSISTANT_ERROR_PRESENTED or // kind FIREBASE_ASSISTANT_SILENT_ERROR optional FirebaseErrorDetails firebase_error_details = 30; // Client-side salted (rotating every 28 days), sha256 of the project id. // set when kind = PROJECT_STRUCTURE_* or kind = APK_ANALYZER_STATS optional string project_id = 31; // set when kind = GFX_TRACE_* optional GfxTracingDetails gfx_tracing_details = 32; // set when kind = TEST_RECORDER_GENERATE_TEST_CLASS optional TestRecorderDetails test_recorder_details = 33; // set when kind = STUDIO_UI_ACTION_STATS optional UIActionStats ui_action_stats = 34; // set when kind = STUDIO_PING optional MachineDetails machine_details = 35; // set when kind = STUDIO_PING optional JvmDetails jvm_details = 36; // set when kind = STUDIO_PROCESS_STATS // or kind = GRADLE_BUILD_PROFILE // or kind = STUDIO_UI_OOM_DIALOG_EVENT // or kind = STUDIO_LOW_MEMORY_EVENT optional JavaProcessStats java_process_stats = 37; // set when kind = STUDIO_PERFORMANCE_STATS optional StudioPerformanceStats studio_performance_stats = 38; // set when kind = LLDB_PERFORMANCE_STATS optional LldbPerformanceStats lldb_performance_stats = 39; // set when kind = STUDIO_PROJECT_OPENED or STUDIO_PROJECT_CLOSED optional StudioProjectChange studio_project_change = 40; // optionally set when kind = FIREBASE_ASSISTANT_* (except for errors). optional FirebaseContextDetails firebase_context_details = 41; // set when kind = LAYOUT_EDITOR_EVENT optional LayoutEditorEvent layout_editor_event = 42; // set when kind = APP_LINKS_ASSISTANT_STATS optional AppLinksAssistantEvent app_links_assistant_event = 43; // set when kind = EMULATOR_PERFORMANCE_STATS optional EmulatorPerformanceStats emulator_performance_stats = 44; // set when kind = ADB_ASSISTANT_STATS optional AdbAssistantStats adb_assistant_stats = 45; // set when kind = LLDB_SESSION_STARTED optional LldbSessionStartDetails lldb_session_start_details = 46; // set when kind = LLDB_SESSION_ENDED optional LldbSessionEndDetails lldb_session_end_details = 47; // set when kind = ANDROID_PROFILER optional AndroidProfilerEvent android_profiler_event = 48; // set when kind = APK_ANALYZER_STATS optional ApkAnalyzerStats apk_analyzer_stats = 49; // set when kind = GRADLE_SYNC_ENDED, GRADLE_SYNC_FAILURE or // GRADLE_SYNC_SETUP_STARTED optional GradleSyncStats gradle_sync_stats = 50; // set when kind = GRADLE_CPP_SYNC_COMPLETED optional GradleCppSyncStats gradle_cpp_sync_stats = 113; // set when category = APK_DEBUG optional ApkDebugProject apk_debug_project = 51; // set when kind = LAYOUT_INSPECTOR_EVENT optional LayoutInspectorEvent layout_inspector_event = 52; // set when kind = ANDROID_PROFILER_DB_STATS optional AndroidProfilerDbStats android_profiler_db_stats = 53; // set when kind = TEMPLATE_RENDERER // or kind = GRADLE_SYNC_ENDED optional KotlinSupport kotlin_support = 54; // set when kind = CONNECTION_ASSISTANT_EVENT optional ConnectionAssistantEvent connection_assistant_event = 55; // set when kind = STUDIO_UI_OOM_DIALOG_EVENT optional OomDialogEvent oom_dialog_event = 56; // set when kind = CMAKE_EDITING_EVENT optional CMakeEditingEvent cmake_editing_event = 57; // set for all events generated by Android Studio optional IdeBrand ide_brand = 58; // set when kind = CPP_HEADERS_VIEW_EVENT optional CppHeadersViewEvent cpp_headers_view_event = 59; // set when kind = WHATS_NEW_ASSISTANT_EVENT // Deprecated since 3.6.0.8, replaced with WhatsNewAssistantUpdateEvent optional WhatsNewAssistantEvent whats_new_assistant_event = 60 [deprecated = true]; // the project id as used in the playstore, e.g. // 'com.google.android.apps.maps'. This is sensitive information and // thus restricted to "raw" sawmill access. This data is only available in // and for PWG approved scenarios. optional string raw_project_id = 61; // set when kind = INTELLIJ_INDEXING_STATS optional IntellijIndexingStats intellij_indexing_stats = 62; // set when kind == LINT_SESSION optional LintSession lint_session = 63; // set when kind == LINT_ACTION optional LintAction lint_action = 64; // set when kind = STUDIO_RUN_EVENT optional StudioRunEvent studio_run_event = 65 [deprecated = true]; // set when kind = INTELLIJ_PROJECT_SIZE_STATS repeated IntellijProjectSizeStats intellij_project_size_stats = 66; // set when kind = STUDIO_TOOL_WINDOW_ACTION_STATS optional StudioToolWindowActionStats studio_tool_window_action_stats = 67; // set when kind = PROJECT_STRUCTURE_DIALOG optional PSDEvent psd_event = 68; // set when Android Studio is launched with the "idea.is.internal=true" // flag, indicating that this is somebody debugging Android Studio rather // than a normal user sending actual usage metrics. optional bool idea_is_internal = 69; // set when kind == JNI_INSPECTION optional JniInspectionEvent jni_inspection_event = 70; // set when kind == USER_SENTIMENT optional UserSentiment user_sentiment = 71; // Describes a group of event kinds related to each other. // This is redundant in the presence of EventKind + event specific message, // and is only necessary for events originally sent to GA. // set when kind = RUN_EVENT optional RunEvent run_event = 72; // set when kind = NAV_EDITOR_EVENT optional NavEditorEvent nav_editor_event = 73; // set when kind = DIALOG_STATS optional DialogStats dialog_stats = 74; // set when kind = GRADLE_PLUGIN_UPGRADE_DIALOG optional GradlePluginUpgradeDialogStats gradle_plugin_upgrade_dialog = 75; // set when kind = DATA_BINDING optional DataBindingEvent data_binding_event = 76; // set when kind = TYPING_LATENCY_STATS optional TypingLatencyStats typing_latency_stats = 77; // set when kind = GRADLE_SYNC_ISSUES. repeated GradleSyncIssue gradle_sync_issues = 78; // The list of quick-fixes offered to resolve a sync failure. (Quick fixes // offered to resolve specific sync issues are reported in // gradle_sync_issues). set when kind = GRADLE_SYNC_FAILURE_DETAILS. repeated GradleSyncQuickFix offered_quick_fixes = 79; // set when kind = STUDIO_PATCH_UPDATER optional StudioPatchUpdaterEvent studio_patch_updater_event = 80; // Set when kind = RESOURCE_MANAGER optional ResourceManagerEvent resource_manager_event = 81; // Set when kind = IDE_PLUGIN_INFO optional IdePluginInfo ide_plugin_info = 82; // Set when kind = EDITOR_HIGHLIGHTING_STATS optional EditorHighlightingStats editor_highlighting_stats = 83; // Set when kind = WINDOWS_DEFENDER_STATUS optional WindowsDefenderStatus windows_defender_status = 84; // Set when kind = MEMORY_SETTINGS_EVENT optional MemorySettingsEvent memory_settings_event = 85; // Set when kind = STUDIO_UPDATE_FLOW optional StudioUpdateFlowEvent studio_update_flow_event = 86; // set when kind = BUILD_OUTPUT_WINDOW_STATS optional BuildOutputWindowStats build_output_window_stats = 87; // set when kind = GRADLE_PLUGIN_DSL_USAGE_STATS optional GradlePluginDslUsageStats gradle_plugin_dsl_usage_stats = 88; // set when kind = WHATS_NEW_ASSISTANT_UPDATE_EVENT optional WhatsNewAssistantUpdateEvent whats_new_assistant_update_event = 89; // set when kind = DEFAULT_ACTIVITY_LOCATOR_STATS optional DefaultActivityLocatorStats default_activity_locator_stats = 90; // set when kind = MOTION_LAYOUT_EDITOR_EVENT optional MotionLayoutEditorEvent motion_layout_editor_event = 91; // set when kind = COMPOSE_SAMPLE_EVENT // This is a sample project for Compose published on GitHub that can be // imported through the sample browser UI or cloned and opened manually optional ComposeSampleEvent compose_sample_event = 92; // set when kind = IMPORT_SAMPLE_EVENT // Logs the ID of the sample project imported through the sample browser UI, // e.g. android/user-interface-samples/TextStyling optional ImportSampleEvent import_sample_event = 93; // set when kind = DYNAMIC_LAYOUT_INSPECTOR_EVENT optional DynamicLayoutInspectorEvent dynamic_layout_inspector_event = 94; // set when kind = BUILD_ATTRIBUTION_STATS optional BuildAttributionStats build_attribution_stats = 95; // set when kind = EDITOR_COMPLETION_STATS optional EditorCompletionStats editor_completion_stats = 96; // set when kind = MULTI_VIEW_EVENT optional MultiViewEvent multi_view_event = 97; // set when kind = BUILD_ATTRIBUTION_UI_EVENT optional BuildAttributionUiEvent build_attribution_ui_event = 98; // set when kind = ANDROID_CPP_EXTENSION optional AndroidCppExtensionEvent android_cpp_extension_event = 99; // set when kind = DESIGN_EDITOR_HELP_PANEL_EVENT optional DesignEditorHelpPanelEvent design_editor_help_panel_event = 100; // set when kind = APP_INSPECTION optional AppInspectionEvent app_inspection_event = 101; // set when kind = ML_MODEL_BINDING optional MlModelBindingEvent ml_model_binding_event = 102; // set when kind = DEPLOYMENT_TO_EMULATOR optional AvdLaunchEvent avd_launch_event = 103; // set when kind = NAV_SAFE_ARGS_EVENT optional NavSafeArgsEvent nav_safe_args_event = 104; // set when kind = DAGGER_EDITOR optional DaggerEditorEvent dagger_editor_event = 105; // set when kind = PARALLEL_ANDROID_TEST_REPORT_UI optional ParallelAndroidTestReportUiEvent parallel_android_test_report_ui_event = 106; // set when kind = APPLY_CHANGES_AGENT_ERROR optional ApplyChangesAgentError apply_changes_agent_error = 107; // set when kind = WIZARD_TEMPLATES_USAGE optional TemplatesUsage template_usage = 108; // set when kind = UPGRADE_ASSISTANT_COMPONENT_EVENT optional UpgradeAssistantComponentEvent upgrade_assistant_component_event = 109; // set when kind = UPGRADE_ASSISTANT_PROCESSOR_EVENT optional UpgradeAssistantProcessorEvent upgrade_assistant_processor_event = 110; // set when kind = INTERACTIVE_PREVIEW_EVENT optional InteractivePreviewEvent interactive_preview_event = 111; // set when kind = COMPOSE_ANIMATION_TOOLING optional ComposeAnimationToolingEvent compose_animation_tooling_event = 112; // set when kind = EMULATOR_UI_EVENTS repeated EmulatorUiEvent emulator_ui_events = 114; // set when kind = SURVEY_RESPONSE optional SurveyResponse survey_response = 115; // set when kind = COMPOSE_DEPLOY optional ComposeDeployEvent compose_deploy_event = 116; // Deprecated, use suggested_import_event instead. // set when kind = AUTO_IMPORT_EVENT optional AutoImportEvent auto_import_event = 117 [deprecated = true]; // set when kind = FILE_USAGE optional FileUsage file_usage = 118; // set when kind = LIVE_LITERALS_EVENT optional LiveLiteralsEvent live_literals_event = 119; // set when kind = MIGRATE_TO_NON_TRANSITIVE_R_CLASS optional NonTransitiveRClassMigrationEvent non_transitive_r_class_migration_event = 120; // set when kind = ANDROID_TEST_RETENTION_EVENT optional AndroidTestRetentionEvent android_test_retention_event = 121; // set when kind = SUGGESTED_IMPORT_EVENT optional SuggestedImportEvent suggested_import_event = 122; // set when kind = VFS_REFRESH optional VfsRefresh vfs_refresh = 123; // Set when kind is SIGNING_WIZARD_*_FAILED or SIGNING_WIZARD_*_SUCCEEDED optional SigningWizardEvent signing_wizard_event = 124; // set when kind = FILE_TYPE optional FileType file_type = 125; // set when kind is KOTLIN_PROJECT_CONFIGURATION optional KotlinProjectConfiguration kotlin_project_configuration = 126; // set when kind = RUN_START_DATA optional RunStartData run_start_data = 127; // set when kind = RUN_FINISH_DATA optional RunFinishData run_finish_data = 128; // set when kind = DEVICE_MANAGER optional DeviceManagerEvent device_manager_event = 129; // set when kind = WEAR_PAIRING optional WearPairingEvent wear_pairing_event = 130; // set when kind = GRADLE_JDK_INVALID optional GradleJdkInvalidEvent gradle_jdk_invalid_event = 131; // set when kind = DEVICE_EXPLORER optional DeviceExplorerEvent device_explorer_event = 132; // set when kind = OPTIN_METRICS optional OptInToMetrics opt_in_to_metrics = 133; // set when kind = OPTOUT_METRICS optional OptOutOfMetrics opt_out_of_metrics = 134; // set when kind = GRADLE_VERSION_CATALOG_DETECTOR optional GradleVersionCatalogDetectorEvent gradle_version_catalog_detector_event = 135; // set when kind = COROUTINE_DEBUGGER optional CoroutineDebuggerEvent coroutine_debugger_event = 136; // set when kind = SPLITTING_TABS_USAGE optional SplittingTabsUsageEvent splitting_tabs_usage_event = 137; // set when kind = LOGCAT_USAGE optional LogcatUsageEvent logcat_usage_event = 138; // the project ids as used in the playstore, e.g. // 'com.google.android.apps.maps'. This is sensitive information and // thus restricted to "raw" sawmill access. This data is only available in // and for PWG approved scenarios. repeated string raw_project_ids = 139; // Client-side salted (rotating every 28 days), sha256 of the project id. // set when kind = PROJECT_STRUCTURE_* or kind = APK_ANALYZER_STATS repeated string project_ids = 140; // set when kind = OS_METRICS optional OSMetrics os_metrics = 141; // set when kind is SDK_INDEX_LIBRARY_HAS_CRITICAL_ISSUES, // SDK_INDEX_LIBRARY_IS_OUTDATED or SDK_INDEX_LIBRARY_IS_NON_COMPLIANT optional SdkIndexLibraryDetails sdk_index_library_details = 142; // set when kind = EDITOR_PICKER optional EditorPickerEvent editor_picker_event = 143; // set when kind = COMPOSE_MULTI_PREVIEW optional ComposeMultiPreviewEvent compose_multi_preview_event = 144; // set when kind = LIVE_EDIT_EVENT optional LiveEditEvent live_edit_event = 145; // set when kind = STOP_EVENT optional StopEvent stop_event = 146; // set when kind = APP_QUALITY_INSIGHTS_USAGE optional AppQualityInsightsUsageEvent app_quality_insights_usage_event = 147; // set when kind = GOOGLE_LOGIN_EVENT optional GoogleLoginPluginEvent google_login_event = 148; // set when kind = DEVICE_MIRRORING_SESSION optional DeviceMirroringSession device_mirroring_session = 149; // set when kind = FAST_PREVIEW_EVENT optional FastPreviewEvent fast_preview_event = 150; // set when kind = MEMORY_USAGE_REPORT_EVENT optional MemoryUsageReportEvent memory_usage_report_event = 151; enum EventCategory { // The event was not grouped into any specific category (default). NO_EVENT_CATEGORY = 0; // The event is related to deployment to a device or emulator. DEPLOYMENT = 1; // Stats on builds from Studio. STUDIO_BUILD = 2; // The event is related to usage of 'Google Developer Services' // inside Android Studio. DEVELOPER_SERVICES = 3; // The event is related to interaction between Android Studio and Gradle. GRADLE_SYNC = 4; // The event is related to Performance Profiling. // Deprecated by AndroidProfilerEvent PROFILING = 5 [deprecated = true]; // The event is related to Performance Monitoring. // Deprecated by AndroidProfilerEvent MONITOR = 6 [deprecated = true]; // The event is related to the SDK Manager. SDK_MANAGER = 7; // The event is related to project/file templates. TEMPLATE = 8; // The event is related to Theme Editor. THEME_EDITOR = 9 [deprecated = true]; // The event is related to App Indexing integration. APP_INDEXING = 10; // The event is related to C++ debugging. LLDB = 11; // The event is related to Google Cloud Test Lab integration. CLOUD_TESTING = 12; // The event is a regular ping from the application. PING = 13; // The event is related to running tests. TESTS = 14; // The event is a meta event reporting metrics on metrics. META = 15; // The event is related to the Emulator UI EMULATOR_UI = 16; // The event describes System Info SYSTEM = 17; // The event is related to the Project Structure Dialog. PROJECT_STRUCTURE_DIALOG = 18; // The event is from the Android Gradle plugin. GRADLE = 19; // The event is related to the Firebase assistant. FIREBASE_ASSISTANT = 20; // The event is related to the GPU Profiler. // Deprecated by AndroidProfilerEvent GPU_PROFILER = 21 [deprecated = true]; // the event is related to the test recorder (Cassette) TEST_RECORDER = 22; // the event is related to the Android Studio UI. STUDIO_UI = 23; // the event is related to the layout editor LAYOUT_EDITOR = 24; // The event is related to APK_DEBUGGING actions initiated by the user. APK_DEBUG = 25; // The event is related to CMake editing. // Do not use this -- use the EventKind below. DEPRECATED_CMAKE_EDITING_EVENT = 26 [deprecated = true]; // The event is related to Android Studio Projects PROJECT_SYSTEM = 27; // The event is related to Splitting Tabs tool windows SPLITTING_TABS = 28; // The event is related to Logcat tool window LOGCAT = 29; // The event is related to Google Play SDK Index GOOGLE_PLAY_SDK_INDEX = 30; } // Specific kind of event, primary separation key of all Android Studio // related events. enum EventKind { UNKNOWN_EVENT_KIND = 0; // An APK (android application) is deployed. DEPLOYMENT_APK = 1; // A deployment to the emulator. DEPLOYMENT_TO_EMULATOR = 2; // The developer added a Google Developer Service to their app. DEVELOPER_SERVICES_INSTALLED = 3; // The developer removed a Google Developer Service from their app. DEVELOPER_SERVICES_REMOVED = 4; // A sync between Android Studio and Gradle started. GRADLE_SYNC_STARTED = 5; // A sync between Android Studio and Gradle ended. GRADLE_SYNC_ENDED = 6; // A sync between Android Studio and Gradle was skipped. GRADLE_SYNC_SKIPPED = 7; // A sync between Android Studio and Gradle failed. GRADLE_SYNC_FAILURE = 8; // A sync between Android Studio and Gradle C++ support completed. GRADLE_CPP_SYNC_COMPLETED = 9; // Performance profiling capture started. PROFILING_CAPTURE = 10; // Performance profiling capture opened in the IDE. PROFILING_OPEN = 11; // Conversion of hprof profiling data in progress. PROFILING_CONVERT_HPROF = 12; // Analysis of the profiling data in progress. PROFILING_ANALYSIS_RUN = 13; // Performance monitoring has been activated. // Deprecated by AndroidProfilerEvent MONITOR_ACTIVATED = 14 [deprecated = true]; // Performance monitoring is running. // Deprecated by AndroidProfilerEvent MONITOR_RUNNING = 15 [deprecated = true]; // The user selected an action from the SDK Manager Toolbar. SDK_MANAGER_TOOLBAR_CLICKED = 16; // The standalone SDK Manager was launched. SDK_MANAGER_STANDALONE_LAUNCHED = 17; // The built-in SDK Manager was launched. SDK_MANAGER_LOADED = 18; // A new file/project is created based on a template. TEMPLATE_RENDER = 19; // User opened the Theme Editor. THEME_EDITOR_OPEN = 20 [deprecated = true]; // A deep link was created for app indexing. APP_INDEXING_DEEP_LINK_CREATED = 21; // An api code was created for app indexing. APP_INDEXING_API_CODE_CREATED = 22; // An app indexing deep link was launched. APP_INDEXING_DEEP_LINK_LAUNCHED = 23; // An app indexing quick fix was applied. APP_INDEXING_TRIGGER_QUICKFIX = 24; // App Indexing Fetch As Google dialog is shown. APP_INDEXING_SHOW_FEAG_DIALOG = 25; // App Indexing Fetch As Google task has started. APP_INDEXING_START_FEAG_TASK = 26; // Native debugger is launched. LLDB_LAUNCHED = 27; // Native debugger session has started. LLDB_SESSION_STARTED = 28; // Deprecated, use LLDB_SESSION_ENDED instead. // Native debugger session has failed. LLDB_SESSION_FAILED = 29 [deprecated = true]; // Deprecated, use DEBUG_SESSION_ENDED instead. // Native debugger session has completed successfully. LLDB_SESSION_COMPLETED = 30 [deprecated = true]; // SDK Manager QuickFix Wizard is invoked to install LLDB package. LLDB_INSTALL_STARTED = 31; // SDK Manager QuickFix Wizard invocation to install LLDB package failed. LLDB_INSTALL_FAILED = 32; // SDK Manager QuickFix Wizard invocation to install LLDB package completed // successfully. LLDB_INSTALL_COMPLETED = 33; // A watchpoint was added to native code. LLDB_SESSION_USED_WATCHPOINTS = 34; // A Cloud Device was configured for Cloud Testing. CLOUD_TESTING_CONFIGURE_CLOUD_DEVICE = 35; // A Matrix of Cloud Devices was configured for Cloud Testing. CLOUD_TESTING_CONFIGURE_MATRIX = 36; // A Cloud Devices was launched for Cloud Testing. CLOUD_TESTING_LAUNCH_CLOUD_DEVICE = 37; // A Matrix of Cloud Devices was run for Cloud Testing. CLOUD_TESTING_RUN_TEST_MATRIX = 38; // Cloud Testing reported a backend error. CLOUD_TESTING_BACKEND_ERROR = 39; // A Debug session was launched from Cloud Testing results. CLOUD_TESTING_DEBUG_FROM_RESULTS = 40; // The compare screenshots window was opened from a Cloud Testing run. CLOUD_TESTING_COMPARE_SCREENSHOTS_OPENED = 41; // Studio crash statistics were sent. STUDIO_CRASH = 42; // A Gradle Build was run and statistics are available. GRADLE_BUILD_DETAILS = 44; // Stats on Instant Run. INSTANT_RUN = 45; // Daily Android Studio ping with version & os details. STUDIO_PING = 46; // Daily emulator ping with version & os details. EMULATOR_PING = 47; // Metrics on Metrics. META_METRICS = 48; // User ran tests. TEST_RUN = 50; // User clicked something in the Emulator UI. (deprecated), use the // repeated field EMULATOR_UI_EVENTS instead. EMULATOR_UI_EVENT = 51; // Information on the host OS's hypervisor support. HYPERVISOR = 52; // Provides info on the Emulator Host EMULATOR_HOST = 53; // Various UI events in the Project Structure Dialog. PROJECT_STRUCTURE_DIALOG_OPEN = 54; PROJECT_STRUCTURE_DIALOG_SAVE = 55; PROJECT_STRUCTURE_DIALOG_TOP_TAB_CLICK = 56; PROJECT_STRUCTURE_DIALOG_TOP_TAB_SAVE = 57; PROJECT_STRUCTURE_DIALOG_LEFT_NAV_CLICK = 58; PROJECT_STRUCTURE_DIALOG_LEFT_NAV_SAVE = 59; // A gradle build profile GRADLE_BUILD_PROFILE = 60; // The LLDB Frontend has unexpectedly exited LLDB_FRONTEND_EXITED = 61; // The Firebase assistant created a project. FIREBASE_ASSISTANT_PROJECT_CREATED = 62; // The Firebase assistant failed to create a project. FIREBASE_ASSISTANT_PROJECT_CREATE_FAILED = 63; // The Firebase assistant upgraded a project. FIREBASE_ASSISTANT_PROJECT_UPGRADED = 64; // The Firebase assistant failed to upgrade a project. FIREBASE_ASSISTANT_PROJECT_UPGRADE_FAILED = 66; // The Firebase assistant failed to create a config. FIREBASE_ASSISTANT_PROJECT_CONFIG_CREATE_FAILED = 67; // The Firebase assistant updated a project. FIREBASE_ASSISTANT_PROJECT_UPDATED = 68; // The Firebase assistant failed to update a project. FIREBASE_ASSISTANT_PROJECT_UPDATE_FAILED = 69; // The Firebase assistant failed to write the project config. FIREBASE_ASSISTANT_PROJECT_CONFIG_WRITE_FAILED = 70; // The Firebase assistant failed as the user did not accept the TOS. FIREBASE_ASSISTANT_TOS_FAILED = 71; // The Firebase assistant is trying to login. FIREBASE_ASSISTANT_ATTEMPT_LOGIN = 72; // The Firebase assistant successfully logged in. FIREBASE_ASSISTANT_LOGIN_SUCCESS = 73; // The Firebase assistant showed the dialog to offer to reconnect. FIREBASE_ASSISTANT_RECONNECT_DIALOG_SYNC = 74; // The Firebase assistant was requested to connect to the server. FIREBASE_ASSISTANT_CONNECT_REQUESTED = 75; // The Firebase assistant panel was opened. FIREBASE_ASSISTANT_OPEN = 76; // The Firebase assistant connect dialog was opened. FIREBASE_ASSISTANT_CONNECT_DIALOG_OPENED = 77; // The Firebase assistant connect dialog was asked to connect. FIREBASE_ASSISTANT_CONNECT_DIALOG_SYNC = 78; // The Firebase assistant presented an error to the user. FIREBASE_ASSISTANT_ERROR_PRESENTED = 79; // The Firebase assistant encounted an error but didn't inform the user. FIREBASE_ASSISTANT_SILENT_ERROR = 80; // The Firebase assistant reconnect dialog was opened. FIREBASE_ASSISTANT_RECONNECT_DIALOG_OPENED = 81; // The GPU Debugger tracing had an initialization failure. GFX_TRACE_INIT_ERROR = 82; // The GPU Debugger tracing was closed. GFX_TRACE_CLOSED = 83; // The GPU Debugger tracing had a parameter edited. GFX_TRACE_PARAMETER_EDITED = 84; // The GPU Debugger tracing was started. GFX_TRACE_TRACE_STARTED = 85; // The GPU Debugger tracing was stopped. GFX_TRACE_TRACE_STOPPED = 86; // A UI command influencing the GPU Debugger was selected. GFX_TRACE_COMMAND_SELECTED = 87; // A link from the GPU Debugger tracing results was clicked. GFX_TRACE_LINK_CLICKED = 88; // A memory snapshot from the GPU Debugger tracing results was clicked. GFX_TRACE_MEMORY_VIEWED = 89; // A texture from the GPU Debugger tracing results was viewed. GFX_TRACE_TEXTURE_VIEWED = 90; // A "legacy" IntelliJ style project was loaded. LEGACY_IDEA_ANDROID_PROJECT = 91; // The user requested the test recorder to generate a test class. TEST_RECORDER_GENERATE_TEST_CLASS = 92; // The test recorder detected missing espresso dependencies. TEST_RECORDER_MISSING_ESPRESSO_DEPENDENCIES = 93; // The test recorder detected missing instrumentation test folder. TEST_RECORDER_MISSING_INSTRUMENTATION_TEST_FOLDER = 94; // The test recorder was launched. TEST_RECORDER_LAUNCH = 95; // A GPU Debugger Trace session was opened but not started yet. GFX_TRACE_OPEN = 96; // Statistics on user actions in the Android Studio UI. STUDIO_UI_ACTION_STATS = 97; // Stats on the current running Android Studio process. STUDIO_PROCESS_STATS = 98; // Stats on Studio's performance STUDIO_PERFORMANCE_STATS = 99; // Performance stats for LLDB operations. LLDB_PERFORMANCE_STATS = 100; // User opened a project in the IDE. STUDIO_PROJECT_OPENED = 101; // User closed a project in the IDE. STUDIO_PROJECT_CLOSED = 102; // Feature grouping of tutorials expanded. FIREBASE_ASSISTANT_FEATURE_EXPANDED = 103; // Tutorial opened. FIREBASE_ASSISTANT_TUTORIAL_OPENED = 104; // Tutorial closed via navigation. FIREBASE_ASSISTANT_TUTORIAL_CLOSED = 105; // Project update failed due to permissions issue. FIREBASE_ASSISTANT_PROJECT_UPDATE_DENIED = 106; // Terms of service accepted by user. FIREBASE_ASSISTANT_TOS_ACCEPTED = 107; // Dependency added. FIREBASE_ASSISTANT_DEPENDENCY_ADDED = 108; // Layout editor event LAYOUT_EDITOR_EVENT = 109; // Receive sync response and start to setup project in IDE. GRADLE_SYNC_SETUP_STARTED = 110; // For event from App Links Assistant. APP_LINKS_ASSISTANT_STATS = 111; // Emulator performance tracking. EMULATOR_PERFORMANCE_STATS = 112; // The user saved a recorded Robo bootstrap script. TEST_RECORDER_SAVE_ROBO_SCRIPT = 113; // Opened ADB Connection Help Link ADB_ASSISTANT_STATS = 114; // A native debug session ended. LLDB_SESSION_ENDED = 115; // Android Profiler event ANDROID_PROFILER = 116; // APK Analyzer Statistics APK_ANALYZER_STATS = 117; // The user launched the test recorder to record a Robo bootstrap script. TEST_RECORDER_RECORD_ROBO_SCRIPT = 118; // Instant Run Notification Tracking INSTANT_RUN_PROMPT_FOR_APPLY_CHANGES_SHOWN = 119; // APK Main module imported for debugging APK_DEBUG_IMPORT = 120; // Attach java sources for apk debuggging APK_DEBUG_ATTACH_JAVA_SOURCES = 121; // Add debug symbols for apk debugging APK_DEBUG_ADD_SYMBOLS = 122; // Select Path mappings for apk debugging APK_DEBUG_SELECT_PATH_MAPPINGS = 123; // Layout Inspector event LAYOUT_INSPECTOR_EVENT = 124; // Android Profiler database statistics ANDROID_PROFILER_DB_STATS = 125; // Connection Assistant event CONNECTION_ASSISTANT_EVENT = 126; // Out of Memory Dialog event STUDIO_UI_OOM_DIALOG_EVENT = 127; // The event is related to CMake editing. CMAKE_EDITING_EVENT = 128; // The event is related to C++ header file view in Android Project CPP_HEADERS_VIEW_EVENT = 129; // The event is related to What's New Assistant // Deprecated since 3.6.0.8, use WHATS_NEW_ASSISTANT_UPDATE_EVENT instead. WHATS_NEW_ASSISTANT_EVENT = 130 [deprecated = true]; // Indexing operation event. INTELLIJ_INDEXING_STATS = 131; // The event is related to a lint session LINT_SESSION = 132; // The event is related to taking an action on a lint suggestion LINT_ACTION = 133; // Events related to a “Run” in studio STUDIO_RUN_EVENT = 134 [deprecated = true]; // The event is related to count files in a search scope INTELLIJ_PROJECT_SIZE_STATS = 135; // The event is related to a tool window STUDIO_TOOL_WINDOW_ACTION_STATS = 136; // The event is related to a JNI inspection JNI_INSPECTION = 137; // The event is descibing user sentiment USER_SENTIMENT = 138; // More events on the UI of Project Structure Dialog PROJECT_STRUCTURE_DIALOG_APPLY = 139; PROJECT_STRUCTURE_DIALOG_CANCEL = 140; PROJECT_STRUCTURE_DIALOG_VARIABLES_ADD_SIMPLE = 141; PROJECT_STRUCTURE_DIALOG_VARIABLES_ADD_LIST = 142; PROJECT_STRUCTURE_DIALOG_VARIABLES_ADD_MAP = 143; PROJECT_STRUCTURE_DIALOG_VARIABLES_REMOVE = 144; PROJECT_STRUCTURE_DIALOG_VARIABLES_RENAME = 145; PROJECT_STRUCTURE_DIALOG_VARIABLES_MODIFY_VALUE = 146; PROJECT_STRUCTURE_DIALOG_MODULES_ADD = 147; PROJECT_STRUCTURE_DIALOG_MODULES_REMOVE = 148; PROJECT_STRUCTURE_DIALOG_MODULES_RENAME = 149; PROJECT_STRUCTURE_DIALOG_MODULES_SIGNINGCONFIGS_ADD = 150; PROJECT_STRUCTURE_DIALOG_MODULES_SIGNINGCONFIGS_REMOVE = 151; PROJECT_STRUCTURE_DIALOG_MODULES_SIGNINGCONFIGS_RENAME = 152; PROJECT_STRUCTURE_DIALOG_DEPENDENCIES_ADD_LIBRARY = 153; PROJECT_STRUCTURE_DIALOG_DEPENDENCIES_ADD_MODULE = 154; PROJECT_STRUCTURE_DIALOG_DEPENDENCIES_ADD_JAR = 155; PROJECT_STRUCTURE_DIALOG_DEPENDENCIES_REMOVE = 156; PROJECT_STRUCTURE_DIALOG_BUILTYPES_ADD = 157; PROJECT_STRUCTURE_DIALOG_BUILTYPES_REMOVE = 158; PROJECT_STRUCTURE_DIALOG_BUILTYPES_RENAME = 159; PROJECT_STRUCTURE_DIALOG_FLAVORS_DIMENSION_ADD = 160; PROJECT_STRUCTURE_DIALOG_FLAVORS_DIMENSION_REMOVE = 161; PROJECT_STRUCTURE_DIALOG_FLAVORS_DIMENSION_RENAME = 162; PROJECT_STRUCTURE_DIALOG_FLAVORS_PRODUCTFLAVOR_ADD = 163; PROJECT_STRUCTURE_DIALOG_FLAVORS_PRODUCTFLAVOR_REMOVE = 164; PROJECT_STRUCTURE_DIALOG_FLAVORS_PRODUCTFLAVOR_RENAME = 165; PROJECT_STRUCTURE_DIALOG_UPDATE_LIBRARY_VERSION = 166; // Deploying and running apps from studio RUN_EVENT = 167; // Studio's LowMemoryWatcher triggered STUDIO_LOW_MEMORY_EVENT = 168; // Project Structure Dialog repository search events. PROJECT_STRUCTURE_DIALOG_REPOSITORIES_SEARCH = 169; // Navigation Editor event NAV_EDITOR_EVENT = 170; // User took an action on a dialog (open or close) DIALOG_STATS = 171; // User took an action to invalidate caches PROJECT_SYSTEM_INVALIDATE_CACHES = 172; // Performed an action with the Gradle Plugin Upgrade dialog GRADLE_PLUGIN_UPGRADE_DIALOG = 173; // Data binding related metrics DATA_BINDING = 174; // Typing latency statistics. TYPING_LATENCY_STATS = 175; // Sync failure details reported to the user (previously reported as a // GRADLE_SYNC_FAILURE). GRADLE_SYNC_FAILURE_DETAILS = 176; // Sync issues reported to the user (after sync completed). GRADLE_SYNC_ISSUES = 177; // Android Studio Patch Updater events STUDIO_PATCH_UPDATER = 178; // Resource Manager events RESOURCE_MANAGER = 179; // Info on which IDE plugins are enabled for the current session. IDE_PLUGIN_INFO = 180; // Editor syntax highlighting statistics. EDITOR_HIGHLIGHTING_STATS = 181; // Status of Windows Defender WINDOWS_DEFENDER_STATUS = 182; // Memory settings configuration statistics MEMORY_SETTINGS_EVENT = 183; // Studio update flow events STUDIO_UPDATE_FLOW = 184; // Build output window statistics when build fails. BUILD_OUTPUT_WINDOW_STATS = 185; // Stats about the use of the Android Gradle Plugin DSL GRADLE_PLUGIN_DSL_USAGE_STATS = 186; // The event is related to What's New Assistant update flow WHATS_NEW_ASSISTANT_UPDATE_EVENT = 188; // APK reload operation started APK_DEBUG_RELOAD_START = 189; // APK reload finished without errors APK_DEBUG_RELOAD_SUCCESS = 190; // Information about how long DefaultActivityLocator blocked on getting // a list of activities from the merged manifest. DEFAULT_ACTIVITY_LOCATOR_STATS = 191; // Motion Layout Editor event MOTION_LAYOUT_EDITOR_EVENT = 192; // Opening the Compose sample project COMPOSE_SAMPLE_EVENT = 193; // Importing a sample project from the sample browser UI IMPORT_SAMPLE_EVENT = 194; // Dynamic layout inspector (layout inspector v2) event DYNAMIC_LAYOUT_INSPECTOR_EVENT = 195; // Information on collected build attribution data and performance BUILD_ATTRIBUTION_STATS = 196; // Editor code completion stats. EDITOR_COMPLETION_STATS = 197; // Multi View Panel event MULTI_VIEW_EVENT = 198; // Build Attribution ui event BUILD_ATTRIBUTION_UI_EVENT = 199; ANDROID_CPP_EXTENSION = 200; // The event related to help panels in design editor DESIGN_EDITOR_HELP_PANEL_EVENT = 201; // Any event related to the app inspection tool window or any of its child // inspector tabs. APP_INSPECTION = 202; // ML model binding feature events ML_MODEL_BINDING = 203; // Event related to Navigation Safe Args IDE support NAV_SAFE_ARGS_EVENT = 205; // The event related to Dagger editor support. DAGGER_EDITOR = 206; // The event related to test reporting UI. PARALLEL_ANDROID_TEST_REPORT_UI = 207; // Event related to Apply Changes agent error logs. APPLY_CHANGES_AGENT_ERROR = 208; GAME_TOOLS_PING = 209; AGDE_PING = 210; // Events related to Upgrade Assistant processing. UPGRADE_ASSISTANT_COMPONENT_EVENT = 211; UPGRADE_ASSISTANT_PROCESSOR_EVENT = 212; // A new file/project is created by the wizards based on a template. WIZARD_TEMPLATES_USAGE = 213; // Interactive Preview event INTERACTIVE_PREVIEW_EVENT = 214; // Event related to Compose animation tooling, e.g. animation inspector. COMPOSE_ANIMATION_TOOLING = 215; // User clicked something in the Emulator UI. EMULATOR_UI_EVENTS = 216; // Event related to a survey response SURVEY_RESPONSE = 217; // Event related to deploying Compose previews. COMPOSE_DEPLOY = 218; // Deprecated, use SUGGESTED_IMPORT_EVENT instead. // Event related to auto-import support. AUTO_IMPORT_EVENT = 219 [deprecated = true]; // Event related to file usage data FILE_USAGE = 220; // Event related to live literals. LIVE_LITERALS_EVENT = 221; // Event related to Non-Transitive R class migration. MIGRATE_TO_NON_TRANSITIVE_R_CLASS = 222; // Event related to Android Test Retention ANDROID_TEST_RETENTION_EVENT = 223; // Event related to suggested import support. SUGGESTED_IMPORT_EVENT = 224; // Event related to IntelliJ collected VFS refresh VFS_REFRESH = 225; // Events related to Bundle/APK Signing wizard // Dialog is opened SIGNING_WIZARD_OPEN = 226; // Ok action was performed ("Finish" button pressed) SIGNING_WIZARD_OK_ACTION = 227; // Cancel action was performed ("Cancel" button is pressed or dialog closed) SIGNING_WIZARD_CANCEL_ACTION = 228; // Failed to sign Gradle project SIGNING_WIZARD_GRADLE_SIGNING_FAILED = 229; // Gradle project successfully signed SIGNING_WIZARD_GRADLE_SIGNING_SUCCEEDED = 230; // Failed to sign Intellij project SIGNING_WIZARD_INTELLIJ_SIGNING_FAILED = 231; // INTELLIJ project successfully signed SIGNING_WIZARD_INTELLIJ_SIGNING_SUCCEEDED = 232; // File type information for a project FILE_TYPE = 233; // Kotlin project information logged by IntelliJ KOTLIN_PROJECT_CONFIGURATION = 234; // Event related to IntelliJ Run Start data being logged RUN_START_DATA = 235; // Event related to IntelliJ Run Finish data being logged RUN_FINISH_DATA = 236; // Event related to the device manager tool window, the replacement for the // AVD manager DEVICE_MANAGER = 237; // Event related to Wear OS emulator pairing assistant WEAR_PAIRING = 238; // Event to report why Gradle JDK is invalid GRADLE_JDK_INVALID = 239; // Event related to the device explorer tool DEVICE_EXPLORER = 240; // Event related to user opting in to metrics OPTIN_METRICS = 241; // Event related to user opting out of metrics OPTOUT_METRICS = 242; // Event related to project Version Catalog usage detection GRADLE_VERSION_CATALOG_DETECTOR = 243; // Event related to coroutine debugger COROUTINE_DEBUGGER = 244; // Event related to usage of Splitting Tabs tool windows SPLITTING_TABS_USAGE = 245; // Event related to usage of the Logcat tool window LOGCAT_USAGE = 246; // OS-level metrics OS_METRICS = 247; // Events related to Google Play SDK Index // SDK Index was loaded correctly SDK_INDEX_LOADED_CORRECTLY = 248; // Error while reading SDK Index from cache or network SDK_INDEX_CACHING_ERROR = 249; // Error while reading SDK Index from default resource SDK_INDEX_DEFAULT_DATA_ERROR = 250; // Link provided by the SDK Index was used SDK_INDEX_LINK_FOLLOWED = 251; // Library has critical issues in the SDK Index SDK_INDEX_LIBRARY_HAS_CRITICAL_ISSUES = 252; // Library has is marked as outdated in the SDK Index SDK_INDEX_LIBRARY_IS_OUTDATED = 253; // Library has is marked as non compliant in the SDK Index SDK_INDEX_LIBRARY_IS_NON_COMPLIANT = 254; // Event related to Pickers invoked from the Editor's gutter EDITOR_PICKER = 255; // Event type used when raw_project_ids set PROJECT_IDS = 256; // Event related to Compose MultiPreview COMPOSE_MULTI_PREVIEW = 257; // Event related to a LiveEdit action LIVE_EDIT_EVENT = 258; // User pressed stop button for configurations that run App Component STOP_EVENT = 259; // App Quality Insights Event APP_QUALITY_INSIGHTS_USAGE = 260; // Google Login plugin event GOOGLE_LOGIN_EVENT = 261; // Event recording mirroring of a device in the Running Devices tool window DEVICE_MIRRORING_SESSION = 262; // Event related to a Fast Preview action FAST_PREVIEW_EVENT = 263; // Event containing a per-component memory usage report MEMORY_USAGE_REPORT_EVENT = 264; } // Represents different Performance Monitoring types. enum MonitorType { UNKNOWN_MONITOR_TYPE = 0; CPU = 1; GPU = 2; MEMORY = 3; NETWORK = 4; } // Represents different Performance Profiler Capture types. enum ProfilerCaptureType { UNKNOWN_PROFILER_CAPTURE_TYPE = 0; ALLOCATION = 1; FILE = 2; GFX_TRACE = 3; HEAP = 4; SYSTEM_INFO = 5; VM_TRACE = 6; METHOD_TRACING = 7; LAYOUT_INSPECTOR_SNAPSHOT = 8; HIERARCHY_VIEW = 9; } // Represents the different Run Configurations the debugger supports. enum RunConfigurationType { UNKNOWN_RUN_CONFIGURATION_TYPE = 0; ANDROID = 1; ANDROID_NATIVE = 2; ANDROID_TEST = 3; } // Represents the different debugger types supported. enum DebuggerType { UNKNOWN_DEBUGGER_TYPE = 0; JAVA = 1; HYBRID = 2; NATIVE = 3; } // Represents the different Google Developer Services that can be // (semi-)automatically integrated into Android Applications. enum DeveloperServiceKind { UNKNOWN_DEVELOPER_SERVICE_KIND = 0; GOOGLE_CLOUD_MESSAGING = 1; AD_MOB = 2; GOOGLE_SIGN_IN = 3; GOOGLE_ANALYTICS = 4; FIREBASE = 5; REALTIME_DATABASE = 6; AUTHENTICATION = 7; CRASH_REPORTING = 8; NOTIFICATIONS = 9; REMOTE_CONFIG = 10; STORAGE = 11; APP_INVITES = 12; DYNAMIC_LINKS = 13; } // The various templates the template engine could be asked to render. enum TemplateRenderer { UNKNOWN_TEMPLATE_RENDERER = 0; CUSTOM_TEMPLATE_RENDERER = 1; ANDROID_MODULE = 2; ANDROID_PROJECT = 3; EMPTY_ACTIVITY = 4; BLANK_ACTIVITY = 5; LAYOUT_XML_FILE = 6; FRAGMENT_BLANK = 7; NAVIGATION_DRAWER_ACTIVITY = 8; VALUES_XML_FILE = 9; GOOGLE_MAPS_ACTIVITY = 10; LOGIN_ACTIVITY = 11; ASSETS_FOLDER = 12; TABBED_ACTIVITY = 13; SCROLLING_ACTIVITY = 14; FULLSCREEN_ACTIVITY = 15; SERVICE = 16; JAVA_LIBRARY = 17; // corresponds to "Java or Kotlin Library" SETTINGS_ACTIVITY = 18; FRAGMENT_LIST = 19; MASTER_DETAIL_FLOW = 20; ANDROID_WEAR_MODULE = 21; BROADCAST_RECEIVER = 22; AIDL_FILE = 23; INTENT_SERVICE = 24; JNI_FOLDER = 25; JAVA_FOLDER = 26; CUSTOM_VIEW = 27; ANDROID_TV_MODULE = 28; GOOGLE_ADMOBS_ADS_ACTIVITY = 29; ALWAYS_ON_WEAR_ACTIVITY = 30 [deprecated = true]; RES_FOLDER = 31; ANDROID_TV_ACTIVITY = 32; BLANK_WEAR_ACTIVITY = 33; BASIC_ACTIVITIY = 34; APP_WIDGET = 35; ANDROID_INSTANT_APP_PROJECT = 36 [deprecated = true]; ANDROID_INSTANT_APP_MODULE = 37 [deprecated = true]; ANDROID_INSTANT_APP_BUNDLE_PROJECT = 38 [deprecated = true]; ANDROID_INSTANT_APP_DYNAMIC_MODULE = 39 [deprecated = true]; BENCHMARK_LIBRARY_MODULE = 40; FRAGMENT_FULLSCREEN = 41; FRAGMENT_GOOGLE_ADMOB_ADS = 42; FRAGMENT_GOOGLE_MAPS = 43; FRAGMENT_LOGIN = 44; FRAGMENT_MODAL_BOTTOM_SHEET = 45; FRAGMENT_SCROLL = 46; FRAGMENT_SETTINGS = 47; FRAGMENT_VIEWMODEL = 48; COMPOSE_EMPTY_ACTIVITY = 49; ANDROID_LIBRARY = 50; DYNAMIC_FEATURE_MODULE = 51; INSTANT_DYNAMIC_FEATURE_MODULE = 52; AUTOMOTIVE_MODULE = 53; THINGS_MODULE = 54 [deprecated = true]; AUTOMOTIVE_MEDIA_SERVICE = 55; AUTOMOTIVE_MESSAGING_SERVICE = 56; THINGS_ACTIVITY = 57 [deprecated = true]; WATCH_GOOGLE_MAPS_ACTIVITY = 58; WATCH_FACE = 59; ML_MODEL_BINDING_IMPORT_WIZARD = 60; ML_MODEL_BINDING_FEATURE_OFF_NOTIFICATION = 61; ANDROID_NATIVE_MODULE = 62; RESPONSIVE_ACTIVITY = 63; MACROBENCHMARK_LIBRARY_MODULE = 64; GOOGLE_PAY_ACTIVITY = 65; WEAR_OS_COMPOSE_ACTIVITY = 66; } // Wizard Templates Usage (New Project, New Module and New Component) message TemplatesUsage { // Rendered template component (eg Activity, Fragment, Service, etc) optional TemplateComponent template_component = 1; // Module used to generate code. Can be an existing or a new one. optional TemplateModule template_module = 2; // Project used to generate code. Can be an existing or a new one. optional TemplateProject template_project = 3; // Kotlin support information optional KotlinSupport kotlin_support = 4; // The various template components (eg Activities, Fragments, Services, etc) // the template engine could be asked to render, and what UI context that // was used by the user to make the request (eg menu, New Project Wizard, // etc) message TemplateComponent { // The different template component (eg Activity, Fragment, Service, etc) // the template engine could be asked to render optional TemplateType template_type = 1; // The UI context used by the user to make the request (eg menu, // New Project Wizard, etc) optional WizardUiContext wizard_ui_context = 2; // The different template components (eg Activities, Fragments, Services, // etc) the template engine could be asked to render // Next ID: 61 enum TemplateType { UNKNOWN_TEMPLATE = 0; CUSTOM_TEMPLATE = 1; NO_ACTIVITY = 2; EMPTY_ACTIVITY = 3; BASIC_ACTIVITY = 4; NAVIGATION_DRAWER_ACTIVITY = 5; LOGIN_ACTIVITY = 6; TABBED_ACTIVITY = 7; SCROLLING_ACTIVITY = 8; FULLSCREEN_ACTIVITY = 9; SETTINGS_ACTIVITY = 10; PRIMARY_DETAIL_FLOW_ACTIVITY = 11; COMPOSE_EMPTY_ACTIVITY = 12; WEAR_GOOGLE_MAPS_ACTIVITY = 13; WEAR_FACE_ACTIVITY = 14; BLANK_WEAR_ACTIVITY = 15; GOOGLE_MAPS_ACTIVITY = 16; GOOGLE_ADMOBS_ADS_ACTIVITY = 17; ANDROID_TV_EMPTY_ACTIVITY = 18; THINGS_EMPTY_ACTIVITY = 19 [deprecated = true]; VIEW_MODEL_ACTIVITY = 20; BOTTOM_NAVIGATION_ACTIVITY = 21; CPP_EMPTY_ACTIVITY = 22; RESPONSIVE_ACTIVITY = 57; GOOGLE_PAY_ACTIVITY = 58; CPP_GAME_ACTIVITY = 60; FRAGMENT_LIST = 23; FRAGMENT_BLANK = 24; FRAGMENT_FULLSCREEN = 25; FRAGMENT_GOOGLE_ADMOB_ADS = 26; FRAGMENT_GOOGLE_MAPS = 27; FRAGMENT_LOGIN = 28; FRAGMENT_MODAL_BOTTOM_SHEET = 29; FRAGMENT_SCROLL = 30; FRAGMENT_SETTINGS = 31; FRAGMENT_VIEW_MODEL = 32; AUTOMOTIVE_MEDIA_SERVICE = 33; AUTOMOTIVE_MESSAGING_SERVICE = 34; ASSETS_FOLDER = 35; JNI_FOLDER = 36; JAVA_FOLDER = 37; RES_FOLDER = 38; AIDL_FOLDER = 39; FONT_FOLDER = 40; RAW_RESOURCES_FOLDER = 41; JAVA_RESOURCES_FOLDER = 42; XML_RESOURCES_FOLDER = 43; RENDER_SCRIPT_FOLDER = 44; AIDL_FILE = 45; ANDROID_MANIFEST_FILE = 46; APP_ACTIONS_XML_FILE = 47 [deprecated = true]; LAYOUT_XML_FILE = 48; VALUES_XML_FILE = 49; SHORTCUTS_XML_FILE = 59; CUSTOM_VIEW = 50; BROADCAST_RECEIVER = 51; INTENT_SERVICE = 52; APP_WIDGET = 53; SERVICE = 54; SLICE_PROVIDER = 55; CONTENT_PROVIDER = 56; } // The UI context used by the user to make the Template render request enum WizardUiContext { UNKNOWN_UI_CONTEXT = 0; NEW_PROJECT = 1; NEW_MODULE = 2; MENU_GALLERY = 3; ACTIVITY_GALLERY = 4; FRAGMENT_GALLERY = 5; GENERATE_RECYCLER = 6; } } // Module used to generate code. Can be an existing or a new one. message TemplateModule { // The different Module Types that can be created. This information // should be reliable to new Modules, but may not be possible to determine // for existing ones. optional ModuleType module_type = 1; // Android Min SDK. optional uint32 min_sdk = 2; // Java bytecode level - Used for Android libraries optional BytecodeLevel bytecode_level = 3; // All different Module Types that can be created. enum ModuleType { UNKNOWN = 0; NOT_APPLICABLE = 1; PHONE_TABLET = 2; ANDROID_LIBRARY = 3; DYNAMIC_FEATURE = 4; INSTANT_DYNAMIC_FEATURE = 5; AUTOMOTIVE = 6; WEAR_OS = 7; ANDROID_TV = 8; ANDROID_THINGS = 9 [deprecated = true]; IMPORT_GRADLE = 10; IMPORT_ECLIPSE = 11; IMPORT_JAR_AAR = 12; JAVA_OR_KOTLIN_LIBRARY = 13; BENCHMARK_LIBRARY = 14; } // Java byte code level enum BytecodeLevel { LEVEL_6 = 0; LEVEL_7 = 1; LEVEL_8 = 2; } } // Project used to generate code. Can be an existing or a new one. message TemplateProject { // True for old AppCompat projects. optional bool uses_legacy_support = 1; // Whether or not the project uses Kotlin build files ("build.gradle.kts") optional bool uses_build_gradle_kts = 2; } } // Reasons Gradle sync failed. enum GradleSyncFailure { UNKNOWN_GRADLE_FAILURE = 0; CONNECTION_DENIED = 1; CLASS_NOT_FOUND = 2; DSL_METHOD_NOT_FOUND = 3; FAILED_TO_PARSE_SDK = 4; METHOD_NOT_FOUND = 5; MISSING_ANDROID_PLATFORM = 6; MISSING_ANDROID_SUPPORT_REPO = 7; MISSING_BUILD_TOOLS = 8; OUT_OF_MEMORY = 9; SDK_NOT_FOUND = 10; UNKNOWN_HOST = 11; UNSUPPORTED_ANDROID_MODEL_VERSION = 12; UNSUPPORTED_GRADLE_VERSION = 13; CANNOT_BE_CAST_TO = 14; BROKEN_PIPE = 15; CANNOT_OPEN_ZIP_FILE = 16; OBJECT_STREAM_ERROR = 17; NDK_INTEGRATION_DEPRECATED = 18; SDK_BUILD_TOOLS_TOO_LOW = 19; CACHED_DEPENDENCY_NOT_FOUND = 20; UNEXPECTED_ERROR = 21; GRADLE2_REQUIRED = 22; CORRUPT_GRADLE_DEPENDENCY = 23; INTERNET_CONNECTION_ERROR = 24; OLD_ANDROID_PLUGIN = 25; MISSING_CMAKE = 26; NDK_NOT_CONFIGURED = 27; FAILED_TO_INSTALL_NDK_BUNDLE = 28; UNSUPPORTED_MODEL_VERSION = 29; DAEMON_CONTEXT_MISMATCH = 30; JAVA_HEAP_ERROR = 31; JDK8_REQUIRED = 32; GRADLE_DISTRIBUTION_INSTALL_ERROR = 33; DISTRIBUTIONSHA256SUM_FOUND_IN_WRAPPER = 34; } // IDE brand containing the android plugin enum IdeBrand { UNKNOWN_IDE_BRAND = 0; ANDROID_STUDIO = 1; ANDROID_STUDIO_WITH_BLAZE = 2; INTELLIJ = 3; // For the Toolkit preview build released at Google IO 2019 ANDROID_STUDIO_TOOLKIT_2019_IO_PREVIEW = 4; GAME_TOOLS = 5; AGDE = 6; } // Gradle sync issue type. enum GradleSyncIssueType { UNKNOWN_GRADLE_SYNC_ISSUE_TYPE = 0; TYPE_PLUGIN_OBSOLETE = 1; TYPE_UNRESOLVED_DEPENDENCY = 2; TYPE_DEPENDENCY_IS_APK = 3; TYPE_DEPENDENCY_IS_APKLIB = 4; TYPE_NON_JAR_LOCAL_DEP = 5; TYPE_NON_JAR_PACKAGE_DEP = 6; TYPE_NON_JAR_PROVIDED_DEP = 7; TYPE_JAR_DEPEND_ON_AAR = 8; // Mismatch dependency version between tested and test app. Data is dep // coordinate without the version (groupId:artifactId) TYPE_MISMATCH_DEP = 9; TYPE_OPTIONAL_LIB_NOT_FOUND = 10; TYPE_JACK_IS_NOT_SUPPORTED = 11; TYPE_GRADLE_TOO_OLD = 12; TYPE_BUILD_TOOLS_TOO_LOW = 13; // Found dependency that's the maven published android.jar. Data is the // maven artifact coordinates. TYPE_DEPENDENCY_MAVEN_ANDROID = 14; // Found dependency that is known to be inside android.jar. Data is maven // artifact coordinates. TYPE_DEPENDENCY_INTERNAL_CONFLICT = 15; // Errors configuring NativeConfigValues for individual individual variants TYPE_EXTERNAL_NATIVE_BUILD_CONFIGURATION = 16; // Errors configuring NativeConfigValues. There was a process exception. // Data contains STDERR which should be interpreted by Android Studio. TYPE_EXTERNAL_NATIVE_BUILD_PROCESS_EXCEPTION = 17; // Cannot use Java 8 Language features without Jack. TYPE_JACK_REQUIRED_FOR_JAVA_8_LANGUAGE_FEATURES = 18; // A wearApp configuration was resolved and found more than one apk. Data is // the configuration name. TYPE_DEPENDENCY_WEAR_APK_TOO_MANY = 19; // A wearApp configuration was resolved and found an apk even though // unbundled mode is on. TYPE_DEPENDENCY_WEAR_APK_WITH_UNBUNDLED = 20; TYPE_JAR_DEPEND_ON_ATOM = 21; TYPE_AAR_DEPEND_ON_ATOM = 22; TYPE_ATOM_DEPENDENCY_PROVIDED = 23; // Indicates that a required SDK package was not installed. The data field // contains the sdklib package ID of the missing package that the user // should install. TYPE_MISSING_SDK_PACKAGE = 24; // Indicates that the plugin requires a newer version of studio. Minimum // version is passed in the data. TYPE_STUDIO_TOO_OLD = 25; // Indicates that the module contains flavors but that no dimensions have // been named. data is empty. TYPE_UNNAMED_FLAVOR_DIMENSION = 26; // An incompatible plugin is used. TYPE_INCOMPATIBLE_PLUGIN = 27; // Indicates that the project uses a deprecated DSL. TYPE_DEPRECATED_DSL = 28; // Indicates that the project uses a deprecated configuration. // This type is now replaced with TYPE_USING_DEPRECATED_CONFIGURATION // because of an indexing issue in the past // (see http://issuetracker.google.com/138278313). TYPE_DEPRECATED_CONFIGURATION = 29 [deprecated = true]; // Indicates that the project uses a deprecated DSL value. // This type is now replaced with TYPE_USING_DEPRECATED_DSL_VALUE // because of an indexing issue in the past // (see http://issuetracker.google.com/138278313). TYPE_DEPRECATED_DSLVALUE = 30 [deprecated = true]; // Indicates that the project contains the min sdk in the android manifest // file. TYPE_MIN_SDK_VERSION_IN_MANIFEST = 31; // Indicates that the project contains the target sdk in the android // manifest file. TYPE_TARGET_SDK_VERSION_IN_MANIFEST = 32; // Indicated that an experimental gradle project option is used. TYPE_UNSUPPORTED_PROJECT_OPTION_USE = 33; // Indicates that building the configuration rules for this project requires // parsing the manifest file. TYPE_MANIFEST_PARSED_DURING_CONFIGURATION = 34; // Indicates that the version of a third-party Gradle plugin (not the // Android Gradle plugin) is not supported and needs to be updated. TYPE_THIRD_PARTY_GRADLE_PLUGIN_TOO_OLD = 35; // Indicates that the signing configuration is declared in the // dynamic-feature gradle file. This should only be declared in the // application module, as dynamic-features use the base module's signing // configuration, and this will be ignored. TYPE_SIGNING_CONFIG_DECLARED_IN_DYNAMIC_FEATURE = 36; // Indicates that the SDK is missing or invalid, this can either be set in // the ANDROID_SDK_ROOT environment variable or the projects // local.properties files. TYPE_SDK_NOT_SET = 37; // Indicates that the user has specified multiple default build types. TYPE_AMBIGUOUS_BUILD_TYPE_DEFAULT = 38; // Indicates that the user has specified multiple default product flavors. TYPE_AMBIGUOUS_PRODUCT_FLAVOR_DEFAULT = 39; // Indicates that the compileSdkVersion is missing. TYPE_COMPILE_SDK_VERSION_NOT_SET = 40; // Indicates that the `android.useAndroidX` property must be enabled but is // currently disabled. TYPE_ANDROID_X_PROPERTY_NOT_ENABLED = 41; // Indicates that the project uses a deprecated configuration. TYPE_USING_DEPRECATED_CONFIGURATION = 42; // Indicates that the project uses a deprecated DSL value. TYPE_USING_DEPRECATED_DSL_VALUE = 43; // Generic build file issues with file/line number information TYPE_BUILD_FILE_ISSUE = 44; // dynamic feature declared in base module does not exist TYPE_UNKNOWN_FEATURE = 45; // Declared source sets is not actually used by a variant TYPE_UNKNOWN_SOURCE_SET = 46; // Retro lambda plugin is present instead of using D8/R8 TYPE_RETRO_LAMBDA_PRESENT = 47; TYPE_RES_SHRINKER_WITH_APP_BUNDLE = 48; TYPE_RES_SHRINKER_WITH_LIBRARY_MODULE = 49; TYPE_INVALID_JAVA8_FLAGS = 50; TYPE_MISSING_JAVA8_FLAG = 51; TYPE_EDIT_LOCKED_DSL_VALUE = 52; TYPE_MISSING_ANDROID_MANIFEST = 53; // JCenter Maven is deprecated and it should not be used in build scripts. TYPE_JCENTER_IS_DEPRECATED = 54; // Java version used by AGP is too low. TYPE_AGP_USED_JAVA_VERSION_TOO_LOW = 55; // An AGP upgrade is recommended to use this compile sdk version. TYPE_COMPILE_SDK_VERSION_TOO_HIGH = 56; // A higher compileSdk is required for compilation. TYPE_COMPILE_SDK_VERSION_TOO_LOW = 57; // Trying to read/write to a variant api property that will not be used as // the feature using it is disabled. TYPE_ACCESSING_DISABLED_FEATURE_VARIANT_API = 58; // Using the variant API to set the application ID to a dynamic value TYPE_APPLICATION_ID_MUST_NOT_BE_DYNAMIC = 59; // NOTE: When adding a new type here, increment the index by 1. This index // may not be consistent with the corresponding value in the Android Gradle // plugin (e.g., it could be higher by 1), because of an indexing issue in // the past (see http://issuetracker.google.com/138278313). } // Various quick-fixes that are offered to resolve sync issues. enum GradleSyncQuickFix { UNKNOWN_GRADLE_SYNC_QUICK_FIX = 0; ADD_GOOGLE_MAVEN_REPOSITORY_HYPERLINK = 1; BUILD_PROJECT_HYPERLINK = 2; CREATE_GRADLE_WRAPPER_HYPERLINK = 3; DISABLE_OFFLINE_MODE_HYPERLINK = 4; DOWNLOAD_ANDROID_STUDIO_HYPERLINK = 5; DOWNLOAD_JDK8_HYPERLINK = 6; ENABLE_EMBEDDED_REPO_HYPERLINK = 7; FILE_BUG_HYPERLINK = 8; FIX_ANDROID_GRADLE_PLUGIN_VERSION_HYPERLINK = 9; FIX_BUILD_TOOLS_VERSION_HYPERLINK = 10; FIX_GRADLE_VERSION_IN_WRAPPER_HYPERLINK = 11; INSTALL_ARTIFACT_HYPERLINK = 12; INSTALL_BUILD_TOOLS_HYPERLINK = 13; INSTALL_C_MAKE_HYPERLINK = 14; INSTALL_NDK_HYPERLINK = 15; INSTALL_PLATFORM_HYPERLINK = 16; INSTALL_REPOSITORY_HYPERLINK = 17; INSTALL_SDK_PACKAGE_HYPERLINK = 18; INSTALL_SDK_TOOLS_HYPERLINK = 19; OPEN_ANDROID_SDK_MANAGER_HYPERLINK = 20; OPEN_BUILD_FILE_HYPERLINK = 21; OPEN_FILE_HYPERLINK = 22; OPEN_GRADLE_SETTINGS_HYPERLINK = 23; OPEN_HTTP_SETTINGS_HYPERLINK = 24; OPEN_PLUGIN_BUILD_FILE_HYPERLINK = 25; OPEN_PROJECT_STRUCTURE_HYPERLINK = 26; OPEN_URL_HYPERLINK = 27; REMOVE_SDK_FROM_MANIFEST_HYPERLINK = 28; SEARCH_IN_BUILD_FILES_HYPERLINK = 29; SELECT_JDK_FROM_FILE_SYSTEM_HYPERLINK = 30; SET_SDK_DIR_HYPERLINK = 31; SET_USE_DEPRECATED_NDK_HYPERLINK = 32; SHOW_DEPENDENCY_IN_PROJECT_STRUCTURE_HYPERLINK = 33; SHOW_LOG_HYPERLINK = 34; SHOW_SYNC_ISSUES_DETAILS_HYPERLINK = 35; STOP_GRADLE_DAEMONS_HYPERLINK = 36; SYNC_PROJECT_WITH_EXTRA_COMMAND_LINE_OPTIONS_HYPERLINK = 37; TOGGLE_OFFLINE_MODE_HYPERLINK = 38; UPDATE_PLUGIN_HYPERLINK = 39; UPGRADE_APPENGINE_PLUGIN_VERSION_HYPERLINK = 40; USE_CURRENTLY_RUNNING_JDK_HYPERLINK = 41; USE_EMBEDDED_JDK_HYPERLINK = 42; SET_NDK_DIR_HYPERLINK = 43; SET_CMAKE_DIR_HYPERLINK = 44; DELETE_FILE_HYPERLINK = 45; REMOVE_DISTRIBUTIONSHA256SUM_FROM_WRAPPER_HYPERLINK = 46; CONFIRM_DISTRIBUTIONSHA256SUM_FROM_WRAPPER_HYPERLINK = 47; ENABLE_ANDROIDX_HYPERLINK = 48; REMOVE_JCENTER_HYPERLINK = 49; } } // Describes a product, e.g. Android Studio or Emulator. message ProductDetails { // The product this event relates to. optional ProductKind product = 1; // The build ID of Android Studio. optional string build = 2; // e.g. AI-141.2178183 // The version of the product. optional string version = 3; // e.g. 2.0.0.11 // Historical: never used as it was not providing enough info. Use channel // instead as it distinguishes between different kinds of preview releases. optional bool preview = 4 [deprecated = true]; // The CPU archtecture the product is running on. optional CpuArchitecture os_architecture = 5; // The state in the software lifecycle of this product. optional SoftwareLifeCycleChannel channel = 6; // Set when ProductKind = STUDIO, the look and feel of the product. optional IdeTheme theme = 7; // Optional list of strings identifying experiments turned on for // the installation of Android Studio this log is sent for. // experiment_id Strings are generated by the Android Studio team and do not // contain user data. repeated string experiment_id = 8; // The changelist used to generate the server flags for this installation optional int64 server_flags_changelist = 9; // Various states in the software life cycle this software could be in. enum SoftwareLifeCycleChannel { UNKNOWN_LIFE_CYCLE_CHANNEL = 0; CANARY = 1; DEV = 2; BETA = 3; STABLE = 4; } // Describes the various Products related to Android Studio. enum ProductKind { UNKNOWN_PRODUCT = 0; STUDIO = 1; EMULATOR = 2; GRADLE = 3; DDMS = 4; STUDIO_PATCH_UPDATER = 5; ANDROID_CPP_EXTENSION = 6; GAME_TOOLS = 7; } // Chip the software is running on. enum CpuArchitecture { UNKNOWN_CPU_ARCHITECTURE = 0; X86 = 1; X86_64 = 2; ARM = 3; X86_ON_ARM = 4; } // The current theme set for Android Studio enum IdeTheme { UNKNOWN_THEME = 0; DARCULA = 1; LIGHT = 2; LIGHT_MAC_NATIVE = 3; LIGHT_WIN_NATIVE = 4; GTK = 5; HIGH_CONTRAST = 6; CUSTOM = 7; } } // Describes a emulator or physical Android Device. message DeviceInfo { // serial number of the device, salted & sha256ed on the client. optional string anonymized_serial_number = 1; // Tags used to build the android version on this device. // e.g. 'release-keys' or 'test-keys' or 'A100_V001' optional string build_tags = 2; // Type of build this device is running. // e.g. 'user' or 'userdebug' or 'eng' or 'alphabuild' optional string build_type = 3; // Android version e.g. '5.1.1' optional string build_version_release = 4; // Historic: doesn't support api levels for code names such as 'N'. optional int32 build_api_level = 5 [deprecated = true]; // ABI of the device, e.g. 'armeabi-v7a' or 'x86' optional ApplicationBinaryInterface cpu_abi = 6; // Device manufacturer, e.g. 'Motorola' or 'Samsung' optional string manufacturer = 7; // Device model, e.g. 'Nexus 5' or 'GT-I9500'. optional string model = 8; // What kind of device is this? Physicial/Emulator/Cloud etc... optional DeviceType device_type = 9; // android api level e.g. '23' or 'N' optional string build_api_level_full = 10; // Describes the type of mDNS connection (if any) optional MdnsConnectionType mdns_connection_type = 11; // Set of characteristics obtained from "ro.build.characteristics" property repeated string characteristics = 12; // Describes tthe ABI of the device/emulator. enum ApplicationBinaryInterface { UNKNOWN_ABI = 0; ARME_ABI_V7A = 1; X86_ABI = 2; ARM64_V8A_ABI = 3; X86_64_ABI = 4; ARME_ABI = 5; MIPS_ABI = 6; MIPS_R2_ABI = 7; ARME_ABI_V6L = 8; ARME_ABI_V6J = 9; } // Describes the kind of device being deployed/tested on. enum DeviceType { UNKNOWN_DEVICE_TYPE = 0; LOCAL_PHYSICAL = 1; LOCAL_EMULATOR = 2; CLOUD_EMULATOR = 3; CLOUD_PHYSICAL = 4; } // Describes the type of mDNS connection (if any) enum MdnsConnectionType { // Default value when the field has not been set. UNKNOWN_MDNS_CONNECTION_TYPE = 0; // The device connected *without* using mDNS. This is most likely USB, // emulator or legacy TCP. MDNS_NONE = 1; // The device connected through mDNS, unencrypted. This should be very rare, // as this is typically a connection from Android TV and WearOS when adb is // started with ADB_MDNS_AUTO_CONNECT=1. MDNS_AUTO_CONNECT_UNENCRYPTED = 2; // The device connected through mDNS, using TLS. This most likely implies a // Wi-Fi connection from a physical device (i.e. phone). MDNS_AUTO_CONNECT_TLS = 3; } } message LldbSessionStartDetails { // A UUID used to relate start and end of a native debug session. optional string debug_session_id = 1; // Debugger type for this session optional AndroidStudioEvent.DebuggerType debugger_type = 2; // Run configuration that was used to start this session. optional AndroidStudioEvent.RunConfigurationType run_configuration_type = 3; // True if debugger_type was chosen via the Auto debugger type. optional bool auto_debugger = 4; // Device on which the debuggable app is running. optional DeviceInfo device_info = 5; // Version of the native debugger. optional string lldb_version = 6; // Type of starter used to start this session. optional StarterType starter_type = 7; // Describes session starter implementations. enum StarterType { UNKNOWN_STARTER_TYPE = 0; ROOT_SHELL_STARTER_TYPE = 1; RUN_AS_SHELL_STARTER_TYPE = 2; INJECTOR_STARTER_TYPE = 3; } } message LldbSessionEndDetails { // A UUID used to relate start and end of a native debug session. optional string debug_session_id = 1; // If the session ended with a failure, the related message. // e.g. 'failed to get reply to handshake packet' optional string failure_message = 2; // Number of times the program was stopped by the debugger. // Proxy for use of the session to compute error rates. optional uint64 stops = 3; // Number of errors encountered during the session. // Includes both fatal and non-fatal errors. optional uint64 errors = 4; } // ML Model Binding feature metrics. message MlModelBindingEvent { // The detailed type of this event. optional EventType event_type = 1; // Related ML models information. repeated ModelMetadata model_metadatas = 2; // Set only when the event contains failure. optional ErrorCode error_code = 3; enum EventType { UNKNOWN_EVENT_TYPE = 0; // Import model from the model import wizard. MODEL_IMPORT_FROM_WIZARD = 1; // Move model from non-ml folder to ml folder via the "Move File" button // in the notification banner. MODEL_IMPORT_FROM_MOVE_FILE_BUTTON = 2; // Open the model viewer. MODEL_VIEWER_OPEN = 3; // Generates light classes for model. MODEL_API_GEN = 4; } message ModelMetadata { // Model file size in bytes. optional uint64 file_size = 1; // Model content hash that we use to identify popular public models. optional string file_hash = 2; // Whether or not the model has valid model format. optional bool is_valid_model = 3; // Whether or not the model has metadata included. optional bool has_metadata = 4; } enum ErrorCode { UNKNOWN_ERROR_CODE = 0; // The module's resource package name could not be determined. MODULE_PACKAGE_NAME_NOT_FOUND = 1; } } message StudioExceptionDetails { // hash of the exception stack trace optional string hash = 1; // summary of the exception stack trace optional string summary = 2; // number of crashes seen with this stack trace optional uint32 count = 3; } // Metrics on crashes in Android Studio. message StudioCrash { // number of actions since last crash report. optional int64 actions = 1; // number of exceptions since last crash report. optional int64 exceptions = 2; // number of crashes since last crash report. optional int64 crashes = 3; // number of exceptions from plugins bundled with Android Studio. optional int64 bundled_plugin_exceptions = 4; // number of exceptions from plugins not bundled with Android Studio. optional int64 non_bundled_plugin_exceptions = 5; // details on each exception repeated StudioExceptionDetails details = 6; } // Metrics for Icebox invocations. message EmulatorIcebox { // Message for starting an icebox command. message StartIcebox { // Maximum number of snapshots set by users. -1 for infinite snapshots; optional int32 max_snapshot_number = 1; } // Message for taking a snapshot. message TakeSnapshot { // The snapshot. optional EmulatorSnapshot snapshot = 1; } // Message for finishing an icebox command. message FinishIcebox { // Maximum number of snapshots set by users. -1 for infinite snapshots; optional int32 max_snapshot_number = 1; // Actual number of snapshots taken. optional uint32 actual_snapshot_number = 2; } // Kind of command of this message. oneof kind { StartIcebox start_icebox = 1; TakeSnapshot take_snapshot = 2; FinishIcebox finish_icebox = 3; } } // Emulator guest image's GL info. message EmulatorGuestGlInfo { // GL Driver vendor. optional string vendor = 1; // GL Driver name. optional string renderer = 2; // GL Driver version number. optional string version = 3; } // Emulator: Host GPU info. message EmulatorGpuInfo { // Make of the Graphics card. optional string make = 1; // Model of the Graphics card. optional string model = 2; // Device id of the Graphics card. optional string device_id = 3; // Revision of the graphics card. optional string revision_id = 4; // Version of the graphics card driver. optional string version = 5; // Name of the graphics card driver. optional string renderer = 6; } // Set of emulator feature flags to report ones used during current session. message EmulatorFeatures { enum EmulatorLaunchType { UNKNOWN_EMULATOR_LAUNCH_TYPE = 0; CONTAINER = 1; FUCHSIA = 2; } optional bool gps = 1; optional bool sensors = 2; optional bool virtualscene_config = 3; // Use launch_type with "CONTAINER" instead. optional bool container_launch = 4 [deprecated = true]; optional EmulatorLaunchType launch_type = 5; } // A description of a single file from an AVD. message EmulatorAvdFile { enum EmulatorAvdFileLocation { UNKNOWN_EMULATOR_AVD_FILE_LOCATION = 0; STANDARD = 1; CUSTOM = 2; } enum EmulatorAvdFileKind { UNKNOWN_EMULATOR_AVD_FILE_KIND = 0; KERNEL = 1; SYSTEM = 2; RAMDISK = 3; } // Kind of the file this report is about. optional EmulatorAvdFileKind kind = 1; // Location of the file optional EmulatorAvdFileLocation location = 2; // Size optional int64 size = 3; // Creation datetime, as a UTC unix timestamp optional int64 creation_timestamp = 4; } // A description of an AVD Emulator has loaded. message EmulatorAvdInfo { enum EmulatorAvdImageKind { UNKNOWN_EMULATOR_AVD_IMAGE_KIND = 0; AOSP = 1; GOOGLE = 2; PLAY_STORE_KIND = 3; AOSP_ATD = 4; GOOGLE_ATD = 5; } // Other AVD properties that can combine with EmulatorAvdImageKind. enum EmulatorAvdProperty { UNKNOWN_EMULATOR_AVD_FLAG = 0; PLAY_STORE_AVD = 1; PHONE_AVD = 2; TV_AVD = 3; WEAR_AVD = 4; ANDROIDAUTO_AVD = 5; THING_AVD = 6; TABLET_AVD = 7; LAPTOP_AVD = 8; DESKTOP_AVD = 9; CHROMEOS = 10; // Next tag: 11 } // Name of the AVD. Deprecated as it could potentially contain PII. optional string name = 1 [deprecated = true]; // Api level (23 = M, 24 = N, ...) optional int64 api_level = 2; // CPU architecture. optional EmulatorDetails.GuestCpuArchitecture arch = 3; // When was this AVD created, UTC Unix timespamp. optional int64 creation_timestamp = 4; // A build-id string from build.prop, something like 'sdk_google_phone 1231231 // 10-11-2012'. optional string build_id = 5; // Unix build UTC timestamp. optional int64 build_timestamp = 6; // Kind of the image (e.g. pure AOSP, with Google APIs, etc.). optional EmulatorAvdImageKind image_kind = 7; // A collection of files in the AVD // (usually 3 entries: kernel, system & ramdisk). repeated EmulatorAvdFile files = 8; // Collection of other AVD properties, mostly relating to flavor // (TV vs phone vs Auto, etc) repeated EmulatorAvdProperty properties = 9; } // State of emulator feature flags, including // which flags attempted to enable vs resulting set // of enabled flags. message EmulatorFeatureFlagState { enum EmulatorFeatureFlag { EMULATOR_FEATURE_FLAG_UNSPECIFIED = 0; GL_PIPE_CHECKSUM = 1; GRALLOC_SYNC = 2; ENCRYPT_USER_DATA = 3; INTEL_PERFORMANCE_MONITORING_UNIT = 4; GL_ASYNC_SWAP = 5; GLDMA = 6; GLES_DYNAMIC_VERSION = 7; FORCE_ANGLE = 8; FORCE_SWIFTSHADER = 9; WIFI = 10; PLAY_STORE_IMAGE = 11; LOGCAT_PIPE = 12; // Hypervisor "allowed" flags (different from actual using) HYPERV = 13; HVF = 14; KVM = 15; HAXM = 16; FAST_SNAPSHOT_V1 = 17; SCREEN_RECORDING = 18; VIRTUAL_SCENE = 19; SYSTEM_AS_ROOT = 20; IGNORE_HOST_OPENGL_ERRORS = 21; GENERIC_SNAPSHOTS_UI = 22; ALLOW_SNAPSHOT_MIGRATION = 23; DEPRECATED_GENERIC_INCREMENTAL_SNAPSHOT = 24 [deprecated = true]; WINDOWS_ON_DEMAND_SNAPSHOT_LOAD = 25; WINDOWS_HYPERVISOR_PLATFORM = 26; KERNEL_DEVICE_TREE_BLOB_SUPPORT = 27; LOCATION_UI_V2 = 28; GENERIC_INCREMENTAL_SNAPSHOT = 29; SNAPSHOT_ADB = 30; OFFWORLD = 31; OFFWORLD_DISABLE_SECURITY = 32; QUICKBOOT_FILE_BACKED = 33; REFCOUNT_PIPE = 34; GLDMA2 = 35; HOST_COMPOSITION_V1 = 36; ON_DEMAND_SNAPSHOT_LOAD = 37; WIFI_CONFIGURABLE = 38; GL_DIRECT_MEM = 39; VIDEO_PLAYBACK = 40; VULKAN = 41; MACRO_UI = 42; CAR_VHAL_TABLE = 43; DYNAMIC_PARTITION = 44; IP_DISCONNECT_ON_LOAD = 45; VULKAN_SNAPSHOTS = 46; VIRTIO_INPUT = 47; MULTI_DISPLAY = 48; VULKAN_NULL_OPTIONAL_STRINGS = 49; DYNAMIC_MEDIA_PROFILE = 50; YUV420_888_to_NV21 = 51; YUV_Cache = 52; KEYCODE_FORWARDING = 53; VULKAN_IGNORED_HANDLES = 54; VIRTIO_GPU_NEXT = 55; MAC80211HWSIM_USERSPACE_MANAGED = 56; HAS_SHARED_SLOTS_HOST_MEMORY_ALLOCATOR = 57; CAR_VHAL_REPLAY = 58; CAR_ASSIST_BUTTON = 59; HARDWARE_DECODER = 60; NO_DELAY_CLOSE_COLOR_BUFFER = 61; NO_DEVICE_FRAME = 62; VIRTIO_GPU_NATIVE_SYNC = 63; VIRTIO_WIFI = 64; VULKAN_SHADER_FLOAT16_INT8 = 65; CAR_ROTARY = 66; MODEM_SIMULATOR = 67; TV_REMOTE = 68; NATIVE_TEXTURE_DECOMPRESSION = 69; BPTC_TEXTURE_SUPPORT = 70; GUEST_USES_ANGLE = 71; VIRTIO_VSOCK_PIPE = 72; S3TC_TEXTURE_SUPPORT = 73; VIRTIO_MOUSE = 74; VIRTCONSOLE_LOGCAT = 75; VULKAN_QUEUE_SUBMIT_WITH_COMMANDS = 76; VULKAN_BATCHED_DESCRIPTOR_SET_UPDATE = 77; MINIGBM = 78; NO_DRAW = 79; GNSS_GRPC_V1 = 80; MIGRATABLE_SNAPSHOT_SAVE = 81; ANDROIDBOOT_PROPS = 82; DEVICESKINOVERLAY = 83; ANDROIDBOOT_PROPS2 = 84; BLUETOOTH_EMULATION = 85; DEVICESTATE_ON_BOOT = 86; HWC_MULTI_CONFIGS = 87; ASYNC_COMPOSE_SUPPORT = 88; VIRTIO_SND_CARD = 89; VIRTIO_TABLET = 90; // Next tag: 91 } // Which features were enabled by default or through the server-side config. repeated EmulatorFeatureFlag attempted_enabled_feature_flags = 1; // Which features were enabled through user override. repeated EmulatorFeatureFlag user_overridden_enabled_features = 2; // Which features were disabled through user override. repeated EmulatorFeatureFlag user_overridden_disabled_features = 3; // Which features ended up being enabled overall. repeated EmulatorFeatureFlag resulting_enabled_features = 4; // Next tag: 5 } // RAM usage info for the emulator, in bytes. message EmulatorMemoryUsage { optional uint64 resident_memory = 1; optional uint64 resident_memory_max = 2; optional uint64 virtual_memory = 3; optional uint64 virtual_memory_max = 4; optional uint64 total_phys_memory = 5; optional uint64 total_page_file = 6; optional uint64 total_guest_memory = 7; } // An enum representing all possible snapshot properties (bit flags). enum EmulatorSnapshotFlags { // Default, no special properties. SNAPSHOT_FLAGS_NONE = 0; // RAM is compressed in this snapshot. SNAPSHOT_FLAGS_RAM_COMPRESSED_BIT = 1; // Textures are compressed in this snapshot. SNAPSHOT_FLAGS_TEXTURES_COMPRESSED_BIT = 2; // Hard disk drive was used. SNAPSHOT_FLAGS_HDD_BIT = 3; } // Generic snapshot save states. Distinguished // from Quickboot save states. enum EmulatorSnapshotSaveState { // Successful saving. EMULATOR_SNAPSHOT_SAVE_SUCCEEDED_NORMAL = 0; // Generic failure when saving state. EMULATOR_SNAPSHOT_SAVE_FAILED = 1; // Saving skipped: not supported in current configuration. EMULATOR_SNAPSHOT_SAVE_SKIPPED_UNSUPPORTED = 2; // Saving skipped: Not booted yet. EMULATOR_SNAPSHOT_SAVE_SKIPPED_NOT_BOOTED = 3; // Saving skipped: No snapshot name given. EMULATOR_SNAPSHOT_SAVE_SKIPPED_NO_SNAPSHOT = 4; // Saving skipped: Disk under pressure. EMULATOR_SNAPSHOT_SAVE_SKIPPED_DISK_PRESSURE = 5; // Next tag: 6 } // Generic snapshot load states. Distinguished // from Quickboot load states. enum EmulatorSnapshotLoadState { // Successful load. EMULATOR_SNAPSHOT_LOAD_SUCCEEDED_NORMAL = 0; // Generic failure when loading state. EMULATOR_SNAPSHOT_LOAD_FAILED = 1; // Loading snapshots not supported in current configuration. EMULATOR_SNAPSHOT_LOAD_SKIPPED_UNSUPPORTED = 2; // Loading snapshot failed because it doesn't exist. EMULATOR_SNAPSHOT_LOAD_NO_SNAPSHOT = 3; // Loading snapshot failed because the snapshot is too old. EMULATOR_SNAPSHOT_LOAD_OLD_SNAPSHOT = 4; // The snapshot load hung. EMULATOR_SNAPSHOT_LOAD_HUNG = 5; } // Detailed lists of snapshot operation failure reasons. // Shared between load and save operations. enum EmulatorSnapshotFailureReason { EMULATOR_SNAPSHOT_FAILURE_REASON_UNSPECIFIED = 0; EMULATOR_SNAPSHOT_FAILURE_REASON_CORRUPTED_DATA = 1; EMULATOR_SNAPSHOT_FAILURE_REASON_NO_SNAPSHOT_PB = 2; EMULATOR_SNAPSHOT_FAILURE_REASON_BAD_SNAPSHOT_PB = 3; EMULATOR_SNAPSHOT_FAILURE_REASON_INCOMPATIBLE_VERSION = 4; EMULATOR_SNAPSHOT_FAILURE_REASON_NO_RAM_FILE = 5; EMULATOR_SNAPSHOT_FAILURE_REASON_NO_TEXTURES_FILE = 6; EMULATOR_SNAPSHOT_FAILURE_REASON_SNAPSHOTS_NOT_SUPPORTED = 7; // Next unrecoverable error here: 8 EMULATOR_SNAPSHOT_FAILURE_REASON_UNRECOVERABLE_ERROR_LIMIT = 10000; EMULATOR_SNAPSHOT_FAILURE_REASON_NO_SNAPSHOT_IN_IMAGE = 10001; EMULATOR_SNAPSHOT_FAILURE_REASON_CONFIG_MISMATCH_HOST_HYPERVISOR = 10002; EMULATOR_SNAPSHOT_FAILURE_REASON_CONFIG_MISMATCH_HOST_GPU = 10003; EMULATOR_SNAPSHOT_FAILURE_REASON_CONFIG_MISMATCH_RENDERER = 10004; EMULATOR_SNAPSHOT_FAILURE_REASON_CONFIG_MISMATCH_FEATURES = 10005; EMULATOR_SNAPSHOT_FAILURE_REASON_CONFIG_MISMATCH_AVD = 10006; EMULATOR_SNAPSHOT_FAILURE_REASON_SYSTEM_IMAGE_CHANGED = 10007; // Next validation error here: here: 10008 EMULATOR_SNAPSHOT_FAILURE_REASON_VALIDATION_ERROR_LIMIT = 20000; EMULATOR_SNAPSHOT_FAILURE_REASON_INTERNAL_ERROR = 20001; EMULATOR_SNAPSHOT_FAILURE_REASON_EMULATION_ENGINE_FAILED = 20002; EMULATOR_SNAPSHOT_FAILURE_REASON_RAM_FAILED = 20003; EMULATOR_SNAPSHOT_FAILURE_REASON_TEXTURES_FAILED = 20004; EMULATOR_SNAPSHOT_FAILURE_REASON_ADB_OFFLINE = 20005; // Next other kind of error here: 20006 EMULATOR_SNAPSHOT_FAILURE_REASON_IN_PROGRESS_LIMIT = 30000; // Next new type of error here: 30001 } // Emulator snapshot description. message EmulatorSnapshot { // Anonymized snapshot name (SHA256 + salted). optional string name = 1; // A combination of EmulatorSnapshotFlags describing the snapshot. optional int32 flags = 2; // Total size on disk, in bytes. optional int64 size_bytes = 3; // Snapshot save/load states. optional EmulatorSnapshotSaveState save_state = 4; optional EmulatorSnapshotLoadState load_state = 5; // Detailed reason for non-success of snapshot load. optional EmulatorSnapshotFailureReason load_failure_reason = 6; // Detailed reason for non-success of snapshot save. optional EmulatorSnapshotFailureReason save_failure_reason = 7; // Whether or not it was lazy loaded. optional bool lazy_loaded = 8; // Whether or not it was incrementally saved. optional bool incrementally_saved = 9; // Size of RAM (possibly incl. incremental / compression) optional int64 ram_size_bytes = 10; // Size of textures (possibly incl. incremental / compression) optional int64 textures_size_bytes = 11; // Duration of load / save (total). optional uint64 load_duration_ms = 12; optional uint64 save_duration_ms = 13; // Duration of load / save (ram). optional uint64 ram_load_duration_ms = 14; optional uint64 ram_save_duration_ms = 15; // Duration of load / save (textures). optional uint64 textures_load_duration_ms = 16; optional uint64 textures_save_duration_ms = 17; // Next tag: 18 } // Description of emulator's quickboot load. message EmulatorQuickbootLoad { // List of possible states of a load operation. enum EmulatorQuickbootLoadState { // Quickboot succeeded. EMULATOR_QUICKBOOT_LOAD_SUCCEEDED = 0; // There was no snapshot for a quickboot load. EMULATOR_QUICKBOOT_LOAD_NO_SNAPSHOT = 1; // Generic failure during load. EMULATOR_QUICKBOOT_LOAD_FAILED = 2; // Guest hung after loading a quickboot snapshot. EMULATOR_QUICKBOOT_LOAD_HUNG = 3; // Performed a cold boot because of feature control settings. EMULATOR_QUICKBOOT_LOAD_COLD_FEATURE = 4; // Performed a cold boot because of command line flag. EMULATOR_QUICKBOOT_LOAD_COLD_CMDLINE = 5; // Performed a cold boot because of AVD configuration. EMULATOR_QUICKBOOT_LOAD_COLD_AVD = 6; // Performed a cold boot because quickboot is not supported in the current // configuration. EMULATOR_QUICKBOOT_LOAD_COLD_UNSUPPORTED = 7; // Specified snapshot is too old for loading, fallback to cold boot. EMULATOR_QUICKBOOT_LOAD_COLD_OLD_SNAPSHOT = 8; } // The state of the quickboot load operation. optional EmulatorQuickbootLoadState state = 1; // How long it took, milliseconds. optional uint64 duration_ms = 2; // Information about loaded snapshot. optional EmulatorSnapshot snapshot = 3; // Flag is set when on demand RAM loading was enabled for the load. optional bool on_demand_ram_enabled = 4; // ADB connection retries. optional uint32 adb_connection_retries = 6; // Next tag: 7 } // Description of emulator's quickboot saving. message EmulatorQuickbootSave { // List of possible states of a save operation. enum EmulatorQuickbootSaveState { // Successful saving. EMULATOR_QUICKBOOT_SAVE_SUCCEEDED = 0; // Generic failure when saving state. EMULATOR_QUICKBOOT_SAVE_FAILED = 1; // Saving disabled: feature control. EMULATOR_QUICKBOOT_SAVE_DISABLED_FEATURE = 2; // Saving disabled: command line argument. EMULATOR_QUICKBOOT_SAVE_DISABLED_CMDLINE = 3; // Saving disabled: AVD configuration. EMULATOR_QUICKBOOT_SAVE_DISABLED_AVD = 4; // Saving skipped: not supported in current configuration. EMULATOR_QUICKBOOT_SAVE_SKIPPED_UNSUPPORTED = 5; // Saving skipped: too low guest uptime. EMULATOR_QUICKBOOT_SAVE_SKIPPED_LOW_UPTIME = 6; // Saving skipped: Used the UI to skip saving. EMULATOR_QUICKBOOT_SAVE_DISABLED_UI = 7; // Saving skipped: Not booted yet. EMULATOR_QUICKBOOT_SAVE_SKIPPED_NOT_BOOTED = 8; } // The state of the quickboot save operation. optional EmulatorQuickbootSaveState state = 1; // How long it took, milliseconds. optional uint64 duration_ms = 2; // Information about the saved snapshot. optional EmulatorSnapshot snapshot = 3; // What was the guest session uptime at the time of saving. optional uint64 sesion_uptime_ms = 4; } // Track whether a GLES1 command is used or not message EmulatorGLEScmUsages { // Has the client create any GLES1 contexts optional bool is_used = 1; // Track glLight{f,fv,x,xv} command calls optional bool light = 2; // Track glTexGen{f,fv,x,xv,i,iv}OES command calls optional bool tex_gen = 3; } // Track whether a GLES3.0 command is used or not message EmulatorGLESv30Usages { // Has the client create any GLES3 contexts optional bool is_used = 1; // Track glFenceSync command calls optional bool fence_sync = 2; // Track glFramebufferTextureLayer command calls optional bool framebuffer_texture_layer = 3; // Track glRenderbufferStorageMultisample command calls optional bool renderbuffer_storage_multisample = 4; // Track glGenTransformFeedbacks command calls optional bool gen_transform_feedbacks = 5; // Track glBeginQuery command calls optional bool begin_query = 6; } // Track whether a GLES command is used or not message EmulatorGLESUsages { // GLES 1 usage report optional EmulatorGLEScmUsages gles_1_usages = 1; // GLES 3.0 usage report optional EmulatorGLESv30Usages gles_3_0_usages = 2; } // Per-session counts of snapshot UI interactions. message EmulatorSnapshotUICounts { // Quickboot selection for exit behavior optional uint32 quickboot_selection_yes = 1; optional uint32 quickboot_selection_no = 2; optional uint32 quickboot_selection_ask = 3; // Next for quickboot selection: 4 // Ask dialog optional uint32 quickboot_ask_canceled = 10; optional uint32 quickboot_ask_yes = 11; optional uint32 quickboot_ask_no = 12; optional uint32 quickboot_ask_total_time_ms = 13; // Next for ask dialog: 14 // Quickboot "save now" metrics optional uint32 quickboot_save_now = 100; // Next for "save now": 101 // Generic snapshot dialog optional uint32 generic_save = 1000; optional uint32 generic_load = 1001; optional uint32 generic_delete = 1002; optional uint32 generic_clone = 1003; optional uint32 generic_edit = 1004; optional uint32 generic_edited_name = 1005; optional uint32 generic_edited_description = 1006; optional uint32 generic_export = 1007; optional uint32 generic_import = 1008; optional uint32 generic_flat_view = 1009; optional uint32 generic_tree_view = 1010; optional uint32 generic_total_time_flat_view_ms = 1011; optional uint32 generic_total_time_tree_view_ms = 1012; optional uint32 generic_total_time_ms = 1013; // Next for generic snapshot dialog: 1014 } // Metrics on camera usage. message EmulatorCameraSession { // List of possible camera types. enum EmulatorCameraType { // Unspecified camera source. EMULATOR_CAMERA_TYPE_UNSPECIFIED = 0; // Camera source is the host's webcam. EMULATOR_CAMERA_TYPE_WEBCAM = 1; // Camera source is the virtual scene camera. EMULATOR_CAMERA_TYPE_VIRTUAL_SCENE = 2; // Camera source is the video playback camera. EMULATOR_CAMERA_TYPE_VIDEO_PLAYBACK = 3; } // List of possible camera directions. enum EmulatorCameraDirection { // Unspecified direction. EMULATOR_CAMERA_DIRECTION_UNSPECIFIED = 0; // Back-facing camera. EMULATOR_CAMERA_DIRECTION_BACK = 1; // Front-facing camera. EMULATOR_CAMERA_DIRECTION_FRONT = 2; } // Camera start result, successful values are positive, failures are negative. enum EmulatorCameraStartResult { // Camera was started successfully. EMULATOR_CAMERA_START_SUCCESS = 0; // The camera was already started. EMULATOR_CAMERA_START_ALREADY_STARTED = 1; // Failures. // Camera start failed with an unspecified error. EMULATOR_CAMERA_START_FAILED = -1; // The camera was already started, but the parameters don't match. EMULATOR_CAMERA_START_PARAMETER_MISMATCH = -2; // The requested pixel format is unknown. EMULATOR_CAMERA_START_UNKNOWN_PIXEL_FORMAT = -3; // No pixel conversion available. EMULATOR_CAMERA_START_NO_PIXEL_CONVERSION = -4; // Out of memory when starting the camera. EMULATOR_CAMERA_START_OUT_OF_MEMORY = -5; } // The camera source used for the camera session. optional EmulatorCameraType type = 1; // The camera direction. optional EmulatorCameraDirection direction = 2; // Width of the camera frame in pixels. optional uint32 width = 3; // Height of the camera frame in pixels. optional uint32 height = 4; // FOURCC pixel format requested. optional fixed32 pixel_format = 5; // Camera start result. optional EmulatorCameraStartResult start_result = 6; // How long the camera session took to initialize. optional uint64 startup_time_ms = 7; // How long the session was running, in milliseconds. optional uint64 duration_ms = 8; // Average framerate of the camera. optional double average_framerate = 9; // set when type = EMULATOR_CAMERA_TYPE_VIRTUAL_SCENE // Name of the virtual scene that is loaded. optional string virtual_scene_name = 10; } // Metrics for virtual scene camera sessions. message EmulatorVirtualSceneSession { // How long the session was running, in milliseconds. optional uint64 duration_ms = 1; // Minimum sensor update delay in milliseconds. optional uint32 min_sensor_delay_ms = 2; // Total tap count when the camera is running. optional uint32 tap_count = 3; // The number of times the orientation changed during the session. optional uint32 orientation_change_count = 4; // Whether the virtual sensors window was visible at any point during the // session. optional bool virtual_sensors_visible = 5; // How many interactions were performed on the virtual sensors page. optional uint32 virtual_sensors_interaction_count = 6; // Invocation count of WASD/Mouselook hotkey. optional uint32 hotkey_invoke_count = 7; // Total time the user was in WASD/Mouselook mode during this session. optional uint64 hotkey_duration_ms = 8; // Taps shortly after a hotkey invoke, to determine how much the user // alternates between modes to tap. optional uint32 taps_after_hotkey_invoke = 9; // Total rotation performed in the virtual scene. optional double total_rotation_radians = 10; // Total translation performed in the virtual scene. optional double total_translation_meters = 11; } // Per-session metrics for automation/macros. message EmulatorAutomation { // List of possible preset macros played. enum EmulatorAutomationPresetMacro { // Reset position. EMULATOR_AUTOMATION_PRESET_MACRO_RESET = 0; // Track horizontal plane. EMULATOR_AUTOMATION_PRESET_MACRO_TRACK_HORIZONTAL = 1; // Track vertical plane. EMULATOR_AUTOMATION_PRESET_MACRO_TRACK_VERTICAL = 2; // Walk to image room. EMULATOR_AUTOMATION_PRESET_MACRO_IMAGE_ROOM = 3; } // Total sum of time of macros playing -> Sum(Stop-Play). optional uint64 total_duration_ms = 1; // Total amount of times macros played. optional uint64 macro_playback_count = 2; // Total amount of times previews replayed. optional uint64 preview_replay_count = 3; // Played preset-macros. repeated EmulatorAutomationPresetMacro played_preset_macro = 4; // Total amount of macros recorded. optional uint64 record_macro_count = 5; // Total amount of macros deleted. optional uint64 delete_macro_count = 6; // Total amount of macros edited. optional uint64 edit_macro_count = 7; } // Metrics for multi-display details message EmulatorMultiDisplay { // Count for add/modify/delete displays optional uint32 apply_count = 1; // Max displays created optional uint32 max_displays = 2; } // Metrics for resizable display details message EmulatorResizableDisplay { // Counts for different display size types optional uint32 display_phone_count = 1; optional uint32 display_foldable_count = 2; optional uint32 display_tablet_count = 3; optional uint32 display_desktop_count = 4; } // Metrics for LocationV2 message EmulatorLocationV2 { // Count for "Set Location" button optional uint32 set_loc_count = 1; // Count for "Play route" button optional uint32 play_route_count = 2; } // Metrics for streaming screenshots. message EmulatorStreamScreenshot { // Size of a single screenshot in bytes, w * h * bpp optional uint32 size = 1; // This gives us an idea of delivery delay we are experiencing // from the emulators perspective, and frames delivered. optional PercentileEstimator delivery_delay = 2; // # of frames generated by the emulator. max(delivery_delay.count) <= frames optional uint32 frames = 3; } // Metrics for grpc invocations. message EmulatorGrpc { // CRC32 digest of the fully-specified method name. optional uint32 call_id = 1; // Number of requests optional uint32 requests = 2; // Number of requests for which the response was not Status::OK optional uint32 failures = 3; // Sum of received message size, if streaming optional PercentileEstimator rcv_bytes_estimate = 4; // Sum of sent message size, if streaming optional PercentileEstimator snd_bytes_estimate = 5; // Duration of the total request time in milliseconds. optional PercentileEstimator duration = 6; } // Metrics related to the Emulator. message EmulatorDetails { // Cpu architecture of the guest. optional GuestCpuArchitecture guest_arch = 1; // cpu time spent in kernel mode in milliseconds since last metrics report. optional int64 system_time = 2; // cpu time spent in user mode in milliseconds since last metrics report. optional int64 user_time = 3; // number of crashes since last metrics report. optional int64 crashes = 4; // real time in milliseconds since last metrics report. optional int64 wall_time = 5; // True iff a crash occurred while process started its exit routines. optional bool exit_started = 6; // The API level of the running guest image. optional int64 guest_api_level = 7; // The value of guest gpu option (ro.kernel.qemu.gles) optional bool guest_gpu_enabled = 8; // True if we were able to correctly initialize opengl on the host. optional bool is_opengl_alive = 10; // Connectivity from adb of the running emulator instance. optional EmulatorAdbLiveness adb_liveness = 11; // Information about the gl implementation in the guest image. optional EmulatorGuestGlInfo guest_gl = 12; // Information about the host GPUs (one per GPU). repeated EmulatorGpuInfo host_gpu = 13; // The "phase" of an emulator session where crash happened. optional EmulatorSessionPhase session_phase = 14; // The emulator core version (e.g. QEMU engine's version). optional string core_version = 15; // Renderer of the current emulator session. optional EmulatorRenderer renderer = 16; // Flags for the used UI features. optional EmulatorFeatures used_features = 17; // Information about the currently loaded AVD. optional EmulatorAvdInfo avd_info = 18; // State tracking emulator feature flag enable/disable. optional EmulatorFeatureFlagState feature_flag_state = 19; // Hypervisor used in current session. optional EmulatorHypervisor hypervisor = 20; // Information about quickboot status of the current session. optional EmulatorQuickbootLoad quickboot_load = 21; optional EmulatorQuickbootSave quickboot_save = 22; // Track GLES command usages optional EmulatorGLESUsages gles_usages = 23; // Metrics on all generic emulator snapshot saves and loads. repeated EmulatorSnapshot snapshot_loads = 24; repeated EmulatorSnapshot snapshot_saves = 25; // Metrics on all snapshot UI. optional EmulatorSnapshotUICounts snapshot_ui_counts = 26; // Metrics on camera usage. optional EmulatorCameraSession camera = 27; // Metrics for virtual scene camera sessions. optional EmulatorVirtualSceneSession virtual_scene = 28; // Metrics for emulator boot status and time. optional EmulatorBootInfo boot_info = 29; // Metrics for automation/macros. optional EmulatorAutomation automation = 30; // Metrics for multi-display optional EmulatorMultiDisplay multi_display = 31; // Metrics for gRPC invocation optional EmulatorGrpc grpc = 32; // Metrics for LocationUiV2 optional EmulatorLocationV2 location_v2 = 33; // Metrics for streamScreenshot optional EmulatorStreamScreenshot screenshot = 34; // Metrics for Icebox repeated EmulatorIcebox icebox = 35; // Metrics for resizable display optional EmulatorResizableDisplay resizable_display = 36; // Process ID of the emulator wrapper process. optional int32 emu_pid = 37; // Process ID of the child qemu process that does the real job. optional int32 qemu_pid = 38; // Next tag: 39 // Emulator instance liveness as determined via adb connectivity. enum EmulatorAdbLiveness { UNKNOWN_EMULATOR_ADB_LIVENESS = 0; FAILURE_NO_ADB = 1; ADB_ONLINE = 2; FAILURE_ADB_SERVER_DEAD = 3; FAILURE_EMULATOR_DEAD = 4; } // In What phase of the lifetime of the Emulator were the metrics reported. enum EmulatorSessionPhase { UNKNOWN_EMULATOR_SESSION_PHASE = 0; // The custom emulator launcher is running. LAUNCHER = 1; // Final emulator target is parsing command line arguments. PARSE_OPTIONS = 2; // Initialization - general. INIT_GENERAL = 3; // Initializing GPU INIT_GPU = 4; // Initializing hardware acceleration. INIT_ACCEL = 5; // Main use case -- init done, emulator is up. RUNNING_GENERAL = 6; // Exiting EXIT_GENERAL = 7; } // Chip the emulator is emulating for. enum GuestCpuArchitecture { UNKNOWN_GUEST_CPU_ARCHITECTURE = 0; X86 = 1; X86_64 = 2; ARM = 3; ARM_64 = 4; MIPS = 5; MIPS_64 = 6; } // Rendering method emulator uses for the reporter session. enum EmulatorRenderer { UNKNOWN_EMULATOR_RENDERER = 0; HOST = 1; OFF = 2; GUEST = 3; MESA = 4; SWIFTSHADER = 5; ANGLE = 6; ANGLE9 = 7; SWIFTSHADER_INDIRECT = 8; ANGLE_INDIRECT = 9; ANGLE9_INDIRECT = 10; ERROR_IN_EMULATOR_RENDERER = 255; } // Hypervisor in use for the session. enum EmulatorHypervisor { UNKNOWN_HYPERVISOR = 0; NO_HYPERVISOR = 1; KVM = 2; // KVM HAXM = 3; // Intel HAXM HVF = 4; // Apple Hypervisor.Framework HYPERV = 5; // Microsoft Hyper-V GVM = 6; // AMD Hypervisor for Android Emulator // Next tag: 7 } } // Describes a user clicking on some part of the Emulator UI. message EmulatorUiEvent { // Id of the UI element, baked in the emulator binary. optional string element_id = 1; // The type of UI event optional EmulatorUiEventType type = 2; // The current context of the event. optional EmulatorUiEventContext context = 3; // This value is an opaque numeric type. The exact schema of the UI metrics // is not specific here. e.g., |value| may represent a boolean, a "count", or // an index into the list of items in a drop down menu. optional int64 value = 4; // Tracks the type of the emulator UI Event. enum EmulatorUiEventType { UNKONWN_EMULATOR_UI_EVENT_TYPE = 0; BUTTON_PRESS = 1; // Generated when a user action changes the value of certain field from // its default value. OPTION_SET_TO_NON_DEFAULT = 2; // Generated to report the index of an option selected by the user in a // drop-down menu / radio button etc. OPTION_SELECTED = 3; // Generated on event processing end, |value| is time in microseconds. // Is only sent if the processing time is considered 'long' in the emulator, // which is determined in the emulator code itself. LONG_PROCESSING_TIME_US = 4; } // Tracks the context of the Emulator UI. enum EmulatorUiEventContext { UNKNOWN_EMULATOR_UI_EVENT_CONTEXT = 0; EXTENDED_WINDOW_OPEN = 1; EXTENDED_DISPLAYS_TAB = 2; EXTENDED_CELLULAR_TAB = 3; EXTENDED_BATTERY_TAB = 4; EXTENDED_CAMERA_TAB = 5; EXTENDED_TELEPHONY_TAB = 6; EXTENDED_MIC_TAB = 7; EXTENDED_FINGER_TAB = 8; EXTENDED_SENSORS_TAB = 9; EXTENDED_BUG_TAB = 10; EXTENDED_SNAPSHOT_TAB = 11; EXTENDED_RECORD_TAB = 12; EXTENDED_SETTINGS_TAB = 13; EXTENDED_HELP_TAB = 14; } } message EmulatorPercentileEstimator { // Type of the performance metric. optional EmulatorPerformanceMetric metric = 1; // Per-metric type context, e.g. UI element name if this is an event handling // time. Not set if there's no context for the specific metric type. optional string context = 2; // Estimator for metric. optional PercentileEstimator estimator = 3; // Metric types that can be monitored. enum EmulatorPerformanceMetric { UI_EVENT_HANDLING_TIME_US = 0; } } // Tracking CPU usage for some operation message CpuTimeSlice { optional uint64 wall_time_us = 1; optional uint64 user_time_us = 2; optional uint64 system_time_us = 3; } // Tracking OpenGL/Vulkan resource usage message VulkanResourceUsage { optional uint64 total_host_visible_memory_allocation_bytes = 1; optional uint64 total_device_local_memory_allocation_bytes = 2; optional uint32 total_instances = 3; } message GraphicsResourceUsage { // common betweek OpenGL and Vulkan optional uint32 colorbuffer_count = 1; optional uint32 shader_count = 2; optional uint32 renderthread_count = 3; optional uint64 colorbuffer_total_allocation_bytes = 4; // Vulkan optional VulkanResourceUsage vulkan_resource_usage = 5; } // Emulator resource usage statistics message EmulatorResourceUsage { // Run condition, if applicable enum RunCondition { RUN_CONDITION_DEFAULT = 0; RUN_CONDITION_IDLE = 1; RUN_CONDITION_TEST = 2; RUN_CONDITION_DEPLOY = 3; } // Estimations of what is taking CPU in the guest enum GuestCpuUsageSource { GUEST_CPU_USAGE_DEFAULT = 0; GUEST_CPU_USAGE_PLAY_SERVICES = 1; GUEST_CPU_USAGE_SURFACEFLINGER = 2; GUEST_CPU_USAGE_AUDIO_SERVICE = 3; GUEST_CPU_USAGE_SENSOR_SERVICE = 4; GUEST_CPU_USAGE_CHROME = 5; GUEST_CPU_USAGE_OTHER = 6; } optional RunCondition run_condition = 1; optional CpuTimeSlice main_loop_slice = 2; repeated CpuTimeSlice vcpu_slices = 3; repeated CpuTimeSlice guest_cpu_slices = 4; repeated GuestCpuUsageSource top_guest_cpu_usage_sources = 5; optional EmulatorMemoryUsage memory_usage = 6; optional GraphicsResourceUsage graphics_resource_usage = 7; } // Emulator latency statistics message EmulatorLatencyStats { // An enum that attempts to account for the source of // high latencies and hangs in the emulator. enum EmulatorLatencySource { EMULATOR_LATENCY_SOURCE_DEFAULT = 0; EMULATOR_LATENCY_SOURCE_NETWORK = 1; EMULATOR_LATENCY_SOURCE_BLOCK_DEVICE = 2; EMULATOR_LATENCY_SOURCE_PIPE_CAMERA = 3; EMULATOR_LATENCY_SOURCE_PIPE_OPENGL = 4; EMULATOR_LATENCY_SOURCE_PIPE_OPERATION = 5; EMULATOR_LATENCY_SOURCE_PCI_DEVICE = 6; EMULATOR_LATENCY_SOURCE_MMIO = 7; EMULATOR_LATENCY_SOURCE_UI_EVENT_HOST_ONLY = 8; EMULATOR_LATENCY_SOURCE_UI_EVENT_TO_GUEST = 9; EMULATOR_LATENCY_INPUT_QUEUE_FULL = 10; } optional EmulatorLatencySource latency_source = 1; // if vcpu mmio access was involved, this holds the MMIO address. optional uint64 vcpu_handling_mmio_address = 2; // Number of loops where the input queue was full. optional uint32 input_queue_full_loops = 8; // Time stats for the latency in microseconds. optional uint64 latency_max_us = 3; optional uint64 latency_99_9_us = 4; optional uint64 latency_99_us = 5; optional uint64 latency_90_us = 6; optional uint64 latency_50_us = 7; } // Estimations of percentiles of time spent on Emulator operations. message EmulatorPerformanceStats { // Collection of estimations of performance metrics. repeated EmulatorPercentileEstimator estimator = 1; // Emulator memory usage over time. (Deprecated) repeated EmulatorMemoryUsage memory_usage = 2 [deprecated = true]; // Process uptime when this was captured. Relative to when // the emulator process was launched---this is not a timestamp. optional uint64 process_uptime_us = 3; // Resource usage and latency stats. optional EmulatorResourceUsage resource_usage = 4; optional EmulatorLatencyStats latency_stats = 5; // Guest system uptime when this was captured. Relative to when // the Android system image is started---this is not a timestamp. optional uint64 guest_uptime_us = 6; } // Details about a single Gradle run. message GradleBuildDetails { // Version of our Gradle plugin supporting android builds. e.g. '2.0-beta1' optional string android_plugin_version = 1; // Version of the open source Gradle application used. optional string gradle_version = 2; // indicates whether the user has instant run enabled in settings optional bool user_enabled_ir = 3; // indicates whether the IDE thinks whether this plugin version supports IR optional bool model_supports_ir = 4; // indicates whether the current variant supports IR, but this can be changed // without a notification optional bool variant_supports_ir = 5; // per library metrics. repeated GradleLibrary libraries = 6; // per module metrics. repeated GradleModule modules = 7; // per android module metrics. repeated GradleAndroidModule android_modules = 8; // per native android module metrics repeated GradleNativeAndroidModule native_android_modules = 9; // The app_id is the id for the user's android app // which we salt on the client (28 day rotation) then sha256 // so it is anonymized and is unique per user, but has a 1-N relation. optional string app_id = 10; } // Per library Gradle metrics. message GradleLibrary { // Number of jar dependencies in this library. optional int64 jar_dependency_count = 1; // Number of aar dependencies in this library. optional int64 aar_dependency_count = 2; } // Per module Gradle metrics. message GradleModule { // Total number of modules in this app. optional int64 total_module_count = 1; // Number of aar modules in this app. optional int64 app_module_count = 2; // Number of library modules in this app.. optional int64 lib_module_count = 3; } // Per Android module Gradle metrics. message GradleAndroidModule { // Client-side salted, sha256 of the application id // the app_id is the id for the user's android app // which we salt with a client unique salt and then sha256 // so it is anonymized and is unique per user, but has a 1-N relation. optional string app_id = 1; // Client-side salted, sha256 of the module name. optional string module_name = 2; // True if this module is a library. optional bool is_library = 3; // Number of different build types for this module. optional int64 build_type_count = 4; // Number of different flavor types for this module. optional int64 flavor_count = 5; // Number of different flavor dimensions for this module. optional int64 flavor_dimension = 6; // Number of signing configurations for this module. optional int64 signing_config_count = 7; // Hardware specified as required in the manifest. Only logging the types // from the allow-list. E.g. "android.hardware.type.watch". optional string required_hardware = 8; } // per "native" (C++) android module Gradle metrics. message GradleNativeAndroidModule { // Client-side salted, sha256 of the application id // the app_id is the id for the user's android app // which we salt with a client unique salt and then sha256 // so it is anonymized and is unique per user, but has a 1-N relation. optional string app_id = 1; // Client-side salted, sha256 of the module name. optional string module_name = 2; // True if this module is a library. optional NativeBuildSystemType build_system_type = 3; // The various native build systems we support to be used from Gradle. enum NativeBuildSystemType { UNKNOWN_NATIVE_BUILD_SYSTEM_TYPE = 0; // The Gradle epxerimental plugin GRADLE_EXPERIMENTAL = 1; // The compilation part of NDK builds (Android's native build system). NDK_COMPILE = 2; // full NDK builds (Android's native build system). NDK_BUILD = 3; // CMake is a very common C++ build system. CMAKE = 4; // Custom build system that uses Ninja as back end. NINJA = 5; } } // Metrics related to editing CMake files. message CMakeEditingEvent { enum CMakeEditingEventKind { UNKNOWN_CMAKE_EDITING_EVENT = 0; // Set when syntax highlighting for CMake is first used. SYNTAX_HIGHLIGHTING = 1; // Set when code completion is first used. CODE_COMPLETION = 2; } optional CMakeEditingEventKind kind = 1; // The amount of time taken for the event to complete in milliseconds. optional int64 event_duration_ms = 2; } message JniInspectionEvent { enum JniInspectionType { UNKNOWN_JNI_INSPECTION_EVENT = 0; // Set when the "missing function" inspection quickfix is used. MISSING_FUNCTION_INSPECTION_EVENT = 1; // Set when the "extern C" inspection quickfix is used. EXTERN_C_INSPECTION_EVENT = 2; // Set when the "parameters" inspection quickfix is used. PARAMETERS_INSPECTION_EVENT = 3; // Set when the OnLoad / OnUnload inspection quickfix is used. ONLOAD_INSPECTION_EVENT = 4; // Set when the FindMethod inspection quickfix is used. FIND_METHOD_INSPECTION_EVENT = 5; // Set when the FindField inspection quickfix is used. FIND_FIELD_INSPECTION_EVENT = 6; // Set when the FindClass inspection quickfix is used. FIND_CLASS_INSPECTION_EVENT = 7; // Set when the RegisterNatives inspection quickfix is used. REGISTER_NATIVES_INSPECTION_EVENT = 8; // Set when the CallMethod inspection quickfix is used. CALL_METHOD_INSPECTION_EVENT = 9; // Set when the GetField inspection quickfix is used. GET_FIELD_INSPECTION_EVENT = 10; // Set when the SetField inspection quickfix is used. SET_FIELD_INSPECTION_EVENT = 11; // Set when FindClass completion is accepted. FIND_CLASS_COMPLETION_EVENT = 12; // Set when GetMethodID completion is accepted. GET_METHOD_ID_COMPLETION_EVENT = 13; // Set when GetFieldID completion is accepted. GET_FIELD_ID_COMPLETION_EVENT = 14; // Set when JNI function stub completion is accepted. JNI_FUNCTION_STUB_COMPLETION_EVENT = 15; // Set when RegisterNatives completion is accepted. REGISTER_NATIVES_COMPLETION_EVENT = 16; // Set when KotlinInternalExternalFunctionInspction is used. KOTLIN_INTERNAL_EXTERNAL_FUNCTION_INSPECTION_EVENT = 17; } optional JniInspectionType type = 1; // The category of this JNI inspection event. This indicates why the event is // sent from user's Android Studio. enum EventCategory { UNKNOWN_EVENT_CATEGORY = 0; // The user has "used" this inspectoin, e.g., applied a quickfix from an // inspection or accepted the completion suggestion. USAGE_EVENT = 1; // Performance information for a given inspection or completion event. This // is sent when the inspection or completion feature logic has finished // computation. PERFORMANCE_EVENT = 2; } // Indicates why this event is reported. If this event is not set (by old // version of Android Studio), it means USAGE_EVENT. optional EventCategory event_category = 2; message PerformanceEvent { // The time it takes for the IDE to execute the logic for the JNI inspection // or completion. optional uint32 delay_ms = 1; } // Performance metrics for the inspection or completion event. This field // should only be set if `event_category` is `PERFORMANCE_EVENT`. optional PerformanceEvent performance_event = 3; } // Metrics related to C++ header file view in Android Project message CppHeadersViewEvent { enum CppHeadersViewEventType { UNKNOWN_CPP_HEADERS_VIEW_EVENT = 0; // Set when the user opens the top include node OPEN_TOP_INCLUDES_NODE = 1; } // Metrics related to enhanced C++ header files view enabled by // under ENABLE_ENHANCED_NATIVE_HEADER_SUPPORT flag optional CppHeadersViewEventType type = 1; // The amount of time taken for the event to complete in milliseconds. optional int64 event_duration_ms = 2; // The count of the immediate children of the node that was opened by // the user. optional int32 node_immediate_children = 3; } // Metrics on InstantRun usage. message InstantRun { // What kind of Instant Run deployment was chosen. optional InstantRunDeploymentKind deployment_kind = 1; // Historical, we had two enums tracking this, this one was never used. // what was the reason for chosing that kind of deployment from the gradle // side. optional InstantRunBuildCause instant_run_build_cause = 3 [deprecated = true]; // time the InstantRun enabled took in milliseconds. optional int64 build_time = 4; // The session id is a UUID within a single run of Android Studio // tracking multiple HOT_SWAP & DEX builds in the same // IR session (starting at FULL_APK and ending before FULL_APK). optional string session_id = 5; // what was the reason for chosing that kind of deployment from the IDE // side. optional InstantRunIdeBuildCause ide_build_cause = 6; // what was the reason for chosing that kind of deployment from the Gradle // side. optional InstantRunStatus.VerifierStatus gradle_build_cause = 7; // What Instant Run Deployment was used enum InstantRunDeploymentKind { UNKNOWN_INSTANT_RUN_DEPLOYMENT_KIND = 0; LEGACY = 1; FULL_APK = 2; SPLIT_APK = 3; DEX = 4; HOT_SWAP = 5; WARM_SWAP = 6; NO_CHANGES = 7; } // Historical, use InstantRunStatus.VerifierStatus instead. // The different reasons Instant Run had to do a full build. enum InstantRunBuildCause { UNKNOWN_INSTANT_RUN_BUILD_CAUSE = 0; COMPATIBLE = 1; MANIFEST_CHANGE = 2; FIELD_TYPE_CHANGE = 3; FIELD_REMOVED = 4; FIELD_ADDED = 5; METHOD_DELETED = 6; METHOD_ADDED = 7; CLASS_ADDED = 8; STATIC_INITIALIZER_CHANGE = 9; CLASS_ANNOTATION_CHANGE = 10; RESOURCE_CHANGE = 11; IMPLEMENTS_INTERFACE_CHANGE = 12; R_CLASS_CHANGE = 13; PARENT_CLASS_CHANGE = 14; METHOD_ANNOTATION_CHANGE = 15; API_LEVEL_UNSUPPORTED = 16; REFLECTION_USED = 17; } // The different reasons InstantRun chose the build mode it did from the IDE's // perspective. enum InstantRunIdeBuildCause { // reasons for clean build UNKNOWN_INSTANT_RUN_IDE_BUILD_CAUSE = 0; NO_DEVICE = 1; APP_NOT_INSTALLED = 2; MISMATCHING_TIMESTAMPS = 3; USER_REQUESTED_CLEAN_BUILD = 4; // reasons for full build API_TOO_LOW_FOR_INSTANT_RUN = 5; // first installation in this Android Studio session FIRST_INSTALLATION_TO_DEVICE = 6; MANIFEST_RESOURCE_CHANGED = 7; FREEZE_SWAP_REQUIRES_API21 = 8; FREEZE_SWAP_REQUIRES_WORKING_RUN_AS = 9; // reasons for forced cold swap build APP_NOT_RUNNING = 10; APP_USES_MULTIPLE_PROCESSES = 11; INCREMENTAL_BUILD = 12; NO_INSTANT_RUN = 13; ANDROID_TV_UNSUPPORTED = 14; // user pressed Run, only Run was enabled USER_REQUESTED_COLDSWAP = 15; // both Run and Hotswap were enabled, user chose Run USER_CHOSE_TO_COLDSWAP = 16; } } // describes Metrics on Metrics. message MetaMetrics { // number of times connecting to the clearcut server failed since // the last successful upload. optional int32 failed_connections = 1; // number of bytes used to send metrics in the last upload. optional int64 bytes_sent_in_last_upload = 2; // number of times the clearcut server failed with an http error since // the last successful upload. optional int32 failed_server_replies = 3; } // Describes a set of tests run. message TestRun { // Describes how tests where invoked. optional TestInvocationType test_invocation_type = 1; // Total number of tests that ran. optional int32 number_of_tests_executed = 2; // What kind of test is run. optional TestKind test_kind = 3; // Whether the test run finished successfully (regardless of results) or // tooling error happened. optional bool crashed = 4; // Set when test_invocation_type = GRADLE or ANDROID_STUDIO_THROUGH_GRADLE optional string gradle_version = 5; // e.g. '2.10' // Did the user/project enable code coverage on this test run? optional bool code_coverage_enabled = 6; // Provides details on commonly used test libraries. optional TestLibraries test_libraries = 7; // Only set when test_kind=INSTRUMENTATION_TEST optional TestExecution test_execution = 8; // Whether the feature Automatic Snapshot on Test Failure is enabled. // Currently only set when test_invocation_type = // ANDROID_STUDIO_THROUGH_GRADLE. optional AutomaticSnapshotOnFailure automatic_snapshot_on_failure = 9; // Describes how tests where invoked. enum TestInvocationType { UNKNOWN_TEST_INVOCATION_TYPE = 0; // Tests were run from the command-line. GRADLE_TEST = 1; // Tests were run by Android Studio run configurations logic. ANDROID_STUDIO_TEST = 2; // Tests were run by Gradle, but invoked through AS UI. ANDROID_STUDIO_THROUGH_GRADLE_TEST = 3; } // What kind of test is run. enum TestKind { UNKNOWN_TEST_KIND = 0; UNIT_TEST = 1; INSTRUMENTATION_TEST = 2; } // How instrumentation tests will be run enum TestExecution { UNKNOWN_TEST_EXECUTION = 0; HOST = 1; ANDROID_TEST_ORCHESTRATOR = 2; NITROGEN = 3; } // Configuration for automatic snapshot for test failures. message AutomaticSnapshotOnFailure { enum Enabled { UNSPECIFIED = 0; // AutomaticSnapshotOnFailure is enabled by RunConfiguration in Android // Studio. ENABLED_BY_RUN_CONFIGURATION = 1; // AutomaticSnapshotOnFailure is disabled by RunConfiguration in Android // Studio. DISABLED_BY_RUN_CONFIGURATION = 2; // Use value from Gradle DSL. USE_VALUE_IN_GRADLE_DSL = 3; } optional Enabled enabled = 1; } } // Provides details on commonly used test libraries. // Each string field of this message holds the exact version of the given // library (e.g. "1.0.0") that the field name represents. The field is populated // only if this project uses the given library. // Next ID: 41 message TestLibraries { // "com.android.support.test:runner". optional string test_support_library_version = 1; // "com.android.support.test:orchestrator". optional string test_support_orchestrator_version = 22; // "com.android.support.test:rules". optional string test_support_rules_version = 23; // "com.android.support.test.espresso:espresso-core". optional string test_support_espresso_version = 25; // "com.android.support.test.espresso:espresso-contrib". optional string test_support_espresso_contrib_version = 26; // "com.android.support.test.espresso:espresso-web". optional string test_support_espresso_web_version = 27; // "com.android.support.test.espresso:espresso-intents". optional string test_support_espresso_intents_version = 28; // "com.android.support.test.espresso:espresso-idling-resource". optional string test_support_espresso_idling_resource_version = 29; // "com.android.support.test.espresso:espresso-accessibility". optional string test_support_espresso_accessibility_version = 30; // "androidx.test:core". optional string test_core_version = 12; // "androidx.test:core-ktx". optional string test_core_ktx_version = 13; // "androidx.test:runner". optional string test_runner_version = 24; // "androidx.test:orchestrator". optional string test_orchestrator_version = 10; // "androidx.test:rules". optional string test_rules_version = 11; // "androidx.test.ext:junit". optional string test_ext_junit_version = 14; // "androidx.test.ext:junit-ktx". optional string test_ext_junit_ktx_version = 15; // "androidx.test.ext:truth". optional string test_ext_truth_version = 16; // "androidx.test.espresso:espresso-core" optional string espresso_version = 2; // "androidx.test.espresso:espresso-contrib" optional string espresso_contrib_version = 5; // "androidx.test.espresso:espresso-web" optional string espresso_web_version = 6; // "androidx.test.espresso:espresso-intents" optional string espresso_intents_version = 7; // "androidx.test.espresso:espresso-idling-resource" optional string espresso_idling_resource_version = 8; // "androidx.test.espresso:espresso-accessibility" optional string espresso_accessibility_version = 9; // "androidx.fragment:fragment-testing". optional string fragment_testing_version = 17; // "androidx.benchmark:benchmark-common". optional string benchmark_common_version = 20; // "androidx.benchmark:benchmark-junit4". optional string benchmark_junit4_version = 21; // "androidx.benchmark:benchmark-macro". optional string benchmark_macro_version = 31; // "androidx.benchmark:benchmark-macro-junit4". optional string benchmark_macro_junit4_version = 32; // "androidx.compose.ui:ui-test". optional string compose_ui_test_version = 38; // "androidx.compose.ui:ui-test-junit4". optional string compose_ui_test_junit4_version = 39; // "androidx.compose.ui:ui-test-manifest". optional string compose_ui_test_manifest_version = 40; // "org.robolectric:robolectric". optional string robolectric_version = 3; // "org.mockito:mockito-core". optional string mockito_version = 4; // "junit:junit" optional string junit_version = 18; // "com.google.truth:truth". optional string truth_version = 19; // "org.testng:testng" optional string test_ng_version = 33; // "org.junit.platform:junit-platform-launcher" optional string junit_platform_launcher_version = 34; // "org.junit.platform:junit-platform-runner" optional string junit_platform_runner_version = 35; // "org.junit.jupiter:junit-jupiter" optional string junit_jupiter_version = 36; // "org.junit.vintage:junit-vintage-engine" optional string junit_vintage_engine_version = 37; } // Describes the status of various Hypervisors message Hypervisor { optional HyperVState hyper_v_state = 1; // Status of the Hyper-V hypervisor. enum HyperVState { UNKNOWN_HYPERV_STATE = 0; // Have no idea HYPERV_ABSENT = 1; // No hyper-V found HYPERV_INSTALLED = 2; // Hyper-V is installed but not running HYPERV_RUNNING = 3; // Hyper-V is up and running HYPERV_CHECK_ERROR = 4; // Failed to detect status (emulator-check error) } } // Describes the status of the machine running the emulator. message EmulatorHost { // CPU manufacturer of the host, used as certain hypervisors are limited // to a certain manufacturer. optional string cpu_manufacturer = 1; // AMD, INTEL, ... // Does the host support virtualization technology optional bool virt_support = 2; // Is the host itself running inside a virtual machine. optional bool running_in_vm = 3; // May differ from os_architecture field as it is calculated differently, // trying to compensate the JVM bittness. optional int64 os_bit_count = 4; // CPU model, family, stepping, as stored in the EAX register // after issuing CPUID instruction with EAX=1: // 31 27 23 19 15 11 7 3 0 // 0000 yyyy yyyy xxxx 00tt ffff mmmm ssss optional uint32 cpuid_stepping = 5; // s: [3:0] stepping (CPU version) optional uint32 cpuid_model = 6; // m: [7:4] model (CPU model) optional uint32 cpuid_family = 7; // f: [11:8] family (CPU make) optional uint32 cpuid_type = 8; // t: [13:12] CPU type optional uint32 cpuid_extmodel = 9; // x: [19:16] extended model optional uint32 cpuid_extfamily = 10; // y: [27:20] extended family } // Detailed profiling information for the gradle build. message GradleBuildProfile { // Version of the open source Gradle application used. // e.g. "2.14" or "3.0-20160617000025+0000" optional string gradle_version = 2; // The value of the "os.name" system property. // e.g. "Linux" optional string os_name = 6; // The value of the "os.version" system property. // e.g. "3.13.0-86-generic" optional string os_version = 7; // The value of the "java.version" system property. // e.g. "1.8.0_40-ea" optional string java_version = 8; // The value of the "java.vm.version" system property. // e.g. "25.40-b25" optional string java_vm_version = 9; // The value of Runtime.getRuntime().maxMemory() optional int64 max_memory = 10; // The total time taken for this build in milliseconds. // This does not include Gradle's startup (before plugin apply) or shutdown // (after BuildListener#buildFinished(BuildResult) called. optional int64 build_time = 11; // The number of garbage collections during this build // Historical: Used in Android Gradle Plugin 2.2.x, circa 2016-10 optional int64 gc_count = 12 [deprecated = true]; // The time spent garbage collecting during this build. // Historical: Used in Android Gradle Plugin 2.2.x, circa 2016-10 optional int64 gc_time = 13 [deprecated = true]; // The projects that make up this multi-project build. repeated GradleBuildProject project = 14; // Samples of the memory state of the daemon during the build. repeated GradleBuildMemorySample memory_sample = 15; // The fine-grained execution spans which record granular timings. repeated GradleBuildProfileSpan span = 16; // For instant run builds: the resulting instant run build info. optional InstantRunStatus instant_run_status = 17; // Client-side salted, sha256 of the root project path. // This exists to allow multiple instant run builds in one project by one // user to be correlated. // // The salt is rotated every 28 days, so it is not a permanent pseudonymous // identifier. It is anonymized and is unique per user, but has a 1-N // relation. optional string project_id = 18; // the project id as used in the playstore, e.g. // 'com.google.android.apps.maps'. This is sensitive information and // thus restricted to "raw" sawmill access. This data is only available in // and for PWG approved scenarios. // This is repeated, as a gradle build may include multiple apps, either // by variants or by multiple 'app' subprojects. repeated string raw_project_id = 19; // If at least one module has enableCompose set to true optional bool compose_enabled = 20; // If Gradle configuration caching is enabled. optional bool configuration_caching_enabled = 21; // If Gradle parallel task execution is enabled. optional bool parallel_task_execution = 22; } message GradleBuildProject { // Identifier, local to the containing AndroidStudioEvent, for the project. // Can be used to correlate spans (GradleBuildProfileSpan) with this // project for this build only. Is created by sequentially // numbering projects as they are encountered. // Is not stable across build invocations. optional int64 id = 1; // Version of our Android Gradle plugin supporting android builds. // e.g. '2.0-beta1' // For the experimental plugin this is the gradle-core version. optional string android_plugin_version = 2; // Which Android Gradle plugin is used. optional PluginType android_plugin = 3; // Which plugin generation is used. optional PluginGeneration plugin_generation = 4; // The build tools version used, e.g. '24.0.0 rc2' optional string build_tools_version = 5; // Statistics about the project build. // Will be used to characterize and bucket projects for subgroup analysis. optional GradleBuildProjectMetrics metrics = 6; // The variants in this project repeated GradleBuildVariant variant = 7; // For instantApps, the number of dependent atoms. optional int64 atoms = 8; // The compile SDK. // Stored in the form of a target hash // e.g. "android-25" or "The Vendor Inc.:My Addon:10" optional string compile_sdk = 9; // The split config as defined by the user in the DSL. optional GradleBuildSplits splits = 10; // Version of the Kotlin Gradle plugin used, if any. // e.g. '1.1.3' optional string kotlin_plugin_version = 11; // The project options as set by the user or by studio. optional GradleProjectOptionsSettings options = 12; // All of the gradle plugins applied to this project repeated GradlePlugin plugin = 13; // The version of the firebase performance plugin applied to the project // e.g. '1.3.0' optional string firebase_performance_plugin_version = 14; // If enableCompose is set to true optional bool compose_enabled = 15; // All of the gradle plugin names applied to this project, // these are class names of the plugins, not free form names // deprecated, use applied_plugins instead repeated string plugin_names = 16 [deprecated = true]; // Record all of the task class names applied to the project // e.g an example is ORG_GRADLE_API_TASKS_WRAPPER_WRAPPER_DECORATED repeated string task_names = 17; // Records use of APIs used at the sub-project level optional ProjectApiUse project_api_use = 18; // All the gradle plugins applied to this project. repeated GradlePluginData applied_plugins = 19; enum PluginType { UNKNOWN_PLUGIN_TYPE = 0; // The 'com.android.application' or 'com.android.model.application' plugins. APPLICATION = 1; // The 'com.android.library' or 'com.android.model.library' plugins. LIBRARY = 2; // The 'com.android.test' plugin. TEST = 3; // The 'com.android.atom' plugin. ATOM = 4; // The 'com.android.instantapp' plugin. INSTANTAPP = 5; // The 'com.android.feature' plugin. FEATURE = 6; // The 'com.android.dynamic-feature' plugin. DYNAMIC_FEATURE = 7; // The 'com.android.fused-library' plugin FUSED_LIBRARIES = 8; // the 'com.android.privacy-sandbox-sdk' plugin PRIVACY_SANDBOX_SDK = 9; } enum PluginGeneration { UNKNOWN_PLUGIN_GENERATION = 0; // The 'com.android.[application,library,test,atom,instantapp] plugins. FIRST = 1; // The 'com.android.model.[application,library]' plugins COMPONENT_MODEL = 2; } enum GradlePlugin { UNKNOWN_GRADLE_PLUGIN = 0; ORG_GRADLE_API_PLUGINS_HELPTASKSPLUGIN = 1; COM_ANDROID_BUILD_GRADLE_API_ANDROIDBASEPLUGIN = 2; COM_ANDROID_BUILD_API_PLUGIN_ANDROIDBASEPLUGIN = 3; ORG_GRADLE_LANGUAGE_BASE_PLUGINS_LIFECYCLEBASEPLUGIN = 4; ORG_GRADLE_API_PLUGINS_BASEPLUGIN = 5; ORG_GRADLE_API_PLUGINS_REPORTINGBASEPLUGIN = 6; ORG_GRADLE_PLATFORM_BASE_PLUGINS_COMPONENTBASEPLUGIN = 7; ORG_GRADLE_LANGUAGE_BASE_PLUGINS_LANGUAGEBASEPLUGIN = 8; ORG_GRADLE_PLATFORM_BASE_PLUGINS_BINARYBASEPLUGIN = 9; ORG_GRADLE_API_PLUGINS_JAVABASEPLUGIN = 10; COM_ANDROID_BUILD_GRADLE_APPPLUGIN = 11; COM_ANDROID_BUILD_API_PLUGIN_APPPLUGIN = 12; ORG_JETBRAINS_KOTLIN_GRADLE_PLUGIN_KOTLINANDROIDPLUGINWRAPPER = 13; COM_GOOGLE_GMS_GOOGLESERVICES_GOOGLESERVICESPLUGIN = 14; ORG_GRADLE_API_PLUGINS_ANDROIDMAVENPLUGIN = 15; ORG_GRADLE_API_PLUGINS_JAVAPLUGIN = 16; ORG_GRADLE_API_PLUGINS_MAVENPLUGIN = 17; ORG_GRADLE_API_PLUGINS_QUALITY_CHECKSTYLEPLUGIN = 18; ORG_GRADLE_API_PLUGINS_QUALITY_FINDBUGSPLUGIN = 19; ORG_GRADLE_API_PLUGINS_QUALITY_JDEPEND = 20; ORG_GRADLE_API_PLUGINS_QUALITY_PMDPLUGIN = 21; ORG_GRADLE_API_PUBLISH_MAVEN_PLUGINS_MAVENPUBLISHPLUGIN = 22; ORG_GRADLE_PLUGINS_SIGNING_SIGNINGPLUGIN = 23; ORG_GRADLE_TESTING_JACOCO_PLUGINS_JACOCOPLUGIN = 24; COM_GOOGLE_AR_SCENEFORM_PLUGIN_SCENEFORMPLUGIN = 25; COM_GOOGLE_ANDROID_GMS_STRICTVERSIONMATCHERPLUGIN = 26; COM_GOOGLE_FIREBASE_PERF_PLUGIN_FIREBASEPERFPLUGIN = 27; COM_GOOGLE_FIREBASE_CRASH_PLUGIN_FIREBASECRASHPLUGIN = 28; COM_GOOGLE_GMS_OSS_LICENSES_PLUGIN_OSSLICENSESPLUGIN = 29; ORG_GOLANG_MOBILE_GOBINDPLUGIN = 30; BUTTERKNIFE_PLUGIN_BUTTERKNIFEPLUGIN = 31; COM_DICEDMELON_GRADLE_JACOCO_ANDROID_JACOCOANDROIDPLUGIN = 32; COM_GETKEEPSAFE_DEXCOUNT_DEXMETHODCOUNTPLUGIN = 33; COM_GITHUB_BENMANES_GRADLE_VERSIONS_VERSIONSPLUGIN = 34; COM_JAKEWHARTON_SDKMANAGER_SDKMANAGERPLUGIN = 35; COM_JFROG_BINTRAY_GRADLE_BINTRAYPLUGIN = 36; COM_NEENBEDANKT_GRADLE_ANDROIDAPT_ANDROIDAPTPLUGIN = 37; COM_NOVODA_GRADLE_RELEASE_RELEASEPLUGIN = 38; DE_TRIPLET_GRADLE_PLAY_PLAYPUBLISHERPLUGIN = 39; HUGO_WEAVING_PLUGIN_HUGOPLUGIN = 40; IO_REALM_GRADLE_REALM = 41; ME_TATARKA_RETROLAMBDAPLUGIN = 42; ORG_JETBRAINS_KOTLIN_GRADLE_INTERNAL_ANDROIDEXTENSIONSSUBPLUGININDICATOR = 43; ORG_JETBRAINS_KOTLIN_GRADLE_INTERNAL_KAPT3GRADLESUBPLUGIN = 44; ORG_KT3K_GRADLE_PLUGIN_COVERALLSPLUGIN = 45; COM_CRASHLYTICS_TOOLS_GRADLE_CRASHLYTICSPLUGIN = 46; COM_ANDROID_BUILD_GRADLE_DYNAMICFEATUREPLUGIN = 47; COM_ANDROID_BUILD_GRADLE_FEATUREPLUGIN = 48; COM_ANDROID_BUILD_GRADLE_INSTANTAPPPLUGIN = 49; COM_ANDROID_BUILD_GRADLE_INTERNAL_PLUGINS_STRUCTUREPLUGIN = 50; COM_ANDROID_BUILD_GRADLE_LIBRARYPLUGIN = 51; COM_ANDROID_BUILD_GRADLE_LINTPLUGIN = 52; COM_ANDROID_BUILD_GRADLE_REPORTINGPLUGIN = 53; COM_ANDROID_BUILD_GRADLE_TESTPLUGIN = 54; ORG_GRADLE_BUILDINIT_PLUGINS_BUILDINITPLUGIN = 55; ORG_GRADLE_BUILDINIT_PLUGINS_WRAPPERPLUGIN = 56; COM_ANDROID_BUILD_GRADLE_INTERNAL_PLUGINS_APPPLUGIN = 57; COM_ANDROID_BUILD_GRADLE_INTERNAL_PLUGINS_LIBRARYPLUGIN = 58; COM_ANDROID_BUILD_GRADLE_INTERNAL_PLUGINS_DYNAMICFEATUREPLUGIN = 59; COM_ANDROID_BUILD_GRADLE_INTERNAL_PLUGINS_REPORTINGPLUGIN = 60; COM_ANDROID_BUILD_GRADLE_INTERNAL_PLUGINS_TESTPLUGIN = 61; COM_ANDROID_BUILD_GRADLE_INTERNAL_PLUGINS_VERSIONCHECKPLUGIN = 62; PROGUARD_GRADLE_PROGUARDPLUGIN = 63; } } // Data of a gradle plugin. message GradlePluginData { // The name of the plugin class. e.g. com.android.build.gradle.LintPlugin optional string class_name = 1; // The name of the jar containing the plugin class, will be on the form: // artifactId-version. e.g. "kotlin-gradle-plugin-1.5.30" optional string jar_name = 2; } // Records use of APIs used at the gradle project level message ProjectApiUse { // Whether the device provider API is used in this project. optional bool builder_test_api_device_provider = 1; // Whether the test server API is used in this project. optional bool builder_test_api_test_server = 2; } // Configuration flags for the gradle plugin. // // These are set by studio when invoking the gradle plugin, or manually by the // end user. // // The Android Gradle Plugin will only report options that are explicitly set. // See tools/analytics-library/protos/src/main/proto/analytics_enums.proto for // the enums for these option classes. message GradleProjectOptionsSettings { // Boolean options that are explicitly set. // Note that boolean options have defaults. This is not captured here, // only what is overridden either manually by the developer or by studio. // A reference to the proto enum in android git, see BooleanOption in // tools/analytics-library/protos/src/main/proto/analytics_enums.proto // Boolean options that are explicitly set to true. repeated int32 true_boolean_options = 1; // Boolean options that are explicitly set to false. // (see above description of true_boolean_options) repeated int32 false_boolean_options = 2; // Optional boolean options that are explicitly set. // A reference to the proto enum in android git, see OptionalBooleanOption in // tools/analytics-library/protos/src/main/proto/analytics_enums.proto // Optional boolean options that are explicitly set to true. repeated int32 true_optional_boolean_options = 3; // Optional boolean options that are explicitly set to false. // (see above description of true_optional_boolean_options) repeated int32 false_optional_boolean_options = 4; // Integer option values that are explicitly set, with their values. // Contains a reference to the proto enum in android git, see IntegerOption in // tools/analytics-library/protos/src/main/proto/analytics_enums.proto repeated GradleIntegerOptionEntry integer_option_values = 5; // Long options that are explicitly set. Values are not included. // A reference to the proto enum in android git, see LongOption in // tools/analytics-library/protos/src/main/proto/analytics_enums.proto repeated int32 long_options = 6; // String options that are explicitly set. Values are not recorded as they // could include arbitrary information. // A reference to the proto enum in android git, see StringOption in // tools/analytics-library/protos/src/main/proto/analytics_enums.proto repeated int32 string_options = 7; } // An explicitly set integer option in the gradle plugin, with its value. message GradleIntegerOptionEntry { // The integer option, set by studio or the user. // A reference to the proto enum in android git, see IntegerOption in // tools/analytics-library/protos/src/main/proto/analytics_enums.proto optional int32 integer_option = 1; // The value set by the user for this integer option. // Integer options are of one of two forms, and do not identify users. // 1. Software and protocol versions, such as the build target device API // level, or the type of model requested by studio. // 2. Performance tuning settings, such as test shard counts, thread pool // sizes and buffer sizes. optional int32 integer_option_value = 2; } message GradleBuildSplits { // Are density splits enabled? optional bool density_enabled = 1; // Is automatic discovery based on the merged resources enabled? // Only set if density splits are enabled. // Deprecated as of AS3.3 (b/111291762) optional bool density_auto = 2 [deprecated = true]; // Injected compatible screens manifest values. // Only populated if language splits are enabled. // e.g. NORMAL, LARGE, XLARGE repeated CompatibleScreenSize density_compatible_screens = 3; // Densities that the application will be split on. // Only populated if density splits are enabled. // e.g. 480, 560, 640 // See // https://android.googlesource.com/platform/tools/base/+/studio-master-dev/layoutlib-api/src/main/java/com/android/resources/Density.java // for a comprensive list of possible values. repeated int32 density_values = 4; // Are language splits enabled? optional bool language_enabled = 5; // Is automatic discovery based on the merged resources enabled? // Only set if language splits are enabled. // Deprecated as of AS3.3 (b/111291762) optional bool language_auto = 6 [deprecated = true]; // Language and region codes that the application will be split on. // Only populated if language splits are enabled. // e.g. 'fr,fr-rBE', 'fr-rCA', 'en' repeated string language_includes = 7; // Are ABI splits enabled? optional bool abi_enabled = 8; // Will a universal APK be generated? // Only set if abi splits are enabled. optional bool abi_enable_universal_apk = 9; // ABIs that the application will be split on. // Only populated if abi splits are enabled. // e.g. 'x86', 'armeabi-v7a' repeated DeviceInfo.ApplicationBinaryInterface abi_filters = 10; enum CompatibleScreenSize { UNKNOWN_SCREEN_SIZE = 0; SMALL = 1; NORMAL = 2; LARGE = 3; XLARGE = 4; } } message GradleBuildProjectMetrics { // The time taken to collect these metrics optional int64 metrics_time_ns = 1; // The size of the APK built, if relevant. optional int64 apk_size = 2; // The size of the resources_ap included in that apk. optional int64 resources_ap_size = 3; } message GradleBuildVariant { // Identifier, local to this AndroidStudioEvent, for the variant. // Can be used to correlate spans (GradleBuildProfileSpan) with this // project for this build only. Is created by sequentially // numbering variants as they are created. // Is not stable across build invocations. optional int64 id = 1; // Whether the variant is debuggable. optional bool is_debug = 2; // Whether the variant is compiled using jack optional bool use_jack = 3; // Whether the variant is minified optional bool minify_enabled = 4; // Is multidex enabled for the variant optional bool use_multidex = 5; // Is legacy (pre-api 19) multidex enabled for the variant. // Only can true if use_multidex is also true. optional bool use_legacy_multidex = 6; // The type of variant. optional VariantType variant_type = 7; // For test variants, the tested variant id. (See GradleBuildVariant.id) optional int64 tested_id = 8; // List of proguard flags used in this build variant. // NOTE this is a string as the proguard flags can be changed // based on which release of proguard is being used and is outside of our // control. See https://www.guardsquare.com/en/proguard/manual/usage // for current list. This property only will contain the "-" without // the arguments passed to that flag. repeated string proguard_flags = 9; // Java annotation processors used in this build variant. // Uses the Gradle compact format: package:module:version repeated AnnotationProcessorInfo annotation_processors = 10; // If Java 8 language support is enabled, which tools provides it. optional Java8LangSupport java8_lang_support = 11; // The various device api versions of this variant. // Minimum supported. optional ApiVersion min_sdk_version = 12; // Target sdk version. optional ApiVersion target_sdk_version = 13; // The maximum sdk version optional ApiVersion max_sdk_version = 14; optional DexBuilderTool dex_builder = 15; optional DexMergerTool dex_merger = 16; optional CodeShrinkerTool code_shrinker = 17; // The method used to run instrumentation tests for this variant. optional TestRun.TestExecution test_execution = 18; // The underlying native project system. optional GradleNativeAndroidModule.NativeBuildSystemType native_build_system_type = 19; // The CMake version number if this is a CMake-based build. optional string native_cmake_version = 20; // Per-ABI native build info. repeated NativeBuildConfigInfo native_build_config = 21; // Whether annotation processing could be run incrementally optional bool is_annotation_processing_incremental = 22; // Whether this variant (a base module or dynamic feature) is marked as // instant enabled in its manifest (Google Play Instant / Instant Apps) optional bool is_instant_enabled = 23; // Whether coreLibraryDesugaring is enabled for the variant optional bool core_library_desugaring_enabled = 24; // container for variant api accesses if the variant api was used. optional VariantApiUsage variant_api_access = 25; // Kotlin-specific options in build files optional KotlinOptions kotlin_options = 26; // List of registered classes transforms repeated AsmClassesTransformRegistration asm_classes_transforms = 27; // List of updates to the frames computation mode repeated AsmFramesComputationModeUpdate frames_computation_mode_updates = 28; // Native diagnostic codes logged while processing this variant. For a list // of possible values, see // /tools/base/common/src/main/java/com/android/utils/cxx/CxxDiagnosticCode.kt repeated int32 cxx_diagnostic_codes = 29 [packed = true]; // whether this variant has unit tests enabled optional bool has_unit_test = 30; // whether this variant has android tests enabled optional bool has_android_test = 31; // whether this variant has test fixtures enabled optional bool has_test_fixtures = 32; // The nature of this variant. // The test variants have an associated tested variant. // See com.android.builder.core.VariantType enum VariantType { // For building an APK. APPLICATION = 0; // For building an AAR. LIBRARY = 1; // For building an android test APK. ANDROID_TEST = 2; // For building unit tests to run locally. UNIT_TEST = 3; // For building an atombundle. ATOM = 4; // For building an IAPK. INSTANTAPP = 5; // For building a split APK. FEATURE = 6; // For building an optional APK. OPTIONAL_APK = 7; // For building a test APK TEST_APK = 8; // For a java library (java or java-library plugin, for the standalone lint // plugin) JAVA_LIBRARY = 9; // For test fixtures components. TEST_FIXTURES = 10; // main artifact of the privacy sandbox sdk bundle plugin PRIVACY_SANDBOX_SDK = 11; } // Different tools that provide Java 8 language usage. enum Java8LangSupport { // the built-in support in the plugin INTERNAL = 0; // Retrolambda plugin RETROLAMBDA = 1; // Dexguard plugin DEXGUARD = 2; // Jack compiler JACK = 3; // D8 compiler D8 = 4; // R8 compiler R8_DESUGARING = 5; } // Tools that can used to build dex enum DexBuilderTool { UNKNOWN_DEX_BUILDER_TOOL = 0; DX_DEXER = 1; D8_DEXER = 2; } // Tools that can be used to merge dex files enum DexMergerTool { UNKNOWN_DEX_MERGER_TOOL = 0; DX_MERGER = 1; D8_MERGER = 2; } // The tool used for code shrinking enum CodeShrinkerTool { UNKNOWN_CODE_SHRINKER = 0; PROGUARD = 1; ANDROID_GRADLE_SHRINKER = 2; R8 = 3; } // Per-variant information about native build message NativeBuildConfigInfo { // Whether the Json generation phase was successful, up-to-date, or failed optional GenerationOutcome outcome = 1; // The ABI that generation is run for optional DeviceInfo.ApplicationBinaryInterface abi = 2; // The Platform API version that generation phase chose optional int32 platform_api_version = 3; // Whether or not this was a debuggable build optional bool debuggable = 4; // Time at the start of generation optional int64 generation_start_ms = 5; // Duration of Json generation optional int64 generation_duration_ms = 6; // Information about individual libraries repeated NativeLibraryInfo libraries = 7; enum GenerationOutcome { UNKNOWN_GENERATION_OUTCOME = 0; FAILED = 1; SUCCESS_BUILT = 2; SUCCESS_UP_TO_DATE = 3; } } // Per-variant-per-library information about native build message NativeLibraryInfo { optional int32 source_file_count = 1; // Whether or not the compiler flags contain -glldb optional bool has_glldb_flag = 2; } message KotlinOptions { // if IR backend is enabled optional bool use_ir = 1; } } message AnnotationProcessorInfo { // The user's original spec, e.g. 'org.immutables:value:2.4.4' // Often, though not always, in the form 'package:name:version'. optional string spec = 1; // How the processor was included in the build file. optional InclusionType inclusion_type = 2; // Whether the annotation processor is // incremental(isolating/aggregating/dynamic) optional bool is_incremental = 3; enum InclusionType { // The old apt way of including them. APT = 0; // Implicit on the compile classpath. COMPILE_CLASSPATH = 1; // The new annotationProcessor way to include them. ANNOTATION_PROCESSOR = 2; // From KSP KSP = 3; } } // An android API version, for min, compile, max and target sdk versions. // E.g. for Nougat 7.1 this is api_level=25, codename unset. // For O-preview this is api_level=25, codename="O". message ApiVersion { optional int64 api_level = 1; optional string codename = 2; } message GradleBuildMemorySample { // Garbage collection time since the current daemon started. // Historical: Used in Android Gradle Plugin 2.2.x, circa 2016-10 // Replaced by JavaProcessStats. optional int64 gc_time_ms = 1 [deprecated = true]; // Garbage collection count since the current daemon started. // Historical: Used in Android Gradle Plugin 2.2.x, circa 2016-10. // Replaced by JavaProcessStats. optional int64 gc_count = 2 [deprecated = true]; // Time that the memory stats were collected. optional int64 timestamp = 3; // More detailed stats on the current running java process. optional JavaProcessStats java_process_stats = 4; } // A single execution span from a build. // For example, a task execution or creation of some tasks for a variant. message GradleBuildProfileSpan { // Identifier for this span, created by sequentially allocating IDs to spans // as they start. Used only for the parent-child relationship of spans, to // show execution that is part of another span. // Not stable or meaningful across builds. optional int64 id = 1; // For nested spans: the id for containing span. // See GradleBuildProfileSpan.id. optional int64 parent_id = 2; // The start time of this event optional int64 start_time_in_ms = 3; // The duration of this event. May be zero. optional int64 duration_in_ms = 4; // The type of event recorded optional ExecutionType type = 5; // More informations about the execution of TransformTasks. // Only used when executionType is TASK_TRANSFORM_PREPARATION or // TASK_TRANSFORM. optional GradleTransformExecution transform = 6; // More informations about the execution of Tasks. // Only used when executionType is TASK_EXECUTION optional GradleTaskExecution task = 9; // Session id of the GradleBuildProject that this span is part of. // The ID is not stable nor meaningful over multiple GradleBuildProfile. // See GradleBuildProfile.id optional int64 project = 7; // Session id of the GradleBuildVariant that this span is part of. // The ID is not stable nor meaningful over multiple GradleBuildProfile. // See GradleBuildVariant.id optional int64 variant = 8; // Thread that this execution occurs on. // Generated by sequentially numbering java threads that do work that is // recorded. // Will not be populated for async recorded events, // such as from the task execution listener. optional int64 thread_id = 10; // The type of execution. // This was originally com.android.builder.profile.ExecutionType. enum ExecutionType { SOME_RANDOM_PROCESSING = 1; BASE_PLUGIN_PROJECT_CONFIGURE = 2; BASE_PLUGIN_PROJECT_BASE_EXTENSION_CREATION = 3; BASE_PLUGIN_PROJECT_TASKS_CREATION = 4; BASE_PLUGIN_BUILD_FINISHED = 5; TASK_MANAGER_CREATE_TASKS = 6; BASE_PLUGIN_CREATE_ANDROID_TASKS = 7; VARIANT_MANAGER_CREATE_ANDROID_TASKS = 8; VARIANT_MANAGER_CREATE_TASKS_FOR_VARIANT = 9; VARIANT_MANAGER_CREATE_LINT_TASKS = 10; VARIANT_MANAGER_CREATE_TESTS_TASKS = 11; VARIANT_MANAGER_CREATE_VARIANTS = 12; RESOLVE_DEPENDENCIES = 13; // span for task execution as reported by Gradle, that's including Gradle's // pre and post task activities. TASK_EXECUTION = 14; WORKER_EXECUTION = 15; THREAD_EXECUTION = 16; ARTIFACT_TRANSFORM = 17; INITIAL_METADATA = 100 [deprecated = true]; FINAL_METADATA = 101 [deprecated = true]; GENERAL_CONFIG = 102; VARIANT_CONFIG = 103; VARIANT_MANAGER_EXTERNAL_NATIVE_CONFIG_VALUES = 104; APK_METRICS = 105; // span for task execution excluding Gradle's pre and post task activities. TASK_EXECUTION_ALL_PHASES = 200; // generic span types for task implementation. Phases are sequential sub // parts of the task implementation that can help determine the performance // of sub parts of the task implementation. // For instance a task spans can look like : // // <---------------------- TASK_EXECUTION -------------------> // <--PRE--><------- TASK_EXECUTION_ALL_PHASES ----><--POST--> // <---PHASE_1---><-PHASE_2-><--PHASE_3---> // TASK_EXECUTION_PHASE_1 = 201; TASK_EXECUTION_PHASE_2 = 202; TASK_EXECUTION_PHASE_3 = 203; TASK_EXECUTION_PHASE_4 = 204; TASK_EXECUTION_PHASE_5 = 205; TASK_EXECUTION_PHASE_6 = 206; TASK_EXECUTION_PHASE_7 = 207; TASK_EXECUTION_PHASE_8 = 208; TASK_EXECUTION_PHASE_9 = 209; // span for gradle overhead before task execution GRADLE_PRE_TASK_SPAN = 298; // span for gradle overhead after task execution GRADLE_POST_TASK_SPAN = 299; // ApplicationTaskManager per variant tasks. APP_TASK_MANAGER_CREATE_MERGE_MANIFEST_TASK = 1000 [deprecated = true]; APP_TASK_MANAGER_CREATE_GENERATE_RES_VALUES_TASK = 1001 [deprecated = true]; APP_TASK_MANAGER_CREATE_CREATE_RENDERSCRIPT_TASK = 1002 [deprecated = true]; APP_TASK_MANAGER_CREATE_MERGE_RESOURCES_TASK = 1003 [deprecated = true]; APP_TASK_MANAGER_CREATE_MERGE_ASSETS_TASK = 1004 [deprecated = true]; APP_TASK_MANAGER_CREATE_BUILD_CONFIG_TASK = 1005 [deprecated = true]; APP_TASK_MANAGER_CREATE_PROCESS_RES_TASK = 1006 [deprecated = true]; APP_TASK_MANAGER_CREATE_AIDL_TASK = 1007 [deprecated = true]; APP_TASK_MANAGER_CREATE_COMPILE_TASK = 1008 [deprecated = true]; APP_TASK_MANAGER_CREATE_NDK_TASK = 1009 [deprecated = true]; APP_TASK_MANAGER_CREATE_SPLIT_TASK = 1010 [deprecated = true]; APP_TASK_MANAGER_CREATE_PACKAGING_TASK = 1011 [deprecated = true]; APP_TASK_MANAGER_CREATE_PREPROCESS_RESOURCES_TASK = 1012 [deprecated = true]; APP_TASK_MANAGER_CREATE_BACKPORT_RESOURCES_TASK = 1013 [deprecated = true]; APP_TASK_MANAGER_CREATE_LINT_TASK = 1014 [deprecated = true]; APP_TASK_MANAGER_CREATE_MERGE_JNILIBS_FOLDERS_TASK = 1015 [deprecated = true]; APP_TASK_MANAGER_CREATE_SHADER_TASK = 1016 [deprecated = true]; APP_TASK_MANAGER_CREATE_EXTERNAL_NATIVE_BUILD_TASK = 1017 [deprecated = true]; APP_TASK_MANAGER_CREATE_STRIP_NATIVE_LIBRARY_TASK = 1018 [deprecated = true]; // LibraryTaskManager per variant tasks. LIB_TASK_MANAGER_CREATE_MERGE_MANIFEST_TASK = 2000 [deprecated = true]; LIB_TASK_MANAGER_CREATE_GENERATE_RES_VALUES_TASK = 2001 [deprecated = true]; LIB_TASK_MANAGER_CREATE_CREATE_RENDERSCRIPT_TASK = 2002 [deprecated = true]; LIB_TASK_MANAGER_CREATE_MERGE_RESOURCES_TASK = 2003 [deprecated = true]; LIB_TASK_MANAGER_CREATE_MERGE_ASSETS_TASK = 2004 [deprecated = true]; LIB_TASK_MANAGER_CREATE_BUILD_CONFIG_TASK = 2005 [deprecated = true]; LIB_TASK_MANAGER_CREATE_PROCESS_RES_TASK = 2006 [deprecated = true]; LIB_TASK_MANAGER_CREATE_AIDL_TASK = 2007 [deprecated = true]; LIB_TASK_MANAGER_CREATE_COMPILE_TASK = 2008 [deprecated = true]; LIB_TASK_MANAGER_CREATE_NDK_TASK = 2009 [deprecated = true]; LIB_TASK_MANAGER_CREATE_SPLIT_TASK = 2010 [deprecated = true]; LIB_TASK_MANAGER_CREATE_PACKAGING_TASK = 2011 [deprecated = true]; LIB_TASK_MANAGER_CREATE_MERGE_PROGUARD_FILE_TASK = 2012 [deprecated = true]; LIB_TASK_MANAGER_CREATE_POST_COMPILATION_TASK = 2013 [deprecated = true]; LIB_TASK_MANAGER_CREATE_PROGUARD_TASK = 2014 [deprecated = true]; LIB_TASK_MANAGER_CREATE_PACKAGE_LOCAL_JAR = 2015 [deprecated = true]; LIB_TASK_MANAGER_CREATE_BACKPORT_RESOURCES_TASK = 2016 [deprecated = true]; LIB_TASK_MANAGER_CREATE_LINT_TASK = 2017 [deprecated = true]; LIB_TASK_MANAGER_CREATE_SHADER_TASK = 2018 [deprecated = true]; LIB_TASK_MANAGER_CREATE_EXTERNAL_NATIVE_BUILD_TASK = 2019 [deprecated = true]; // Task execution: Deprecated, use TASK_EXECUTION and // GradleTaskExecution#Type instead. // Deprecated July 2016. GENERIC_TASK_EXECUTION = 3000 [deprecated = true]; TASK_AIDL_COMPILE = 3001 [deprecated = true]; TASK_DELETE = 3002 [deprecated = true]; TASK_CHECK_MANIFEST = 3003 [deprecated = true]; TASK_PREPARE_DEPENDENCIES_TASK = 3004 [deprecated = true]; TASK_RENDERSCRIPT_COMPILE = 3005 [deprecated = true]; TASK_GENERATE_BUILD_CONFIG = 3006 [deprecated = true]; TASK_MERGE_ASSETS = 3007 [deprecated = true]; TASK_GENERATE_RES_VALUES = 3008 [deprecated = true]; TASK_MERGE_RESOURCES = 3009 [deprecated = true]; TASK_MERGE_MANIFESTS = 3010 [deprecated = true]; TASK_PROCESS_ANDROID_RESOURCES = 3011 [deprecated = true]; TASK_JAVA_COMPILE = 3012 [deprecated = true]; TASK_NDK_COMPILE = 3013 [deprecated = true]; TASK_PRE_DEX = 3014 [deprecated = true]; TASK_DEX = 3015 [deprecated = true]; TASK_PACKAGE_SPLIT_RES = 3016 [deprecated = true]; TASK_PROCESS_RESOURCES = 3017 [deprecated = true]; TASK_VALIDATE_SIGNING_TASK = 3018 [deprecated = true]; TASK_PACKAGE_APPLICATION = 3019 [deprecated = true]; TASK_SPLIT_ZIP_ALIGN = 3020 [deprecated = true]; TASK_ZIP_ALIGN = 3021 [deprecated = true]; TASK_COPY = 3022 [deprecated = true]; TASK_LINT = 3023 [deprecated = true]; TASK_FILE_VERIFICATION = 3026 [deprecated = true]; TASK_EXTERNAL_NATIVE_BUILD_GENERATE_JSON_PROCESS_PER_ABI = 3027 [deprecated = true]; TASK_EXTERNAL_NATIVE_BUILD_GENERATE_JSON_PROCESS = 3028 [deprecated = true]; // Transform execution TASK_TRANSFORM_PREPARATION = 3024; TASK_TRANSFORM = 3025; // AtomTaskManager per variant tasks. ATOM_TASK_MANAGER_CREATE_MERGE_MANIFEST_TASK = 4000 [deprecated = true]; ATOM_TASK_MANAGER_CREATE_GENERATE_RES_VALUES_TASK = 4001 [deprecated = true]; ATOM_TASK_MANAGER_CREATE_CREATE_RENDERSCRIPT_TASK = 4002 [deprecated = true]; ATOM_TASK_MANAGER_CREATE_MERGE_RESOURCES_TASK = 4003 [deprecated = true]; ATOM_TASK_MANAGER_CREATE_MERGE_ASSETS_TASK = 4004 [deprecated = true]; ATOM_TASK_MANAGER_CREATE_BUILD_CONFIG_TASK = 4005 [deprecated = true]; ATOM_TASK_MANAGER_CREATE_PROCESS_RES_TASK = 4006 [deprecated = true]; ATOM_TASK_MANAGER_CREATE_AIDL_TASK = 4007 [deprecated = true]; ATOM_TASK_MANAGER_CREATE_SHADER_TASK = 4008 [deprecated = true]; ATOM_TASK_MANAGER_CREATE_NDK_TASK = 4009 [deprecated = true]; ATOM_TASK_MANAGER_CREATE_EXTERNAL_NATIVE_BUILD_TASK = 4010 [deprecated = true]; ATOM_TASK_MANAGER_CREATE_MERGE_JNILIBS_FOLDERS_TASK = 4011 [deprecated = true]; ATOM_TASK_MANAGER_CREATE_COMPILE_TASK = 4012 [deprecated = true]; ATOM_TASK_MANAGER_CREATE_BUNDLING_TASK = 4013 [deprecated = true]; ATOM_TASK_MANAGER_CREATE_LINT_TASK = 4014 [deprecated = true]; // InstantAppTaskManager per variant tasks. INSTANTAPP_TASK_MANAGER_CREATE_MERGE_MANIFEST_TASK = 5000 [deprecated = true]; INSTANTAPP_TASK_MANAGER_CREATE_ATOM_PACKAGING_TASKS = 5001 [deprecated = true]; INSTANTAPP_TASK_MANAGER_CREATE_PROCESS_RES_TASK = 5002 [deprecated = true]; INSTANTAPP_TASK_MANAGER_CREATE_PACKAGING_TASK = 5003 [deprecated = true]; // FeatureTaskManager per variant tasks. FEATURE_TASK_MANAGER_CREATE_BASE_TASKS = 6000 [deprecated = true]; FEATURE_TASK_MANAGER_CREATE_NON_BASE_TASKS = 6001 [deprecated = true]; FEATURE_TASK_MANAGER_CREATE_MERGE_MANIFEST_TASK = 6002 [deprecated = true]; FEATURE_TASK_MANAGER_CREATE_GENERATE_RES_VALUES_TASK = 6003 [deprecated = true]; FEATURE_TASK_MANAGER_CREATE_CREATE_RENDERSCRIPT_TASK = 6004 [deprecated = true]; FEATURE_TASK_MANAGER_CREATE_MERGE_RESOURCES_TASK = 6005 [deprecated = true]; FEATURE_TASK_MANAGER_CREATE_MERGE_ASSETS_TASK = 6006 [deprecated = true]; FEATURE_TASK_MANAGER_CREATE_BUILD_CONFIG_TASK = 6007 [deprecated = true]; FEATURE_TASK_MANAGER_CREATE_PROCESS_RES_TASK = 6008 [deprecated = true]; FEATURE_TASK_MANAGER_CREATE_AIDL_TASK = 6009 [deprecated = true]; FEATURE_TASK_MANAGER_CREATE_SHADER_TASK = 6010 [deprecated = true]; FEATURE_TASK_MANAGER_CREATE_NDK_TASK = 6011 [deprecated = true]; FEATURE_TASK_MANAGER_CREATE_EXTERNAL_NATIVE_BUILD_TASK = 6012 [deprecated = true]; FEATURE_TASK_MANAGER_CREATE_MERGE_JNILIBS_FOLDERS_TASK = 6013 [deprecated = true]; FEATURE_TASK_MANAGER_CREATE_COMPILE_TASK = 6014 [deprecated = true]; FEATURE_TASK_MANAGER_CREATE_STRIP_NATIVE_LIBRARY_TASK = 6015 [deprecated = true]; FEATURE_TASK_MANAGER_CREATE_SPLIT_TASK = 6016 [deprecated = true]; FEATURE_TASK_MANAGER_CREATE_PACKAGING_TASK = 6017 [deprecated = true]; FEATURE_TASK_MANAGER_CREATE_LINT_TASK = 6018 [deprecated = true]; } } message GradleTaskExecution { // The task implementing class. // Custom tasks are recorded as UNKNOWN_TASK_TYPE. // This is an enum in android git: // tools/analytics-library/protos/src/main/proto/analytics_enums.proto optional int32 type = 1; // Whether the task did work (TaskState#getDidWork()) // This is not necessarily the inverse of up_to_date: see // https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/TaskState.html#getDidWork() optional bool did_work = 2; // Whether the task was skipped (TaskState#getSkipped()) optional bool skipped = 3; // Whether the task was up to date (TaskState#getUpToDate()) optional bool up_to_date = 4; // Whether the task failed optional bool failed = 5; } message GradleTransformExecution { // The transform implementing class. // Custom transforms are recorded as UNKNOWN_TRANSFORM_TYPE. // This is an enum in android git: // tools/analytics-library/protos/src/main/proto/analytics_enums.proto // Historical, was used before adding transform_class_name field optional int32 type = 1 [deprecated = true]; // Whether the transform could be (in the case of TASK_TRANSFORM_PREPARATION) // or was (in the case of TASK_TRANSFORM) incremental. optional bool is_incremental = 2; // Name of the class executing the transform. // Example: ShrinkResourcesTransform optional string transform_class_name = 3; } message InstantRunStatus { // The type of artifacts built in this invocation. // e.g. COLD for when the changes cannot be hot-swapped, either due to the // app not running on the users device or the changes cannot be hot swapped. optional BuildMode build_mode = 1; // The type of deploy that the build can generate artifacts for. optional PatchingPolicy patching_policy = 2; // The result of the verifier run, whether the users change can be hot-swapped // or requires a cold swap or full build is determined by the verifier. optional VerifierStatus verifier_status = 3; // The built artifacts stored in the build info. // Artifacts that were built, but superseeded (e.g. a main APK contains // resources, so the resources do not need to be reported separately) are // not included. repeated InstantRunArtifact artifact = 4; enum BuildMode { UNKNOWN_BUILD_MODE = 0; HOT_WARM = 1; COLD = 2; FULL = 3; } enum PatchingPolicy { UNKNOWN_PATCHING_POLICY = 0; // No Cold swap is possible PRE_LOLLIPOP = 1; // Cold swap done by shipping dex classes to the Instant Run runtime MULTI_DEX = 2; // Cold swap done by reinstalling APK splits. MULTI_APK = 3; // Cold swap done by reinstalling APK splits, resources in separate APK. MULTI_APK_SEPARATE_RESOURCES = 4; } enum VerifierStatus { UNKNOWN_VERIFIER_STATUS = 0; COMPATIBLE = 1; // the verifier did not run successfully. NOT_RUN = 2; // InstantRun disabled on element like a method, class or package. INSTANT_RUN_DISABLED = 3; // Any inability to run the verifier on a file will be tagged as such INSTANT_RUN_FAILURE = 4; // A new class was added. CLASS_ADDED = 5; // changes in the hierarchy PARENT_CLASS_CHANGED = 6; IMPLEMENTED_INTERFACES_CHANGE = 7; // class related changes. CLASS_ANNOTATION_CHANGE = 8; STATIC_INITIALIZER_CHANGE = 9; // changes in constructors, CONSTRUCTOR_SIGNATURE_CHANGE = 10; // changes in method METHOD_SIGNATURE_CHANGE = 11; METHOD_ANNOTATION_CHANGE = 12; METHOD_DELETED = 13; METHOD_ADDED = 14; // changes in fields. FIELD_ADDED = 15; FIELD_REMOVED = 16; // change of field type or kind (static | instance) FIELD_TYPE_CHANGE = 17; R_CLASS_CHANGE = 18; // reflection use REFLECTION_USED = 19; JAVA_RESOURCES_CHANGED = 20; DEPENDENCY_CHANGED = 21; MANIFEST_FILE_CHANGE = 22; // the binary manifest file changed, probably due to references to resources // which ID changed since last build. BINARY_MANIFEST_FILE_CHANGE = 23; COLD_SWAP_REQUESTED = 24; FULL_BUILD_REQUESTED = 25; INITIAL_BUILD = 26; NO_CHANGES = 27; CHANGE_IN_SERIALIZABLE_CLASS_WITHOUT_VERSION_UID = 28; BUILD_NOT_INCREMENTAL = 29; // abstract method became implemented | method with code became abstract. ABSTRACT_METHOD_CHANGE = 30; // a synthetic constructor was changed. SYNTHETIC_CONSTRUCTOR_CHANGE = 31; } } // all types of build can now register artifacts so we can find non InstantRun // related artifact types like full slits and aar. message InstantRunArtifact { optional Type type = 1; enum Type { // Main APK file for 19, and 21 platforms when using // PatchingPolicy.MULTI_DEX. MAIN = 1; // Main APK file when application is using PatchingPolicy.MULTI_DEX. SPLIT_MAIN = 2; // Reload dex file that can be used to patch application live. RELOAD_DEX = 3; // Restart.dex file that can be used for Dalvik to restart applications // with minimum set of changes delivered. RESTART_DEX = 4; // Shard dex file that can be used to replace originally installed // multi-dex shard. DEX = 5; // Pure split (code only) that can be installed individually on M+ devices. SPLIT = 6; // Resources: res.ap_ file RESOURCES = 7; // Full split, main apk file with reduced set of configs FULL_SPLIT = 8; // AAR file. AAR = 9; } } // Details about the LLDB Frontend process message LLDBFrontendDetails { // the value returned when the LLDB Frontend process exited. optional int32 exit_code = 1; } // Error details from the Firebase Assistant. message FirebaseErrorDetails { // The error message presented to the user upon Firebase errors. optional string error_message = 1; } // Contextual details for Firebase Assistant events. This message acts as a // generic container for all events rather than having different messages for // each event type. While some fields will be knowingly blank/irrelevant for // some event types, frequency of logging is expected to be low enough that // this does not represent request/storage bloat. message FirebaseContextDetails { // Public project id, used for attributing project growth to the plugin. optional string project_id = 1; // Secondary identifier for the project, also stored for more flexibility with // joining the data with other sets. optional string project_number = 2; // Whether the action was performed while the user was logged in. optional bool logged_in = 3; // Whether the action was performed on while the related Studio project's // modules were connected to a Firebase project. optional ConnectStatus connect_status = 4; // Tutorial resource event relates to. Restricted to non PII such as the id // of the tutorial that was opened. optional string performed_on = 5; // Time that an action took to be performed. A primary example is how long // a tutorial was open before navigating away. optional int64 duration = 6; enum ConnectStatus { // Unable to determine connection status. UNKNOWN_CONNECT_STATUS = 1; // No modules connected. NOT_CONNECTED = 2; // 1 to N-1 modules were connected in a project with N modules. PARTIALLY_CONNECTED = 3; // All modules connected. CONNECTED = 4; } } // Details on the GPU Debugger tracing run message GfxTracingDetails { // total time the trace took optional int64 total_time = 1; // class name of the UI command selected to affect the tracing. optional string command = 2; // Error message when tracing fails. optional string error_message = 3; // A path describing the kind of details from the trace. This is a mix // of class names (of our code) and random ids generated for the trace. // e.g. 'Capture(7c6e72eebe2e6d76751b0328971e7fb29ceed82b).Atoms[6307].' + // 'Resource.' + // 'Thumbnail.As' optional string trace_path = 4; // the image format of the gpu image being traced. e.g. 'image/png' optional string image_format = 5; // the width of the image being traced. optional int64 image_width = 6; // the height of the image being traced. optional int64 image_height = 7; } // Details of an invocation of the TestRecorder to generate tests. message TestRecorderDetails { // The number of events in the test generated by the test recorder. optional int64 event_count = 1; // The number of assertions in the test generated by the test recorder. optional int64 assertion_count = 2; } // Reports aggregated information about how users invoke available UI actions. message UIActionStats { // java class name (our code, not customer) of the UI Action reported on // e.g. 'com.android.build.instant_run.HotSwapBuildAction' optional string action_class_name = 1; // How often since the last report this action was invoked. optional int64 invocations = 2; // The way this action was invocated by the user. optional InvocationKind invocation_kind = 3; // true if this message is sent directly, false if sent // with aggregated data over time. optional bool direct = 4; // The parent window/menu/toolbar that contains this action. // this is a software identifier specified in code in our product and does // not contain user data. Examples: "MainMenu", "Editor", "NavBarToolbar". optional string ui_place = 5; // The way an UI action was invocated by the user. enum InvocationKind { UNKNOWN_INVOCATION_KIND = 0; TOOLBAR = 1; MENU = 2; KEYBOARD_SHORTCUT = 3; MACRO = 4; MOUSE = 5; } } // Holds a histogram of values. message Histogram { // Holds the total number of samples in the histogram optional int64 total_count = 1; // Holds the bins for this histogram, in ascending order repeated HistogramBin bin = 2; } // Represents a range of values and the number of samples that fell within that // range. The start and end attributes encode the range, and the samples // attribute holds the number of samples. For example, if start=10 end=20, // and samples=100, this means that 100 samples were recorded that fell within // the range of start <= sample < end. message HistogramBin { // Start value for this bin, inclusive. All the samples in this bin are equal // or greater than this value. optional int64 start = 1; // End value for this bin, exclusive. All the samples in this bin are strictly // less than this value. optional int64 end = 2; // Number of samples that fell within this bin (between the start and end // values) optional int64 samples = 3; // Total number of samples that are greater than or equal to the bin's start. // This is equal to the number of samples in this bin plus the number of // samples in all bins greater than this one. optional int64 total_samples = 4; } // Details about the machine this process is running on. message MachineDetails { // Amount of total memory available in megabytes. optional int64 total_ram = 1; // Amount of total disk available in megabytes. optional int64 total_disk = 2; // Information about the display screens on the machine (resolution etc..) repeated DisplayDetails display = 3; // Number of processors on the machine. optional int32 available_processors = 4; } // Details of a display screen. message DisplayDetails { // Width of the display screen in pixels. optional int64 width = 1; // Height of the display screen in pixels. optional int64 height = 2; // Densitiy of the pixels on the screen horiziontally. optional int32 dots_per_inch_horizontal = 3; // Densitiy of the pixels on the screen vertically. optional int32 dots_per_inch_vertical = 4; // System scale factor for the screen resolution. optional float system_scale = 5; } // Stats on the current running java process. message JavaProcessStats { // Number of bytes of memory in use as heap memory. optional int64 heap_memory_usage = 1; // Number of bytes of memory in use as non heap memory. optional int64 non_heap_memory_usage = 2; // Current amount of java classes loaded. optional int32 loaded_class_count = 3; // Current amount of threads. optional int32 thread_count = 4; // Statistics about the garbage collectors used in this process. repeated GarbageCollectionStats garbage_collection_stats = 5; } // Statistics about the garbage collector. message GarbageCollectionStats { // Name of the garbage collector (e.g. 'ConcurrentMarkSweep') optional string name = 1; // Number of garbage collector invocations since last report. optional int64 gc_collections = 2; // Time spent garbage collecting since last report in milliseconds. optional int64 gc_time = 3; } // Details about the JVM used in this process. message JvmDetails { // Name of the JVM (e.g. "OpenJDK 64-Bit Server by JetBrains s.r.o"). optional string name = 1; // Version of the JVM (e.g. "1.8.0_76-release-b198 amd") optional string version = 2; // Vendor of the JVM (e.g. "JetBrains s.r.o.") optional string vendor = 3; // VM Option specified to set minimum heap_size in bytes ("-Xms" flag). optional int64 minimum_heap_size = 4; // VM Option specified to set maximum heap_size in bytes ("-Xmx" flag). optional int64 maximum_heap_size = 5; // VM Option specified to set maximum permanent space size in bytes. // ("-XX:MaxPermSize" flag) optional int64 maximum_permanent_space_size = 6; // VM Option specified to set maximum permanent space size in bytes. // ("-XX:ReservedCodeCacheSize" flag) optional int64 maximum_code_cache_size = 7; // VM Option specified to set time soft referenced objects remain alive in ms. // ("-XX:SoftRefLRUPolicyMSPerMB" flag) optional int64 soft_reference_lru_policy = 8; // Type of Garbage Collector to use (various VM Option flags). optional GarbageCollector garbage_collector = 9; // Various garbage collectors that could be chosen through VM Options. enum GarbageCollector { UNSPECIFIED_GC = 0; CONCURRENT_MARK_SWEEP_GC = 1; GARBAGE_FIRST_GC = 2; PARALLEL_GC = 3; PARALLEL_OLD_GC = 4; SERIAL_GC = 5; } } // Details for an indexing operation. message IntellijIndexingStats { // Major operations on indexes. enum Operation { UNKNOWN_OPERATION = 0; MAP_INPUT = 1; WRITE_LOCK = 2; UPDATE_DATA = 3; GET_DATA = 4; } // Details for a specific indexing operation. message OperationStats { // Operation described by this message. optional Operation operation = 1; // Total CPU time. optional int64 total_cpu_nanos = 2; // Total wall time. optional int64 total_wall_nanos = 3; // Maximum observed CPU time. optional int32 max_cpu_nanos = 4; // Maximum observed wall time. optional int32 max_wall_nanos = 5; // Total number of operations aggregated in this record. optional int32 total_count = 6; } // IDE's major indexes. enum Index { UNKNOWN_INDEX = 0; ID_INDEX = 1; STUB_INDEX = 2; TRIGRAM_INDEX = 3; OTHER = 4; } // Details for indexing operations of a specific specific index. message IndexStats { // Index described by this message. optional Index index = 1; // Details for specific operations. repeated OperationStats operation_stats = 2; } // How long the indexing operation took in milliseconds. optional int32 duration_ms = 1; // Number of files indexed during this indexing operation. optional int32 file_count = 2; // Number of threads configured to run indexing tasks. optional int32 indexer_threads = 3; // Indexing operation details for specific indexes. repeated IndexStats index_stats = 4; } // Stats on Studio's performance message StudioPerformanceStats { // Time for which the UI was blocked in milliseconds optional int32 ui_freeze_time_ms = 1; // Distribution of times taken to process events in the main event loop, // in milliseconds. The number of samples is approximately equal to the // number of events handled, quantized by event_service_time_sample_period. // For example, if the 10-20ms bin contains 100 samples, it means that // approximately 100 events took between 10 and 20 milliseconds to process. optional Histogram event_service_time_ms = 2; // Sample period used to compute the event_service_time_ms histogram. For // example, if this is set to 10 then the service time was measured for // every 10th event, and each measurement counted for 10 samples in // the histogram. This is mainly intended for computing error bars // and is not needed for interpreting the histogram itself. optional int32 event_service_time_sample_period = 3; // Histogram of wait times for the global write lock optional Histogram write_lock_wait_time_ms = 4; // Information about GC pause time distributions, one for each collector that // is active. repeated GcPauseInfo gc_pause_info = 5; } // Information about GC pause times for a particular collector. message GcPauseInfo { enum GcType { UNKNOWN = 0; SERIAL_YOUNG = 1; SERIAL_OLD = 2; PARALLEL_YOUNG = 3; PARALLEL_OLD = 4; CMS_YOUNG = 5; CMS_OLD = 6; G1_YOUNG = 7; G1_OLD = 8; } // The type of the garbage collector optional GcType collector_type = 1; // Distribution of pause times for this collector optional Histogram pause_times_ms = 2; } // One bucket of a PercentileEstimator. message PercentileBucket { // The target percentile for this bucket. optional double target_percentile = 1; // Estimated value at this bucket. optional double value = 2; // Number of samples less than value. optional uint64 count = 3; } // Estimation of target percentiles of a stream of data. message PercentileEstimator { // Either raw_sample or bucket should be empty. // Raw samples when there were not enough samples to interpolate. repeated double raw_sample = 2; // 2n + 3 buckets representing an estimation for n target percentiles. repeated PercentileBucket bucket = 3; } message LldbPercentileEstimator { // Type of performance metric. optional Metric metric = 1; // Estimator for metric. optional PercentileEstimator estimator = 2; // Metric types that can be monitored. enum Metric { ATTACH_TIME_MICROS = 0; STEP_RESUME_RESPONSE_TIME_MICROS = 1; GET_VARIABLES_TIME_MICROS = 2; GET_VARIABLE_CHILDREN_RANGE_TIME_MICROS = 3; GET_FRAMES_TIME_MICROS = 4; ADD_SYMBOLIC_BREAKPOINT_TIME_MICROS = 5; ADD_BREAKPOINT_TIME_MICROS = 6; } } // Estimations of percentiles of time spent on LLDB operations. message LldbPerformanceStats { // Collection of estimations of performance metrics. repeated LldbPercentileEstimator estimator = 1; } // Details around user opening or closing projects. message StudioProjectChange { // amount of projects open in same Android Studio instance. optional int32 projects_open = 1; } // Layout editor state message LayoutEditorState { // Layout editor mode enum Mode { UNKOWN_MODE = 0; DESIGN_MODE = 1; PREVIEW_MODE = 2; } // Layout type enum Type { UNKNOWN_TYPE = 0; LAYOUT = 1; DRAWABLE = 2; MENU = 3; PREFERENCE_SCREEN = 4; COMPOSE = 5; CUSTOM_VIEWS = 6; } // Layout orientation enum Orientation { UNKNOWN_ORIENTATION = 0; PORTRAIT = 1; LANDSCAPE = 2; } // Design surfaces currently displayed enum Surfaces { UNKNOWN_SURFACES = 0; BOTH = 1; SCREEN_SURFACE = 2; BLUEPRINT_SURFACE = 3; } // Layout preview mode enum PreviewMode { UNKNOWN_PREVIEW_MODE = 0; STATIC_PREVIEW_MODE = 1; INTERACTIVE_PREVIEW_MODE = 2; } // layout editor preview or design mode optional Mode mode = 1; // layout type currently being displayed (layout, menu, drawable...) optional Type type = 2; // android api level e.g. '23' or 'N' optional string config_api_level = 3; // current layout zoom level optional int32 config_zoom_level = 4; // current layout orientation optional Orientation config_orientation = 5; // surfaces being displyaed optional Surfaces surfaces = 6; // Indicates how user previews the layout, whether it is a static (classic) // preview or an interactive (animated) mode optional PreviewMode preview_mode = 7; } // Layout editor render result (when type = RENDER) message LayoutEditorRenderResult { enum Trigger { UNKNOWN_TRIGGER = 0; // Manual refresh triggered by the user USER = 1; // User layout edit EDIT = 2; // External resource change RESOURCE_CHANGE = 3; // Build BUILD = 4; } // Action that triggered the render optional Trigger trigger = 1; // Render result code optional int32 result_code = 2; // Full render time in ms optional int64 total_render_time_ms = 4; // Number of components rendered optional int32 component_count = 5; // Total number of issues (warnings + errors) in the error panel optional int32 total_issue_count = 6; // Errors displayed in the error panel optional int32 error_count = 7; // Fidelity warnings optional int32 fidelity_warning_count = 8; // The id of rendered device, such as "pixel", "pixel_3", "pixel_3_xl", // "wearos_square", "tv_4k". // Device ids are built-in in the sdk and studio. There is no enum or list of // them. For all custom android virtual devices (AVDs), they should be // recorded as "_custom_avd". optional string device_id = 9; } // Details related to an ATF fix suggestion. message AtfFixDetail { // Type of an ATF fix suggestion enum AtfFixType { UNKNOWN = 0; SET_VIEW_ATTRIBUTE = 1; REMOVE_VIEW_ATTRIBUTE = 2; COMPOUND = 3; } // The type of the applied ATF fix optional AtfFixType fix_type = 3; } // Record of Accessibility Testing Framework(ATF) audit results. message AtfAuditResult { enum Trigger { UNKNOWN_TRIGGER = 0; // Through the entry button USER = 1; // Through opening the issue panel ISSUE_PANEL = 2; // Through experimental flag EXPERIMENTAL_FLAG = 3; } // Each count for Accessibility Testing Framework result. message AtfResultCount { // Type of lint issue created by the accessibility testing framework. enum CheckResultType { UNKNOWN = 0; ERROR = 1; WARNING = 2; INFO = 3; NOT_RUN = 4; SUPPRESSED = 5; } // Accessibility Testing Framework result's source check name, to uniquely // identify the lint issue created by it. optional string check_name = 1; // Its result type optional CheckResultType result_type = 2; // Error expanded for more information by user optional bool error_expanded = 3; // ATF fix suggestions which are provided for this ATF check result repeated AtfFixDetail fixes = 4; } // What triggered Accessibility testing framework optional Trigger trigger = 1; // result count. repeated AtfResultCount counts = 2; // Render result. True if render was successful. False otherwise. optional bool render_result = 3; // Number of components rendered optional int32 component_count = 4; // Time it took for audit to run in milliseconds, per render. optional int64 audit_duration_ms = 5; // Full render time in ms optional int64 total_render_time_ms = 6; // Errors displayed in the error panel, including non ATF errors. optional int32 error_count = 7; } // Details related to an ATF check result message AtfResultDetail { // Simple name of the ATF check which produced the check result optional string check_name = 1; // The result type of the ATF check result optional AtfAuditResult.AtfResultCount.CheckResultType result_type = 2; } // Details related to an ATF fix which been applied by the user message ApplyAtfFixEvent { // Details related to the ATF result which has been fixed optional AtfResultDetail atf_result = 1; // Details related to the ATF fix which has been applied optional AtfFixDetail atf_fix = 2; } // Details related to an ATF result which has been marked as ignored by the user message IgnoreAtfResultEvent { // Details related to the ATF result which has been ignored optional AtfResultDetail atf_result = 1; } // Details related to undoing an applied ATF fix by the user message UndoAppliedAtfFixEvent { // Details related to the ATF result which produced the undone fix suggestion optional AtfResultDetail atf_result = 1; // Details related to the ATF fix that was undone optional AtfFixDetail atf_fix = 2; } // A user interaction with the layout editor animation previewer message AnimationPreviewEvent { // The type of animation bar. Each offers different UI and/or control panels // to interact with user. enum ToolbarType { UNKNOWN_TOOLBAR_TYPE = 0; // This toolbar type is provided for endless animation. // For example, if the animation repeats itself, then it is considered as // endless. UNLIMITED_ANIMATION = 1; // This toolbar type is provided for endable animation. // It provides a slider bar to control the current animation progress. LIMITED_ANIMATION = 2; // This toolbar type is provided for animated selector. // It provides a dropdown button for switching the previewing animation // inside this animated selector. ANIMATED_SELECTOR = 3; } // The type of tool bar which provided for the previewed animation. optional ToolbarType toolbar_type = 1; // The operation which user executed. enum UserAction { UNKNOWN_CONTROL = 0; PLAY = 1; PAUSE = 2; STOP = 3; FRAME_FORWARD = 4; FRAME_BACKWARD = 5; // Control the frame by draggig the progress bar. FRAME_CONTROL = 6; // Select the preview animation when previewing animated selector. SELECT_ANIMATION = 7; } // The operation from user to control the animation preview, such like play, // pause, or stop. optional UserAction user_action = 2; } // Details of an event linked to visual linting message VisualLintEvent { // Type of issues creating by visual linting enum IssueType { UNKNOWN_TYPE = 0; BOUNDS = 1; BOTTOM_NAV = 2; BOTTOM_APP_BAR = 3; OVERLAP = 4; LONG_TEXT = 5; ATF = 6; LOCALE_TEXT = 7; TEXT_FIELD_SIZE = 8; BUTTON_SIZE = 9; WEAR_MARGIN = 10; } // Type of events affecting visual lint issues enum IssueEvent { UNKNOWN_EVENT = 0; CREATE_ISSUE = 1; EXPAND_ISSUE = 2; IGNORE_ISSUE = 3; ENABLE_RULE = 4; DISABLE_RULE = 5; ENABLE_BACKGROUND_RULE = 6; DISABLE_BACKGROUND_RULE = 7; CLICK_DOCUMENTATION_LINK = 8; CANCEL_BACKGROUND_ANALYSIS = 9; } // The type of the visual lint issue affected by this event optional IssueType issue_type = 1; // The kind of event affecting the issue optional IssueEvent issue_event = 2; } // Reference to a View used in an Android application. // Although this proto contains just a single field, we may decide // to represent a view with an enum in the future. message AndroidView { // Specifies the tag name used in XML for a given Android View class. // This will typically be a fully qualified class name or an unqualified // Android framework class name. // Only Google view tags will be specified by name. The name of custom view // tags will be left unspecified. // Examples: // "ToggleButton" // "android.support.design.widget.CoordinatorLayout" optional string tag_name = 1; } // Reference to an attribute of an Android view. message AndroidAttribute { // Namespace of the attribute changed enum AttributeNamespace { UNKNOWN_NAMESPACE = 0; // This attribute is defined in the Google framework. ANDROID = 1; // This attribute is defined in the application. // The attribute is either a custom attribute or an attribute on a View from // a Google library. APPLICATION = 2; // This attribute is used in the design preview only. It does not affect // the Android application at runtime. TOOLS = 3; } // Specifies an attribute name of an Android View class or Navigation element. // Only properties defined on Google View classes or Google-provided // Navigation destinations will be specified by name. // Properties defined on custom views or destinations, or custom properties on // Google-provided destinations will be left unspecified. optional string attribute_name = 1; // The namespace of this attribute optional AttributeNamespace attribute_namespace = 2; } // Identifies the effect the search field had on the possible choices presented // to the user. enum SearchOption { UNKNOWN_SEARCH_OPTION = 0; // The search field was empty NONE = 1; // The search field was not empty and it does not specify a unique match MULTIPLE_MATCHES = 2; // The search field identified a unique match SINGLE_MATCH = 3; } // Event for the picker panel that can be invoked from the editor gutter. The // picker is a panel to assist in modifying an element in the source file. For // example, the Preview picker surfaces the Compose @Preview annotation fields // and provides context-correct values for the fields that require it. message EditorPickerEvent { // The type of picker panel enum PickerType { UNKNOWN_PICKER_TYPE = 0; // Picker for Compose @Preview annotation PREVIEW = 1; } // Contains data for actions that can be performed in an editor picker. message EditorPickerAction { // Describes a modification performed through a Preview picker, defined by // the parameter that was modified and the value assigned to it. Since a // modification can contain virtually any value, the values tracked are a // subset of predefined values available through the picker, all other // open-ended values are generalized as Text or Number. message PreviewPickerModification { // The parameters available through the picker panel. It does not // necessarily match the values in the Preview annotation since the ui // might surface them as several parameters, such as the Device field. enum PreviewPickerParameter { UNKNOWN_PREVIEW_PICKER_PARAMETER = 0; // Name of the Preview Composable, visible in the Preview panel NAME = 1; // User-defined group, to manage different Previews within a file GROUP = 2; // The api-level used for the renderer in the Preview panel API_LEVEL = 3; // A custom width applied to the Composable for the Preview rendering WIDTH = 4; // A custom height applied to the Composable for the Preview rendering HEIGHT = 5; // The locale used by the Preview renderer LOCALE = 6; // Amount (in percentage) to modify the font size on the Preview FONT_SCALE = 7; // Show the rendered Composable within the context of a mocked device ui SHOW_SYSTEM_UI = 8; // Show a solid background under the rendered Composable SHOW_BACKGROUND = 9; // Defines the color of the background when show_background is true BACKGROUND_COLOR = 10; // The uiMode value applied to the application context for Preview // rendering UI_MODE = 11; // String that defines a device by id, display name, or screen specs DEVICE = 12; // Width when defining a device by its screen specs DEVICE_WIDTH = 13; // Height when defining a device by its screen specs DEVICE_HEIGHT = 14; // Unit of width/height when defining a device by its screen specs DEVICE_DIM_UNIT = 15; // Dpi when defining a device by its screen specs DEVICE_DPI = 16; // Orientation of Device in the Preview panel DEVICE_ORIENTATION = 17; } // Typical device targets for Android applications enum DeviceType { UNKNOWN_DEVICE_TYPE = 0; PHONE = 1; TABLET = 2; DESKTOP = 3; WEAR = 4; TV = 5; GENERIC = 6; CUSTOM = 7; } // Value definition for a modification action, meant to represent relevant // predefined values available in the picker, usually within a dropdown // menu, any other values should fallback to UnsupportedOrOpenEnded enum PreviewPickerValue { UNKNOWN_PREVIEW_PICKER_VALUE = 0; // Fallback for open-ended values or other not listed predefined values UNSUPPORTED_OR_OPEN_ENDED = 1; // Parameter's value was deleted/cleared CLEARED = 2; // A selected device that do not match any of the offered reference // devices, typically either a custom device or an AvdManager device DEVICE_REF_NONE = 3; // Phone option in the 'Reference Devices' submenu of the Device // dropdown DEVICE_REF_PHONE = 4; // Foldable option in the 'Reference Devices' submenu of the Device // dropdown DEVICE_REF_FOLDABLE = 5; // Tablet option in the 'Reference Devices' submenu of the Device // dropdown DEVICE_REF_TABLET = 6; // Desktop option in the 'Reference Devices' submenu of the Device // dropdown DEVICE_REF_DESKTOP = 7; // Use 'px' as unit for the given device width/heigh UNIT_PIXELS = 8; // Use 'dp' as unit for the given device width/heigh UNIT_DP = 9; // Show device in portrait orientation in the Preview ORIENTATION_PORTRAIT = 10; // Show device in landscape orientation in the Preview ORIENTATION_LANDSCAPE = 11; // Set device screen dpi to 'ldpi' DENSITY_LOW = 12; // Set device screen dpi to 'mdpi' DENSITY_MEDIUM = 13; // Set device screen dpi to 'hdpi' DENSITY_HIGH = 14; // Set device screen dpi to 'xhdpi' DENSITY_X_HIGH = 15; // Set device screen dpi to 'xxhdpi' DENSITY_XX_HIGH = 16; // Set device screen dpi to 'xxxhdpi' DENSITY_XXX_HIGH = 17; // The assigned UiMode value does not set the 'Night' flag UI_MODE_NOT_NIGHT = 18; // The assigned UiMode value explicitly sets the 'Night' flag UI_MODE_NIGHT = 19; } // Parameter modified optional PreviewPickerParameter parameter = 1; // The device type that closest resembles the device used in the preview optional DeviceType closest_device_type = 2; // The assigned value, as described by PreviewPickerValue optional PreviewPickerValue assigned_value = 3; } oneof action_info { // Available when a @Preview field was modified through the Preview // picker. Describes the modification performed, such as the parameter // modified and the value assigned to it. PreviewPickerModification preview_modification = 1; } } // Defines the type of picker invoked, this should be defined based on the // kind of text element intended to be modified. E.g.: The picker that // modifies the Compose @Preview annotation is the 'Preview' picker. optional PickerType type = 1; // Contains any additional data related to the action performed for the type // of picker in use. repeated EditorPickerAction action = 2; } // Details for the event of dropping a View from Palette: message LayoutPaletteEvent { // Display option when using the palette enum ViewType { UNKNOWN_VIEW_TYPE = 0; ICON_AND_NAME = 1; LARGE_IONS = 2; SMALL_ICONS = 3; } // The active view group when using the palette enum ViewGroup { UNKNOWN_GROUP = 0; CUSTOM = 1; ALL_GROUPS = 2; WIDGETS = 3; TEXT = 4; LAYOUTS = 5; CONTAINERS = 6; IMAGES = 7; DATES = 8; TRANSITIONS = 9; ADVANCED = 10; GOOGLE = 11; DESIGN = 12; APP_COMPAT = 13; BUTTONS = 14; LEGACY = 15; COMMON = 16; ALL_RESULTS = 17; HELPERS = 18; } // The view parameter options used for the dropped component enum ViewOption { NORMAL = 0; CUSTOM_OPTION = 1; HORIZONTAL_PROGRESS_BAR = 2; DISCRETE_SEEK_BAR = 3; PLAIN_EDIT_TEXT = 4; PASSWORD = 5; PASSWORD_NUMERIC = 6; EMAIL = 7; PHONE = 8; POSTAL_ADDRESS = 9; MULTILINE_TEXT = 10; TIME_EDITOR = 11; DATE_EDITOR = 12; NUMBER = 13; SIGNED_NUMBER = 14; DECIMAL_NUMBER = 15; HORIZONTAL_LINEAR_LAYOUT = 16; VERTICAL_LINEAR_LAYOUT = 17; } // The View that was dropped onto the design surface from the palette. optional AndroidView view = 1; // The view option used. optional ViewOption view_option = 2; // The group selected to find the view optional ViewGroup selected_group = 3; // The result of the usage of the search field optional SearchOption search_option = 4; // The display option used when this view was dropped from the palette optional ViewType view_type = 5; } // Details for an attribute change event message LayoutAttributeChangeEvent { // Display option used in property panel enum ViewType { UNKNOWN_VIEW_TYPE = 0; INSPECTOR = 1; PROPERTY_TABLE = 2; } // The attribute changed by this event optional AndroidAttribute attribute = 1; // The search option used when the attribute was changed optional SearchOption search_option = 2; // The display option used when the attribute was changed optional ViewType view_type = 3; // The views where this attribute was changed for. repeated AndroidView view = 4; } message LayoutFavoriteAttributeChangeEvent { // This attribute was added as a favorite attribute optional AndroidAttribute added = 1; // This attribute was removed as a favorite attribute optional AndroidAttribute removed = 2; // These are the resulting active favorite attibutes repeated AndroidAttribute active = 3; } // Details for layout editor events message LayoutEditorEvent { enum LayoutEditorEventType { UNKNOWN_EVENT_TYPE = 0; RENDER = 1; ZOOM_IN = 2; ZOOM_OUT = 3; ZOOM_FIT = 4; ZOOM_ACTUAL = 5; SHOW_PAN_AND_ZOOM = 6; SHOW_LINT_MESSAGES = 7; LINT_TOOLTIP = 8; RESTORE_ERROR_PANEL = 9; MINIMIZE_ERROR_PANEL = 10; SHOW_DESIGN_SURFACE = 11; SHOW_BLUEPRINT_SURFACE = 12; SHOW_BOTH_SURFACE = 13; SWITCH_ORIENTATION = 14; DEVICE_CHANGE = 15; API_LEVEL_CHANGE = 16; THEME_CHANGE = 17; LANGUAGE_CHANGE = 18; SHOW_CONSTRAINTS = 19; HIDE_CONSTRAINTS = 20; TURN_ON_AUTOCONNECT = 21; TURN_OFF_AUTOCONNECT = 22; CLEAR_ALL_CONSTRAINTS = 23; INFER_CONSTRAINS = 24; DEFAULT_MARGINS = 25; PACK = 26; ALIGN = 27; ADD_VERTICAL_GUIDELINE = 28; ADD_HORIZONTAL_GUIDELINE = 29; SHOW_PALETTE = 30; HIDE_PALETTE = 31; DROP_VIEW_FROM_PALETTE = 32; ATTRIBUTE_CHANGE = 33; FAVORITE_CHANGE = 34; SELECT_TEXT_MODE = 35; SELECT_SPLIT_MODE = 36; SELECT_VISUAL_MODE = 37; OPEN_MOTION_LAYOUT_EDITOR_MODE = 38; SHOW_LAYOUT_VISUALIZATION_TOOL = 39; HIDE_LAYOUT_VISUALIZATION_TOOL = 40; ADD_CONSTRAINT = 41; DELETE_CONSTRAINT = 42; INFLATE_ONLY = 43; RENDER_ONLY = 44; ENABLE_LAYOUTLIB_NATIVE = 45; DISABLE_LAYOUTLIB_NATIVE = 46; ATF_AUDIT_RESULT = 47; APPLY_ATF_FIX = 48; IGNORE_ATF_RESULT = 49; UNDO_APPLIED_ATF_FIX = 50; ANIMATION_PREVIEW = 51; VISUAL_LINT = 52; } // Type of event optional LayoutEditorEventType type = 1; // Layout editor current state optional LayoutEditorState state = 2; // Result of the render when (type = RENDER) optional LayoutEditorRenderResult render_result = 3; // Details related to using the palette (type = DROP_VIEW_FROM_PALETTE) optional LayoutPaletteEvent palette_event = 4; // Details related to changing an attribute (type = ATTRIBUTE_CHANGE) optional LayoutAttributeChangeEvent attribute_change_event = 5; // Details related to favorite attribute changes (type = FAVORITE_CHANGE) optional LayoutFavoriteAttributeChangeEvent favorite_change_event = 6; // Result of the atf audit (type = ATF_AUDIT_RESULT) optional AtfAuditResult atf_audit_result = 7; // Details related to applying an atf fix (type = APPLY_ATF_FIX) optional ApplyAtfFixEvent apply_atf_fix_event = 8; // Details related to ignoring an atf result (type = IGNORE_ATF_FIX) optional IgnoreAtfResultEvent ignore_atf_result_event = 9; // Details related to undoing an applied atf fix (type = UNDO_APPLIED_ATF_FIX) optional UndoAppliedAtfFixEvent undo_applied_atf_fix_event = 10; // Details related to interacting animation preview (type = ANIMATION_PREVIEW) optional AnimationPreviewEvent animation_preview_event = 11; // Details related to visual linting (type = VISUAL_LINT) optional VisualLintEvent visual_lint_event = 12; } // Details for navigation editor events message NavEditorEvent { enum NavEditorEventType { UNKNOWN_EVENT_TYPE = 0; OPEN_FILE = 1; // Deprecated by LayoutEditorEventType.SELECT_VISUAL_MODE SELECT_DESIGN_TAB = 2 [deprecated = true]; // Deprecated by LayoutEditorEventType.SELECT_TEXT_MODE SELECT_XML_TAB = 3 [deprecated = true]; CREATE_ACTION = 4; EDIT_ACTION = 5; CREATE_ARGUMENT = 6; EDIT_ARGUMENT = 36; CREATE_DEEP_LINK = 7; EDIT_DEEP_LINK = 37; CHANGE_PROPERTY = 8; ADD_DESTINATION = 9; CREATE_FRAGMENT = 10; ADD_INCLUDE = 11; CREATE_NESTED_GRAPH = 12; MOVE_TO_GRAPH = 38; ACTIVATE_LAYOUT = 13; ACTIVATE_CLASS = 14; ACTIVATE_NESTED = 15; ACTIVATE_INCLUDE = 16; EXIT_NESTED_GRAPH = 17; SET_START_DESTINATION = 18; AUTO_ARRANGE = 19; POSITION_DESTINATION = 20; RESTORE_ERROR_PANEL = 21; MINIMIZE_ERROR_PANEL = 22; DELETE_DESTINATION = 23; DELETE_INCLUDE = 24; DELETE_NESTED = 25; DELETE_ACTION = 26; DELETE_DEEPLINK = 27; DELETE_ARGUMENT = 28; SCHEMA_CREATED = 29; // Deprecated by LayoutEditorEventType.ZOOM_IN ZOOM_IN = 30 [deprecated = true]; // Deprecated by LayoutEditorEventType.ZOOM_OUT ZOOM_OUT = 31 [deprecated = true]; // Deprecated by LayoutEditorEventType.ZOOM_FIT ZOOM_FIT = 32 [deprecated = true]; CUT = 33; COPY = 34; PASTE = 35; // next index: 39 } // Identifies the mode of the navigation editor enum NavEditorMode { UNKNOWN_MODE = 0; // Single view displaying only the navigation editor itself VISUAL_ONLY_MODE = 1; // Split view with text and design editor side-by-side SPLIT_MODE = 2; // Single view displaying only the text editor TEXT_ONLY_MODE = 3; } enum Source { UNKNOWN = 0; TOOLBAR = 1; DESIGN_SURFACE = 2; PROPERTY_INSPECTOR = 3; SHORTCUT = 4; CONTEXT_MENU = 5; } // Type of event optional NavEditorEventType type = 1; // Where the event was triggered optional Source source = 2; // If the event is property-related, information about the affected property optional NavPropertyInfo property_info = 3; // If the event is action-related, information about the relevant action optional NavActionInfo action_info = 4; // If the event is destination-related, information about the relevant // destination optional NavDestinationInfo destination_info = 5; // Information about the current NavigationSchema optional NavSchemaInfo schema_info = 6; // Information on the current contents of the navigation file optional NavigationContents contents = 7; // Mode of navigation editor: design-only, text-only, or split view optional NavEditorMode mode = 8; } message NavPropertyInfo { enum Property { UNKNOWN = 0; CUSTOM = 1; ACTION = 2; ARG_TYPE = 3; AUTO_VERIFY = 4; UNUSED_1 = 5; DATA = 6; DATA_PATTERN = 7; DEFAULT_NAV_HOST = 8; DEFAULT_VALUE = 9; DESTINATION = 10; ENTER_ANIM = 11; EXIT_ANIM = 12; GRAPH = 13; ID = 14; LABEL = 15; UNUSED_2 = 16; LAUNCH_SINGLE_TOP = 17; NAME = 18; NAV_GRAPH = 19; NULLABLE = 20; POP_ENTER_ANIM = 21; POP_EXIT_ANIM = 22; POP_UP_TO = 23; POP_UP_TO_INCLUSIVE = 24; START_DESTINATION = 25; URI = 26; MIME_TYPE = 27; } enum TagType { UNKNOWN_TAG = 0; CUSTOM_TAG = 1; ACTION_TAG = 2; DEEPLINK_TAG = 3; FRAGMENT_TAG = 4; ACTIVITY_TAG = 5; NAVIGATION_TAG = 6; INCLUDE_TAG = 7; ARGUMENT_TAG = 8; } // The property affected. optional Property property = 1; // Type of the containing tag. optional TagType containing_tag = 2; // Whether the property was empty prior to being set just now. optional bool was_empty = 3; } message NavActionInfo { enum ActionType { UNKNOWN = 0; REGULAR = 1; EXIT = 2; GLOBAL = 3; SELF = 4; } // Type of the action affected optional ActionType type = 1; // Whether the action has popTo set optional bool has_pop = 2; // Whether the action has popToInclusive set optional bool inclusive = 3; // The number of actions originating from the same destination as this one optional uint32 count_from_source = 4; // The number of actions targeting the same destination as this one optional uint32 count_to_destination = 5; // The number of actions with the same source and destination as this one optional uint32 count_same = 6; } message NavDestinationInfo { enum DestinationType { UNKNOWN = 0; FRAGMENT = 1; ACTIVITY = 2; OTHER = 3; } // The type of the destination optional DestinationType type = 1; // Whether the destination has a class (android:name) specified optional bool has_class = 2; // Whether the destination has a layout (tools:layout) specified optional bool has_layout = 3; } message NavSchemaInfo { // The number of custom navigators in the current schema optional uint32 custom_navigators = 1; // The number of custom tags in the current schema optional uint32 custom_tags = 2; // The number of custom destination classes in the current schema optional uint32 custom_destinations = 3; // The number of custom attributes in the current schema optional uint32 custom_attributes = 4; } message NavigationContents { // The number of fragments in the current file optional uint32 fragments = 1; // The number of activities in the current file optional uint32 activities = 2; // The number of custom destinations in the current file optional uint32 custom_destinations = 3; // The number of regular actions in the current file optional uint32 regular_actions = 4; // The number of exit actions in the current file optional uint32 exit_actions = 5; // The number of global actions in the current file optional uint32 global_actions = 6; // The number of self actions in the current file optional uint32 self_actions = 10; // The number of includes in the current file optional uint32 includes = 7; // The number of nested graphs in the current file optional uint32 nested_graphs = 8; // The number of placeholders (destinations with android:name not set) in the // current file optional uint32 placeholders = 9; } message NavSafeArgsEvent { optional EventContext event_context = 1; optional ProjectMetadata project_metadata = 2; enum EventContext { UNKNOWN_EVENT_CONTEXT = 0; SYNC_EVENT_CONTEXT = 1; BUILD_EVENT_CONTEXT = 2; } message ProjectMetadata { // # of modules in this project optional uint32 module_count = 1; // # of modules with the java safe args plugin enabled optional uint32 java_plugin_count = 2; // # of modules with the kotlin safe args plugin enabled optional uint32 kotlin_plugin_count = 3; } } // App links assistant user event detail. message AppLinksAssistantEvent { // Client-side salted (rotating every 28 days), sha256 of the project id for // counting projects using the assistant. optional string project_id = 1; // The app_id is the id for the user's android app // which's salted on client-side (rotating every 28 days) then sha256 // so it is anonymized and is unique per user, but has a 1-N relation. // It's for counting apps using the assistant. optional string app_id = 2; // The UI element source of event. optional EventSource event_source = 3; // The state of the event. optional EventState event_state = 4; // To check if there exists app links in the project // before using app links assistant. optional bool existing_app_links = 5; // Duration time that app links assistant panel opens. Unit is nanoseconds. optional int64 assistant_panel_open_duration = 6; // Following three fields is for the new added app link. // Set when event_source = URL_MAPPING_APP_LINK_ADD_DIALOG // && event_state = COMPLETED // Path type of new app link. optional PathType app_link_path_type = 7; // Whether a new activity is linked by app link. optional bool new_activity_linked = 8; // Whether a new host is linked by app link. optional bool new_host_linked = 9; // the project id as used in the playstore, e.g. // 'com.google.android.apps.maps'. This is sensitive information and // thus restricted to "raw" sawmill access. This data is only available in // and for PWG approved scenarios. optional string raw_project_id = 10; // UI event source. enum EventSource { ASSISTANT_SIDE_PANEL = 1; // UI elements of URL mapping panel. URL_MAPPING_PANEL = 2; URL_MAPPING_APP_LINK_ADD_DIALOG = 3; URL_MAPPING_APP_LINK_ADD_ADVANCED_DIALOG = 4; URL_MAPPING_APP_LINK_EDIT_DIALOG = 5; URL_MAPPING_APP_LINK_DELETE_BUTTON = 6; URL_MAPPING_CHECK_MAPPING_BUTTON = 7; URL_MAPPING_OPEN_ANDROID_MANIFEST_BUTTON = 8; URL_MAPPING_ADD_TEST_URL_BUTTON = 21; // UI elements of code insert dialog. CODE_INSERT_DIALOG = 9; CODE_INSERT_DIALOG_INSERT_BUTTON = 10; CODE_INSERT_DIALOG_LIST_SELECTION = 11; // UI elements of DAL generation panel. DAL_PANEL = 12; DAL_PANEL_BROWSE_KEYSTORE_BUTTON = 13; DAL_PANEL_GENERATE_BUTTON = 14; DAL_PANEL_SAVE_BUTTON = 15; DAL_PANEL_VERIFY_BUTTON = 16; DAL_PANEL_SMART_LOCK_CHECKBOX = 200; DAL_PANEL_SIGN_IN_URL_SAME_AS_DOMAIN_CHECKBOX = 201; // UI elements of app links test panel. APP_LINKS_TEST_PANEL = 17; APP_LINKS_TEST_PANEL_MODULE_SELECTION = 18; APP_LINKS_TEST_PANEL_RUN_TEST_BUTTON = 19; } // The state list of UI event source. enum EventState { // Generic state for panel opened, button clicked or list selection. OPENED = 1; // Generic state for button action completed. COMPLETED = 2; // Generic state for button action failed. FAILED = 3; // State to label user exiting from the panel or dialog by clicking the // system close button, hide button or cancel button. EXIT = 4; } // Url path type of a new added app link. enum PathType { // Corresponds to attribute android:path of tag in Android Manifest // File. PATH = 1; // Corresponds to attribute android:pathPrefix of tag in // Android Manifest File PATH_PREFIX = 2; // Corresponds to attribute android:pathPattern of tag in // Android Manifest File PATH_PATTERN = 3; } } // ADB Assistant event details message AdbAssistantStats { // Why the assistant was started optional Trigger trigger = 1; // State list of trigger enum Trigger { // No running devices as target NO_RUNNING_DEVICE = 1; // Don't see your device link on the bottom right of dialog DONT_SEE_DEVICE = 2; } } message CpuProfilingConfig { // The type of the tool which provides profiling results. optional Type type = 1; // The profiling mode, each of which has different pros / cons. optional Mode mode = 2; // The maximum size of the trace recording, in MB. optional uint32 size_limit = 3; // The sampling interval in μs, only used when |mode| is |SAMPLED| optional uint32 sample_interval = 4; enum Type { UNKNOWN_TYPE = 0; // Use general profiling features provided by the runtime ART = 1; // Use simpleperf for advanced Android profiling, works on Android O+ SIMPLE_PERF = 2; // Use atrace for advanced Android profiling, works on Android N+ ATRACE = 3; // Use Perfetto for advanced Android profiling, works on Android P+ PERFETTO = 4; } enum Mode { UNKNOWN_MODE = 0; // Periodically poll CPU; less accurate but more performant SAMPLED = 1; // Add timing hooks; more accurate but leaf calls are more expensive INSTRUMENTED = 2; } } // Data associated with startup CPU profiling message CpuStartupProfilingMetadata { optional CpuProfilingConfig profiling_config = 1; } // Data associated with API-initiated tracing message CpuApiTracingMetadata { // True if using sampling; false if using instrumentation. optional bool use_sampling = 1; // A trace path is given and not null (we don't log the path as it might // contain PII). optional bool arg_trace_path = 2; // Buffer size as a given API argument (-1 if unavailable). optional int32 arg_buffer_size = 3; // Flags as a given API argument (-1 if unavailable). optional int32 arg_flags = 4; // Sampling interval as a given API argument (-1 if unavailable). optional int32 arg_interval_us = 5; } // Data associated with capturing a CPU method trace message CpuCaptureMetadata { enum CaptureStatus { UNKNOWN_STATUS = 0; // The capture was successful SUCCESS = 1; // The device responded to our request for a capture with an error // Deprecated by STOP_FAILED_* enum constants. STOP_CAPTURING_FAILURE = 2 [deprecated = true]; // Deprecated by PARSING_FAILED_* enum constants. PARSING_FAILURE = 3 [deprecated = true]; // User aborted parsing the trace after being notified it was too large USER_ABORTED_PARSING = 4; // Deprecated by PREPROCESS_FAILED_* enum constants. PREPROCESS_FAILURE = 5 [deprecated = true]; // There was no ongoing capture to stop. STOP_FAILED_NO_GOING_PROFILING = 6; // The profiled app process died. STOP_FAILED_APP_PROCESS_DIED = 7; // The PID of the profiled app process changed (it's another process). STOP_FAILED_APP_PID_CHANGED = 8; // The profiler process (e.g., simpleperf process) died. STOP_FAILED_PROFILER_PROCESS_DIED = 9; // The shell/DDMS command to stop capture didn't return successfully. STOP_FAILED_STOP_COMMAND_FAILED = 10; // The capture didn't stop after the stop command. STOP_FAILED_STILL_PROFILING_AFTER_STOP = 11; // The wait for the trace file to complete couldn't be initiated. STOP_FAILED_CANNOT_START_WAITING = 12; // The wait for the trace file to complete timed out. STOP_FAILED_WAIT_TIMEOUT = 13; // The wait for the trace file to complete had unspecified failure. STOP_FAILED_WAIT_FAILED = 14; // Couldn't read events while waiting for the trace file to complete. STOP_FAILED_CANNOT_READ_WAIT_EVENT = 15; // Couldn't copy/move the trace file within the device. STOP_FAILED_CANNOT_COPY_FILE = 16; // Couldn't form the trace file into the format expected by Studio. STOP_FAILED_CANNOT_FORM_FILE = 17; // Couldn't read the content of the trace file. STOP_FAILED_CANNOT_READ_FILE = 18; // The trace file doesn't exist or is a directory. PARSING_FAILED_PATH_INVALID = 19; // The trace file cannot be read. PARSING_FAILED_READ_ERROR = 20; // Couldn't identify correct parser for the trace file. PARSING_FAILED_PARSER_UNKNOWN = 21; // The trace file failed file header verification. PARSING_FAILED_FILE_HEADER_ERROR = 22; // The trace file cannot be parsed by the identified parser, e.g. ART parser // for Java method traces. PARSING_FAILED_PARSER_ERROR = 23; // The trace file failed to be parsed due to unknown reasons. PARSING_FAILED_CAUSE_UNKNOWN = 24; // Couldn't preprocess the simpleperf trace: empty file. PREPROCESS_FAILED_SIMPLEPERF_EMPTY_FILE = 25; // Couldn't preprocess the simpelperf trace: the report-sample command // reported errors at exit. PREPROCESS_FAILED_SIMPLEPERF_ERRORS_AT_EXIT = 26; // Couldn't preprocess the simpelperf trace: I/O error while executing // the report-sample command. PREPROCESS_FAILED_SIMPLEPERF_IO_ERROR = 27; // Couldn't preprocess the simpelperf trace: InterruptedException while // waiting for the report-sample command. PREPROCESS_FAILED_SIMPLEPERF_FAILED_TO_WAIT = 28; } // The result of a CPU capture optional CaptureStatus capture_status = 1; // Duration from user pressing "Record" to pressing "Stop" // Not set if |capture_status| is not set to |SUCCESS| optional uint64 capture_duration_ms = 2; // Duration from the first trace data timestamp to the last one. // Not set if |capture_status| is not set to |SUCCESS| optional uint64 record_duration_ms = 3; // Size of the trace file generated by the capture. // Not set if |capture_status| is set to |STOP_CAPTURING_FAILURE| optional uint32 trace_file_size_bytes = 4; // How much time it took to parse the trace file // Not set if |capture_status| is not set to |SUCCESS| optional uint64 parsing_time_ms = 5; // The user's configuration used to generate this capture optional CpuProfilingConfig profiling_config = 6; // Timeout set by the user for the system "profiler.cpu.art.stop.timeout.sec" // property. Set if |profiling_config.type| is |ART|. optional int32 art_stop_timeout_sec = 7; // How much time it took to stop CPU recording. optional int32 stopping_time_ms = 8; } // Data associated with importing CPU traces. message CpuImportTraceMetadata { enum ImportStatus { // Default status UNDEFINED_IMPORT_TRACE_STATUS = 0; // The trace was imported successfully. IMPORT_TRACE_SUCCESS = 1; // There was a failure when trying to import the trace. IMPORT_TRACE_FAILURE = 2; } enum Technology { UNKNOWN_TECHNOLOGY = 0; ART_TECHNOLOGY = 1; SIMPLEPERF_TECHNOLOGY = 2; ATRACE_TECHNOLOGY = 3; } // Status of the import trace action. optional ImportStatus import_status = 1; // Technology used to generate the trace imported. // Technologies supported are ART, simpleperf and atrace. optional Technology technology = 2; } // Metadata associated with how users are using the profilers filter. message FilterMetadata { enum View { // Default state UNKNOWN_FILTER_VIEW = 0; CPU_TOP_DOWN = 1; CPU_BOTTOM_UP = 2; CPU_FLAME_CHART = 3; CPU_CALL_CHART = 4; MEMORY_PACKAGE = 5; MEMORY_CLASS = 6; MEMORY_CALLSTACK = 7; NETWORK_THREADS = 8; NETWORK_CONNECTIONS = 9; } enum FeaturesFlags { // Default state UNSET_FEATURE_FLAGS = 0; // Used to represent the state of the match case checkbox. MATCH_CASE = 1; // Used to represent the state of the regex checkbox. MATCH_REGEX = 2; } // The view that is active when opening / using the filter. optional View active_view = 1; // Bitwise field used to store features used derived from // FilterMetadata.FeaturesFlags enum. optional uint64 features_used = 2; // The count of elements matched. optional uint32 matched_elements = 3; // The number of total elements to be searched. optional uint32 total_elements = 4; // The length of the string used to filter. optional uint32 search_length = 5; } // Metadata associated with how users are starting sessions in the profilers message ProfilerSessionCreationMetaData { enum SessionType { UNKNOWN_SESSION = 0; FULL_SESSION = 1; MEMORY_CAPTURE = 2; CPU_CAPTURE = 3; } enum CreationSource { UNKNOWN_SOURCE = 0; // The user manually selects a process or imports an existing capture file. MANUAL = 1; } // The type of session created optional SessionType created_type = 1; // How the session is created. optional CreationSource creation_source = 2; } // Metadata associated with how users are selecting sessions in the profilers. message ProfilerSessionSelectionMetaData { enum ArtifactType { UNKNOWN_ARTIFACT_TYPE = 0; ARTIFACT_SESSION = 1; ARTIFACT_HPROF = 2; ARTIFACT_CPU_CAPTURE = 3; ARTIFACT_LEGACY_ALLOCATIONS = 4; } // The type of the artifact selected optional ArtifactType selected_type = 1; // Whether the session is live when the artifact was selected optional bool is_session_alive = 2; } // Shared enum values for energy event messages message EnergyEvent { enum Type { UNKNOWN_EVENT_TYPE = 0; WAKE_LOCK = 1; ALARM = 2; JOB = 3; LOCATION = 4; } enum Subtype { UNKNOWN_EVENT_SUBTYPE = 0; WAKE_LOCK_PARTIAL = 1; WAKE_LOCK_SCREEN_DIM = 2; WAKE_LOCK_SCREEN_BRIGHT = 3; WAKE_LOCK_FULL = 4; WAKE_LOCK_PROXIMITY_SCREEN_OFF = 5; ALARM_RTC = 101; ALARM_RTC_WAKEUP = 102; ALARM_ELAPSED_REALTIME = 103; ALARM_ELAPSED_REALTIME_WAKEUP = 104; } enum Subevent { UNKNOWN_ENERGY_SUBEVENT = 0; WAKE_LOCK_ACQUIRED = 1; WAKE_LOCK_RELEASED = 2; ALARM_SET = 101; ALARM_CANCELLED = 102; ALARM_FIRED = 103; JOB_SCHEDULED = 201; JOB_STARTED = 202; JOB_STOPPED = 203; JOB_FINISHED = 204; LOCATION_UPDATE_REQUESTED = 301; LOCATION_UPDATE_REMOVED = 302; LOCATION_CHANGED = 303; } } message EnergyEventCount { optional EnergyEvent.Type type = 1; optional uint32 count = 2; } message EnergyRangeMetadata { repeated EnergyEventCount event_counts = 1; } message EnergyEventMetadata { optional EnergyEvent.Type type = 1; optional EnergyEvent.Subtype subtype = 2; repeated EnergyEvent.Subevent subevents = 3; } message PerfdCrashInfo { // Addresses of the backstack of the crash reported by perfd. repeated uint64 backstack_address_list = 1; } message TransportDaemonStartedInfo { // Whether it's a restart due to reasons from the device such as a crash or // being killed by the OS (not because IDE or Project is closed and then // reopened, or USB cable is unplugged). optional bool is_restart = 1; // Set only when it's a restart. optional int64 millisec_since_last_start = 2; } message TransportFailureMetadata { enum FailureType { UNKNOWN_FAILURE_TYPE = 0; TIMEOUT = 1; INTERRUPTED = 2; IO = 3; SYNC = 4; SHELL_COMMAND_UNRESPONSIVE = 5; ADB_COMMAND_REJECTED = 6; } optional FailureType failure_type = 1; } message MemoryInstanceFilterMetadata { enum FilterType { UNKNOWN_FILTER_TYPE = 0; ACTIVITY_FRAGMENT_LEAKS = 1; PROJECT_CLASSES = 2; } optional FilterType filter_type = 1; } message TraceProcessorDaemonManagerStats { // Time to spawn the daemon in milliseconds optional uint64 time_to_spawn_ms = 1; } message TraceProcessorDaemonQueryStats { /// Data for all query types: // Time to perform the whole method optional uint64 method_duration_ms = 1; // Time to perform the gRPC query only optional uint64 grpc_query_duration_ms = 2; // The return status of the query optional QueryReturnStatus query_status = 3; /// Set when |TPD_QUERY_LOAD_TRACE| // The file size in bytes of the trace we tried to load. optional uint64 trace_size_bytes = 100; // TODO: Define fields based on error/warnings returned from the // parser enum QueryReturnStatus { UNKNOWN = 0; // The query returned successfully. OK = 1; // The query returned, but TPD identified a problem in the query so it might // have some missing data. QUERY_ERROR = 2; // The backend was unable to perform the query (e.g. the daemon couldn’t be // reached) QUERY_FAILED = 3; } } // Metadata for when an adt-ui box selection is performed. message AdtUiBoxSelectionMetadata { // Selection duration in microseconds, i.e. x-axis. optional uint64 duration_us = 1; // Number of tracks included in the selection, i.e. y-axis. optional uint32 track_count = 2; } // Metadata for an adt-ui track group action. message AdtUiTrackGroupMetadata { // Pre-defined track group title in Android Studio, e.g. Display, Threads. // Does not contain user-defined strings. optional string title = 1; // Track group action type, e.g. collapsing a track group. optional TrackGroupActionType action_type = 2; enum TrackGroupActionType { UNKNOWN = 0; MOVE_UP = 1; MOVE_DOWN = 2; COLLAPSE = 3; EXPAND = 4; } } // Metadata for RUN_WITH_PROFILING action. message RunWithProfilingMetadata { // Profiling mode controls the whether the built APK is profileable or // debuggable. optional ProfilingMode profiling_mode = 1; // Information about the active build variant. optional BuildVariantMetadata build_variant_metadata = 2; enum ProfilingMode { UNKNOWN_PROFILING_MODE = 0; PROFILEABLE = 1; DEBUGGABLE = 2; } message BuildVariantMetadata { // True if the active build variant is debuggable. optional bool is_debuggable = 1; // True if the active build variant is profileable. optional bool is_profileable = 2; } } // Android Profiler metrics message AndroidProfilerEvent { // The current stage we're on when this event was generated optional Stage stage = 1; // The detailed type of this event. optional Type type = 2; // Used to be set if |type| was |TRACE_CPU| // Deprecated since 3.0.0.8 and superseded by cpu_capture_metadata optional CpuProfilingConfig cpu_config = 3 [deprecated = true]; // Set if |type| is |CAPTURE_TRACE| optional CpuCaptureMetadata cpu_capture_metadata = 4; // Set if |type| is |FILTER| optional FilterMetadata filter_metadata = 5; // Set if |type| is |SELECT_MEMORY_HEAP| optional MemoryHeap memory_heap = 6; // Set if |type| is |SESSION_CREATED| optional ProfilerSessionCreationMetaData session_start_metadata = 7; // Set if |type| is |SESSION_ARTIFACT_SELECTED| optional ProfilerSessionSelectionMetaData session_artifact_metadata = 8; // Set if |type| is |CPU_STARTUP_PROFILING| optional CpuStartupProfilingMetadata cpu_startup_profiling_metadata = 9; // Set if |type| is |CPU_IMPORT_TRACE| optional CpuImportTraceMetadata cpu_import_trace_metadata = 10; // Set if |type| is |CPU_API_TRACING| optional CpuApiTracingMetadata cpu_api_tracing_metadata = 11; // Set if |type| is |SELECT_ENERGY_RANGE| optional EnergyRangeMetadata energy_range_metadata = 12; // Set if |type| is |SELECT_ENERGY_EVENT| optional EnergyEventMetadata energy_event_metadata = 13; // Set if |type| is |PERFD_CRASHED| optional PerfdCrashInfo perfd_crash_info = 14; // Set if |type| is |TRANSPORT_DAEMON_FAILED| OR |TRANSPORT_PROXY_FAILED| optional TransportFailureMetadata transport_failure_metadata = 15; // Set if |type| is |MEMORY_INSTANCE_FILTER| optional MemoryInstanceFilterMetadata memory_instance_filter_metadata = 16; // Set if |type| is |TRANSPORT_DAEMON_STARTED| optional TransportDaemonStartedInfo transport_daemon_started_info = 17; // Set if |type| is |TPD_MANAGER_*| optional TraceProcessorDaemonManagerStats tpd_manager_stats = 18; // Set if |type| is |TPD_QUERY_*| optional TraceProcessorDaemonQueryStats tpd_query_stats = 19; // Set if |type| is |SELECT_BOX| optional AdtUiBoxSelectionMetadata box_selection_metadata = 20; // Set if |type| is |TRACK_GROUP_METADATA| optional AdtUiTrackGroupMetadata track_group_metadata = 21; // Set if |type| is |SELECT_FRAME|, |TOGGLE_ALL_FRAMES|, or |TOGGLE_LIFECYCLE| optional uint32 event_count = 22; // Set if |type| is |LOADING| optional Loading loading = 23; // Set if |type| is |RUN_WITH_PROFILING| optional RunWithProfilingMetadata run_with_profiling_metadata = 24; enum Stage { UNKNOWN_STAGE = 0; // The special stage shown to users when no device or process is available NULL_STAGE = 1; // The top-level view that shows all monitors at the same time OVERVIEW_STAGE = 2; CPU_STAGE = 3; MEMORY_STAGE = 4; NETWORK_STAGE = 5; ENERGY_STAGE = 6; CPU_CAPTURE_STAGE = 7; MEMORY_HEAP_DUMP_STAGE = 8; MEMORY_NATIVE_RECORDING_STAGE = 9; MEMORY_JVM_RECORDING_STAGE = 10; } enum MemoryHeap { UNKNOWN_HEAP = 0; DEFAULT_HEAP = 1; IMAGE_HEAP = 2; ZYGOTE_HEAP = 3; APP_HEAP = 4; JNI_HEAP = 5; NATIVE_HEAP = 6; } enum Type { UNKNOWN_TYPE = 0; /// System // Fired when user starts profiling any app PROFILING_STARTED = 1; // Fired when user's profiling session attaches to an instrumented app ADVANCED_PROFILING_STARTED = 2; // This event should be correlated with |stage| STAGE_ENTERED = 3; // Triggered when the user starts an app in profiling mode. RUN_WITH_PROFILING = 4; // Triggered when perfd crashes. The callstack is sent with this metric. PERFD_CRASHED = 5; // Triggered when the transport device manager starts initializing a device. PRE_TRANSPORT_DAEMON_STARTS = 6; // Triggered when the transport daemon failed to launch. TRANSPORT_DAEMON_FAILED = 7; // Triggerd when the transport proxy layer fails to initialize. TRANSPORT_PROXY_FAILED = 8; // Triggered when the profiler service is unavailable. PROFILER_INITIALIZATION_FAILED = 9; // Triggered when the transport daemon is started. TRANSPORT_DAEMON_STARTED = 10; /// General CHANGE_DEVICE = 101; CHANGE_PROCESS = 102; GO_BACK = 103; SELECT_MONITOR = 104; ZOOM_IN = 105; ZOOM_OUT = 106; ZOOM_RESET = 107; ZOOM_TO_SELECTION = 114; GO_LIVE = 108; NAVIGATE_TO_CODE = 109; // Create a selection on the current monitor's main chart. This event should // be correlated with |stage|. SELECT_RANGE = 110; FILTER = 111; // Triggered when profilers starts finding a process for auto-profiling. AUTO_PROFILING_REQUESTED = 112; // Triggered when profilers found a auto-profiling process successfully. AUTO_PROFILING_SUCCEEDED = 113; // Create a box selection. Should be correlated with |stage|. SELECT_BOX = 115; // Perform an action on a track group. Should be correlated with |stage|. TRACK_GROUP_ACTION = 116; // A loading event LOADING = 117; /// CPU TRACE_SAMPLED = 201; // Deprecated since 3.0.0.5. Use TRACE_CPU. TRACE_INSTRUMENTED = 202; // Deprecated since 3.0.0.5. Use TRACE_CPU. SELECT_THREAD = 204; SELECT_TOP_DOWN = 205; SELECT_BOTTOM_UP = 206; SELECT_FLAME_CHART = 207; SELECT_CALL_CHART = 210; OPEN_CPU_CONFIG_DIALOG = 208; CREATE_CPU_CONFIG = 209; TRACE_CPU = 211; // Deprecated since 3.0.0.8. Use CAPTURE_TRACE. CAPTURE_TRACE = 212; // Correlate with |cpu_capture_metadata| THREADS_REORDERED = 213; KERNEL_VIEW_CLICKED = 214; KERNEL_VIEW_TOGGLED = 215; THREADS_VIEW_TOGGLED = 216; CPU_STARTUP_PROFILING = 217; CPU_IMPORT_TRACE = 218; CPU_API_TRACING = 219; SELECT_FRAME = 220; TOGGLE_ALL_FRAMES = 221; TOGGLE_LIFECYCLE = 222; /// Memory FORCE_GC = 301; SNAPSHOT_HPROF = 302; CAPTURE_ALLOCATIONS = 303; SELECT_MEMORY_CHART = 304; EXPORT_HPROF = 305; EXPORT_ALLOCATION = 306; ARRANGE_CLASSES = 307; SELECT_MEMORY_STACK = 308; SELECT_MEMORY_REFERENCES = 309; SELECT_MEMORY_HEAP = 310; // This event type should have |memory_heap| // This type should have |memory_instance_filter_metadata| MEMORY_INSTANCE_FILTER = 311; /// Network SELECT_CONNECTION = 402; SELECT_DETAILS_RESPONSE = 403; SELECT_DETAILS_HEADERS = 404; SELECT_DETAILS_STACK = 405; SELECT_DETAILS_OVERVIEW = 406; SELECT_DETAILS_REQUEST = 407; SELECT_DETAILS_ERROR = 408; SELECT_CONNECTIONS_CONNECTION_VIEW = 409; SELECT_CONNECTIONS_THREADS_VIEW = 410; /// Energy // Sent in addition to |SELECT_RANGE| but including extra data SELECT_ENERGY_RANGE = 601; SELECT_ENERGY_EVENT = 602; /// Session SESSION_CREATED = 501; SESSION_STOPPED = 502; SESSION_UI_EXPANDED = 503; SESSION_UI_COLLAPSED = 504; SESSION_UI_RESIZED = 505; SESSION_ARTIFACT_SELECTED = 506; SESSION_DROPDOWN_CLICKED = 507; /// TraceProcessorDaemon // Daemon Management TPD_MANAGER_SPAWN_OK = 700; TPD_MANAGER_SPAWN_FAILED = 701; // Query Stats TPD_QUERY_LOAD_TRACE = 710; TPD_QUERY_PROCESS_METADATA = 711; TPD_QUERY_LOAD_CPU_DATA = 712; TPD_QUERY_LOAD_MEMORY_DATA = 713; } message Loading { // Type of recording event optional Type type = 1; // Whether this is an attempt or a success optional bool is_success = 2; // Size of the trace or file to load (in KB) optional uint32 size_kb = 3; // Event count or instance count, depending on the type optional uint64 event_count = 4; // Set if |is_success| optional uint32 elapsed_ms = 5; // Number of logical cores optional uint32 core_count = 6; // Memory available in the machine (in MB) optional uint32 machine_memory_mb = 7; // Memory set aside for studio (in MB) optional uint32 studio_max_memory_mb = 8; // Memory available for studio (in MB) when event is sent optional uint32 studio_free_memory_mb = 9; enum Type { UNSPECIFIED = 0; HPROF = 1; HEAP_PROFD = 2; LEGACY_ALLOC = 3; // pre-O LIVE_ALLOC = 4; PERFETTO_PROCESS_LIST = 5; PERFETTO_PROCESS = 6; SIMPLEPERF = 7; ART = 8; } } } // Stats for a single table in the Android Profiler DB message AndroidProfilerDbTable { // The unique name that identifies this table, e.g. "Cpu_Data", // "Memory_AllocationEvents", or "Network_Connection" optional string name = 1; // The number of records currently entered into this table optional uint32 num_records = 2; } // Stats for the DB used by Android Profiler message AndroidProfilerDbStats { // The amount of time the database has been running (in seconds) optional uint32 age_sec = 1; // DB cache on disk (in MB) optional uint32 total_disk_mb = 2; // Entries for each table in our DB repeated AndroidProfilerDbTable tables = 3; } // APK Analyzer stats message ApkAnalyzerStats { // size of the APK optional uint64 uncompressed_size = 1; // size of the APK after compression optional uint64 compressed_size = 2; } // Gradle Plugin Upgrade Dialog Stats message GradlePluginUpgradeDialogStats { // The current Gradle Version used by the project e.g "4.10.3" optional string current_gradle_version = 1; // The current Android Gradle Plugin version used by the project e.g // "3.4-alpha01" optional string current_android_gradle_plugin_version = 2; // The Gradle version that the update prompt recommended e.g "5.1" optional string recommended_gradle_version = 3; // The Android Gradle Plugin version that the upgrade prompt recommended e.g // "3.5-beta02" optional string recommended_android_gradle_plugin_version = 4; // The action the user took optional UserAction user_action = 5; enum UserAction { // We don't know UNKNOWN_USER_ACTION = 0; // The user closed the dialog CANCEL = 1; // Do not show the prompt again DO_NOT_ASK_AGAIN = 2; // Do not show the prompt again until tomorrow REMIND_ME_TOMORROW = 3; // Upgrade the Gradle and Plugin version OK = 4; } } // Gradle Sync details message GradleSyncStats { // Cause of sync optional Trigger trigger = 1; // Total time, the rest of the non negative times should add to this value optional int64 total_time_ms = 2; // Time in ms spent on gradle (can be negative in case of failure) optional int64 gradle_time_ms = 3; // Time in ms spent on IDE (can be negative in case of failure) optional int64 ide_time_ms = 4; // Whether the embedded maven repository is enabled optional bool embedded_repo_enabled = 5; // What type of sync was requested optional GradleSyncType sync_type = 6; // What type of sync was actually performed optional GradleSyncType actual_sync_type = 7; // The version of our Android Gradle plugin from the last known successful // sync. (e.g. 3.5.0-dev) optional string last_known_android_gradle_plugin_version = 8; // The version of AGP used for this sync, if known. (e.g. 3.5.0) optional string android_gradle_plugin_version = 9; // Whether or not the project uses Groovy build files ("build.gradle") optional bool uses_build_gradle = 10; // Whether or not the project uses Kotlin build files ("build.gradle.kts") optional bool uses_build_gradle_kts = 11; // Deprecated. // Use user_requested_sync_type and studio_requested_sync_execution_type. // The Sync execution type: whether it uses Sequential or parallel model // fetching. optional GradleSyncExecutionType sync_execution_type = 12 [deprecated = true]; // The type of sync execution user requested. Note that this may be overridden // by [sync_execution_type] property. optional UserRequestedExecution user_requested_sync_type = 13; // The type of sync execution Studio requested. Note that e.g. even if // parallel is requested, Gradle may decide to run it sequentially. optional StudioRequestedExecution studio_requested_sync_type = 14; // List of triggers for gradle Sync enum Trigger { // Default, should not be explicitly set TRIGGER_UNKNOWN = 0; // Used only when a project is opened TRIGGER_PROJECT_LOADED = 1; // Project modifications caused a sync. This is too generic, prefer a more // specific value TRIGGER_PROJECT_MODIFIED = 2; // User has explicitly requested a sync using the sync button TRIGGER_USER_REQUEST = 3; // User clicked quickfix to enable embedded Maven repo TRIGGER_EMBEDDED_REPO_ENABLED_BY_QUICKFIX = 4; // User changed variant selection from Build Variants window TRIGGER_VARIANT_SELECTION_CHANGED_BY_USER = 5; // User made changes in PSD that require a sync TRIGGER_PSD_CHANGES = 6; // Sync was done as part of Android Studio testing (should not be used since // logs from testing are stored in a different place) TRIGGER_TEST_REQUESTED = 7; // First marker for user initiated syncs TRIGGER_USER_FIRST_MARKER = 100; // Started by ""Sync now"" banner when there are pending changes TRIGGER_USER_STALE_CHANGES = 101; // User clicked on the try again hyperlink from a banner TRIGGER_USER_TRY_AGAIN = 102; // Started by user from sync action TRIGGER_USER_SYNC_ACTION = 103; // Syncing with additional arguments for c++ projects TRIGGER_USER_REFRESH_LINKED_CPP_PROJECTS = 104; // Sync was requested by user while the project was building TRIGGER_USER_REQUEST_WHILE_BUILDING = 105; // Re-run was requested by user from command line output console with // additional options TRIGGER_USER_REQUEST_RERUN_WITH_ADDITIONAL_OPTIONS = 106; // Last marker for user initiated syncs TRIGGER_USER_LAST_MARKER = 199; // First marker for syncs caused by quickfixes TRIGGER_QF_FIRST_MARKER = 400; // Upgrade appengine version using a quickfix TRIGGER_QF_APPENGINE_VERSION_UPGRADED = 401; // Install an artifact using a quickfix TRIGGER_QF_ARTIFACT_INSTALLED = 402; // Install build tools using a quickfix TRIGGER_QF_BUILD_TOOLS_INSTALLED = 403; // Build tools version removed using a quickfix TRIGGER_QF_BUILD_TOOLS_VERISON_REMOVED = 404; // Build tools version changed using a quickfix TRIGGER_QF_BUILD_TOOLS_VERSION_CHANGED = 405; // Install CMake using a quickfix TRIGGER_QF_CMAKE_INSTALLED = 406; // Change JDK to the one used by Android Studio itself from a quickfix TRIGGER_QF_JDK_CHANGED_TO_CURRENT = 407; // Change JDK to use the one embedded with Android Studio from a quickfix TRIGGER_QF_JDK_CHANGED_TO_EMBEDDED = 408; // Install NDK using a quickfix TRIGGER_QF_NDK_INSTALLED = 409; // Property android.useDeprecatedNdk was set to true using a quickfix TRIGGER_QF_NDK_INTEGRATION_DEPRECATED_SET = 410; // Offline mode was disabled using a quickfix TRIGGER_QF_OFFLINE_MODE_DISABLED = 411; // Offline mode was enabled using a quickfix TRIGGER_QF_OFFLINE_MODE_ENABLED = 412; // Install one or more platforms using a quickfix TRIGGER_QF_PLATFORM_INSTALLED = 413; // Sync passing --refresh-dependencies option from an hyperlink TRIGGER_QF_REFRESH_DEPENDENCIES = 414; // Repository added from a quickfix TRIGGER_QF_REPOSITORY_ADDED = 415; // Install repository from a quickfix TRIGGER_QF_REPOSITORY_INSTALLED = 416; // Install missing SDK packages from a quickfix TRIGGER_QF_SDK_PACKAGE_INSTALLED = 417; // SDK path was changed from a quickfix TRIGGER_QF_SDK_PATH_CHANGED = 418; // Install a missing SDK version from a quickfix TRIGGER_QF_SDK_VERSION_INSTALLED = 419; // Gradle wrapper was created using a quickfix TRIGGER_QF_WRAPPER_CREATED = 420; // Gradle version was changed in wrapper using a quickfix TRIGGER_QF_WRAPPER_GRADLE_VERSION_FIXED = 421; // SDK has been removed from manifest files TRIGGER_QF_SDK_REMOVED_FROM_MANIFEST = 422; // Gradle distribution file has been deleted TRIGGER_QF_GRADLE_DISTRIBUTION_DELETED = 423; // Property distributionSha256Sum was removed from Gradle wrapper TRIGGER_QF_DISTRIBUTIONSHA256SUM_REMOVED_FROM_WRAPPER = 424; // User confirmed distributionSha256Sum in Gradle wrapper TRIGGER_QF_DISTRIBUTIONSHA256SUM_CONFIRMED_BY_USER = 425; // gradleJvm set to USE_PROJECT_JDK in gradle.xml TRIGGER_QF_GRADLEJVM_TO_USE_PROJECT_JDK = 426; // Remove JCenter from repositories TRIGGER_QF_REMOVE_JCENTER_FROM_REPOSITORIES = 427; // Last marker for syncs caused by quickfixes TRIGGER_QF_LAST_MARKER = 999; // First marker for syncs caused by a refactor TRIGGER_REFACTOR_FIRST_MARKER = 1200; // Migrate project to use Androidx TRIGGER_REFACTOR_MIGRATE_TO_ANDROIDX = 1201; // Migrate project to use resource namespaces TRIGGER_REFACTOR_MIGRATE_TO_RESOURCE_NAMESPACES = 1202; // A module was renamed using refactoring TRIGGER_REFACTOR_MODULE_RENAMED = 1203; // Migrate project to use non-transitive R classes TRIGGER_REFACTOR_MIGRATE_TO_NON_TRANSITIVE_R_CLASSES = 1204; // Last marker for syncs caused by a refactor TRIGGER_REFACTOR_LAST_MARKER = 1299; // First marker for syncs due to changes from PSD TRIGGER_PSD_FIRST_MARKER = 1500; // A dependency was removed using PSD (using // GradleOperations#removeDependencies) TRIGGER_PSD_DEPENDENCY_REMOVED = 1501; // A module was removed from the PSD (using // AndroidProjectStructureConfigurable.DeleteModuleAction) TRIGGER_PSD_MODULE_REMOVED = 1502; // Last marker for syncs due to changes from PSD TRIGGER_PSD_LAST_MARKER = 1599; // First marker for changes in SDK TRIGGER_SDK_FIRST_MARKER = 1800; // Android SDK path in local.properties was changed TRIGGER_SDK_PATH_CHANGED = 1801; // Last marker for changes in SDK TRIGGER_SDK_LAST_MARKER = 1899; // First marker for sync due to changes done by // AndroidGradleJavaProjectModelModifier TRIGGER_MODIFIER_FIRST_MARKER = 2100; // An action was redone (from // AndroidGradleJavaProjectModelModifier#registerUndoAction) TRIGGER_MODIFIER_ACTION_REDONE = 2101; // An action was undone (from // AndroidGradleJavaProjectModelModifier#registerUndoAction) TRIGGER_MODIFIER_ACTION_UNDONE = 2102; // A dependency to a module was added TRIGGER_MODIFIER_ADD_MODULE_DEPENDENCY = 2103; // A dependency to an external library was added TRIGGER_MODIFIER_ADD_LIBRARY_DEPENDENCY = 2104; // Language level was changed TRIGGER_MODIFIER_LANGUAGE_LEVEL_CHANGED = 2105; // Last marker for sync due to changes done by // AndroidGradleJavaProjectModelModifier TRIGGER_MODIFIER_LAST_MARKER = 2199; // First marker for changes in languages TRIGGER_LANGUAGE_FIRST_MARKER = 2400; // Java language level was changed TRIGGER_LANGUAGE_JAVA_LEVEL_CHANGED = 2401; // Kotlin was configured for current project TRIGGER_LANGUAGE_KOTLIN_CONFIGURED = 2402; // Last marker for changes in languages TRIGGER_LANGUAGE_LAST_MARKER = 2499; // First marker for syncs related to Single Variant Sync TRIGGER_SVS_FIRST_MARKER = 2700; // SVS is not supported. SVS was disabled and a new sync started TRIGGER_SVS_NOT_SUPPORTED = 2701; // Last marker for syncs related to Single Variant Sync TRIGGER_SVS_LAST_MARKER = 2799; // First marker for sync due to C++ changes TRIGGER_CPP_FIRST_MARKER = 3000; // Link an external C++ project with Gradle TRIGGER_CPP_EXTERNAL_PROJECT_LINKED = 3001; // Last marker for sync due to C++ changes TRIGGER_CPP_LAST_MARKER = 3099; // First marker for AddDependencyAction syncs TRIGGER_ADDDEPENDENCYACTION_FIRST_MARKER = 3300; // A dependency was added by Add dependency action TRIGGER_ADDDEPENDENCYACTION_CALLED = 3301; // Last marker for AddDependencyAction syncs TRIGGER_ADDDEPENDENCYACTION_LAST_MARKER = 3399; // First marker for syncs related to Espresso TRIGGER_ESPRESSO_FIRST_MARKER = 3600; // Espresso is enabled by RecordingDialog TRIGGER_ESPRESSO_SETUP = 3601; // Last marker for syncs related to Espresso TRIGGER_ESPRESSO_LAST_MARKER = 3699; // First marker for syncs caused by a build TRIGGER_BUILD_FIRST_MARKER = 3900; // Sync is needed before building an APK TRIGGER_BUILD_BEFORE_BUILDING_APK = 3901; // There was an error in the previous sync (before building) or there were // changes after build was done that require a sync TRIGGER_BUILD_SYNC_NEEDED_AFTER_BUILD = 3902; // Last marker for syncs caused by a build TRIGGER_BUILD_LAST_MARKER = 3999; // First marker for sync started due to a run TRIGGER_RUN_FIRST_MARKER = 4200; // There are native unsynced variants before running TRIGGER_RUN_NATIVE_UNSYNCED = 4201; // Sync was not performed before running and there are changes that require // a sync TRIGGER_RUN_SYNC_NEEDED_BEFORE_RUNNING = 4202; // Last marker for sync started due to a run TRIGGER_RUN_LAST_MARKER = 4299; // First marker for changes in Android Gradle Plugin TRIGGER_AGP_FIRST_MARKER = 4500; // Android Gradle plugin was updated TRIGGER_AGP_VERSION_UPDATED = 4501; // Rollback of Android Gradle plugin update was requested TRIGGER_AGP_VERSION_UPDATE_ROLLED_BACK = 4502; // Last marker for changes in Android Gradle Plugin TRIGGER_AGP_LAST_MARKER = 4599; // First marker for project loading triggers TRIGGER_PROJECT_LOADED_FIRST_MARKER = 4800; // First sync after project was created from NPW TRIGGER_PROJECT_NEW = 4801; // Project was reopen from recent projects or after IDE restart TRIGGER_PROJECT_REOPEN = 4802; // There was a failure while trying to setup module from cache TRIGGER_PROJECT_CACHED_SETUP_FAILED = 4803; // Last marker for project loading triggers TRIGGER_PROJECT_LOADED_LAST_MARKER = 4899; // First marker for sync required while importing TRIGGER_IMPORT_FIRST_MARKER = 5100; // An ADT module was imported to the current project TRIGGER_IMPORT_ADT_MODULE = 5101; // One or more modules were copied and registered to current project TRIGGER_IMPORT_MODULES_COPIED = 5102; // Last marker for sync required while importing TRIGGER_IMPORT_LAST_MARKER = 5199; // First marker for sync after changes in variants TRIGGER_VARIANT_FIRST_MARKER = 5400; // Variant changed by user but a full sync is required TRIGGER_VARIANT_SELECTION_FULL_SYNC = 5401; // Last marker for sync after changes in variants TRIGGER_VARIANT_LAST_MARKER = 5499; // First marker for changes done by GradleDependencyManager TRIGGER_GRADLEDEPENDENCY_FIRST_MARKER = 5700; // A dependency was added TRIGGER_GRADLEDEPENDENCY_ADDED = 5701; // A dependency was updated TRIGGER_GRADLEDEPENDENCY_UPDATED = 5702; // Last marker for changes done by GradleDependencyManager TRIGGER_GRADLEDEPENDENCY_LAST_MARKER = 5799; } // List of sync types enum GradleSyncType { // Default (used to identify sync done before we tracked this) GRADLE_SYNC_TYPE_UNKNOWN = 0; // IDEA sync GRADLE_SYNC_TYPE_IDEA = 1; // Single variant sync GRADLE_SYNC_TYPE_SINGLE_VARIANT = 2; // Compound sync GRADLE_SYNC_TYPE_COMPOUND = 3; // Shipped sync GRADLE_SYNC_TYPE_SHIPPED = 4; // New sync (without other features) GRADLE_SYNC_TYPE_NEW_SYNC = 5; } // Deprecated: use StudioRequestedExecution and UserRequestedExecution. // Sync execution type: whether Sync fetches model builders in parallel or // sequentially enum GradleSyncExecutionType { option deprecated = true; // Gradle sync runs sequentially GRADLE_SYNC_RUNS_SEQUENTIALLY = 0; // Gradle sync runs in parallel GRADLE_SYNC_RUNS_IN_PARALLEL = 1; } enum UserRequestedExecution { UNKNOWN_USER_REQUESTED_EXECUTION_TYPE = 0; // User requested sequential sync. USER_REQUESTED_SEQUENTIAL = 1; // User requested parallel sync. USER_REQUESTED_PARALLEL = 2; } enum StudioRequestedExecution { UNKNOWN_STUDIO_REQUESTED_EXECUTION_TYPE = 0; // Studio requested sequential sync. STUDIO_REQUESTD_SEQUENTIAL = 1; // Studio requested parallel sync. STUDIO_REQUESTD_PARALLEL = 2; } } // Gradle sync issue details. message GradleSyncIssue { // The type of the sync issue. optional AndroidStudioEvent.GradleSyncIssueType type = 1; // The list of quick-fixes offered to resolve the issue. repeated AndroidStudioEvent.GradleSyncQuickFix offered_quick_fixes = 2; } // Metrics for native workspace sync. The data is collected in Android Studio // after native workspace sync, which happens after Gradle sync is completed. message GradleCppSyncStats { // The time it takes to sync native workspace after Gradle sync is completed. optional int64 native_workspace_sync_time_ms = 1; repeated NativeModuleStats synced_native_module_stats = 2; message NativeModuleStats { // The total number of C files in this native module optional int32 c_source_file_count = 1; // The total number of C++ files in this native module optional int32 cpp_source_file_count = 2; // The number of distinct compiler flags. optional int32 distinct_compiler_flag_lists_count = 3; // The number of CIDR configurations created for this module. optional int32 cidr_configuration_count = 4; } // The estimated memory footprint of the CIDR workspace. This value is // expensive to compute so it's sampled. optional int32 cidr_workspace_size = 3; } // APK Debugging project information message ApkDebugProject { // Client-side salted hash of the package name for tracking purposes. optional string package_id = 1; } // Details for layout inspector events message LayoutInspectorEvent { enum LayoutInspectorEventType { UNKNOWN_EVENT_TYPE = 0; // Capture view data from a window CAPTURE = 1; // Layout inspector was opened OPEN = 2; // Dump Display List of selected node DUMP_DISPLAYLIST = 3; // Pixel perfect feature used to overlay a design mock OVERLAY_IMAGE = 4; // Render a sub section of the captured view RENDER_SUB_VIEW = 5; // Navigate to declaration of a view resource by id GO_TO_DECLARATION = 6; // Capture view data timeout CAPTURE_TIME_OUT = 7; } // Type of event optional LayoutInspectorEventType type = 1; // defined if LayoutInspectorEventType = CAPTURE, CAPTURE_TIME_OUT optional int64 duration_in_ms = 2; // defined if LayoutInspectorEventType = CAPTURE // size of the captured view data in bytes optional int64 data_size = 3; // defined if LayoutInspectorEventType = CAPTURE or OPEN // which version of the protocol is used to capture layout info optional uint32 version = 4; } // Details for dynamic layout inspector (inspector v2) events message DynamicLayoutInspectorEvent { enum DynamicLayoutInspectorEventType { UNKNOWN_EVENT_TYPE = 0; // Layout inspector was opened OPEN = 1; // User tried to attach to a device ATTACH_REQUEST = 2; // Device attached successfully ATTACH_SUCCESS = 3; // First render after connection INITIAL_RENDER = 4; // First render after connection without images INITIAL_RENDER_NO_PICTURE = 5; // First render after connection with bitmap images INITIAL_RENDER_BITMAPS = 6; // User tried to attach to a device using compatibility mode COMPATIBILITY_REQUEST = 7; // Device attached successfully in compatibility mode COMPATIBILITY_SUCCESS = 8; // First render after connection in compatibility mode COMPATIBILITY_RENDER = 9; // First render after connection without images in compatibility mode COMPATIBILITY_RENDER_NO_PICTURE = 10; // Session Data after a session ended SESSION_DATA = 11; // User saved a snapshot SNAPSHOT_CAPTURED = 12; // User loaded a snapshot SNAPSHOT_LOADED = 13; // Error loading a snapshot SNAPSHOT_LOAD_ERROR = 14; // User cancelled the snapshot saving process SNAPSHOT_CANCELLED = 15; // There was an error during initial connect ATTACH_ERROR = 16; // An attach attempt was cancelled or preempted by the user ATTACH_CANCELLED = 17; // Info about auto-connect to foreground process AUTO_CONNECT_INFO = 18; } // Type of event optional DynamicLayoutInspectorEventType type = 1; // Data for the layout inspector session optional DynamicLayoutInspectorSession session = 2; // Additional information that will be available when looking at a snapshot optional DynamicLayoutInspectorSnapshotInfo snapshot_info = 3; // Extra info for error-related events optional DynamicLayoutInspectorErrorInfo error_info = 4; // Extra info about auto connect to foreground process optional DynamicLayoutInspectorAutoConnectInfo auto_connect_info = 5; } message DynamicLayoutInspectorAutoConnectInfo { // The result of the handshake enum HandshakeResult { UNSPECIFIED_RESULT = 0; // It's not known if auto-connection is supported SUPPORT_UNKNOWN = 1; // Auto-connection is supported SUPPORTED = 2; // Auto-connection is not supported NOT_SUPPORTED = 3; } // To what a SUPPORT_UNKNOWN handshake converted to enum HandshakeUnknownConversion { // A device with UNKNOWN support state converted to SUPPORTED UNKNOWN_TO_SUPPORTED = 0; // A device with UNKNOWN support state converted to NOT_SUPPORTED UNKNOWN_TO_NOT_SUPPORTED = 1; // A device with UNKNOWN support state was unplugged bevore converting UNKNOWN_NOT_RESOLVED = 2; } // Reason why the HandshakeResult is NOT_SUPPORTED enum AutoConnectReasonNotSupported { UNSPECIFIED_REASON = 0; // Dumpsys was not found DUMPSYS_NOT_FOUND = 1; // Grep was not found GREP_NOT_FOUND = 2; // Dumpsys found no top activity and no sleeping activities DUMPSYS_NO_TOP_ACTIVITY_NO_SLEEPING_ACTIVITIES = 3; // Dumpsys found no top activity but found awake activities DUMPSYS_NO_TOP_ACTIVITY_BUT_HAS_AWAKE_ACTIVITIES = 4; } // The result of the handsthake. Does the device support auto connect? optional HandshakeResult handshake_result = 1; // If the handshake was initially SUPPORT_UNKNOWN, to what did it convert to? optional HandshakeUnknownConversion handshake_conversion = 2; // Additional info about why the handshake_result is NOT_SUPPORTED optional AutoConnectReasonNotSupported reason_not_supported = 3; } // Extra info for error-related events message DynamicLayoutInspectorErrorInfo { // How far the inspector attach process got before an error occurred. // Order matters: later states are farther along in the process. enum AttachErrorState { UNKNOWN_ATTACH_ERROR_STATE = 0; NOT_STARTED = 1; // Test ADB roundtrip to device successful ADB_PING = 4; // App Inspection states // --------------------------------- // Studio has established an app inspection connection to the device ATTACH_SUCCESS = 7; // Studio sent a request to start capturing START_REQUEST_SENT = 10; // The inspector received the request to start capturing START_RECEIVED = 20; // The inspector registered the root view detector STARTED = 30; // The inspector found root views and registered invalidation callbacks ROOTS_EVENT_SENT = 40; // Studio received the root views ROOTS_EVENT_RECEIVED = 50; // The inspector got a callback from the platform VIEW_INVALIDATION_CALLBACK = 60; // The inspector captured a screenshot or serialized an SKP SCREENSHOT_CAPTURED = 70; // The inspector executed the view hierarchy capture code VIEW_HIERARCHY_CAPTURED = 80; // The inspector sent a response RESPONSE_SENT = 90; // Studio received the response LAYOUT_EVENT_RECEIVED = 100; // Compose-related states // --------------------------------- // Request sent to Compose inspector COMPOSE_REQUEST_SENT = 110; // TODO: compose inspector device-side states // Studio received a response from the compose inspector COMPOSE_RESPONSE_RECEIVED = 200; // Legacy inspector states // --------------------------------- LEGACY_WINDOW_LIST_REQUESTED = 210; LEGACY_WINDOW_LIST_RECEIVED = 220; LEGACY_HIERARCHY_REQUESTED = 230; LEGACY_HIERARCHY_RECEIVED = 240; LEGACY_SCREENSHOT_REQUESTED = 250; LEGACY_SCREENSHOT_RECEIVED = 260; // Common states // --------------------------------- PARSED_COMPONENT_TREE = 270; // Model is updated with received info MODEL_UPDATED = 280; } // The error code encountered enum AttachErrorCode { // Unknown error code UNKNOWN_ERROR_CODE = 0; // -------------------------------------- // Error code from the View Client // -------------------------------------- // Api lower than 29 LOW_API_LEVEL = 1; // Timeout with fallback to Legacy mode CONNECT_TIMEOUT = 2; // -------------------------------------- // Error codes from the View Agent // -------------------------------------- UNKNOWN_VIEW_AGENT_ERROR = 101; // No hardware acceleration NO_HARDWARE_ACCELERATION = 102; // The app seems to have no UI NO_ROOT_VIEWS_FOUND = 103; // -------------------------------------- // Error codes from App Inspection Layer // -------------------------------------- // General fallback if we were unable to map the app inspection exception UNKNOWN_APP_INSPECTION_ERROR = 201; // The device in not found among the ABD devices APP_INSPECTION_CANNOT_FIND_DEVICE = 202; // The process is no longer found APP_INSPECTION_PROCESS_NO_LONGER_EXISTS = 203; // The inspector is incompatible with the library in the running app APP_INSPECTION_INCOMPATIBLE_VERSION = 204; // The targeted library does not exist in the app APP_INSPECTION_MISSING_LIBRARY = 205; // The target app is proguarded APP_INSPECTION_PROGUARDED_APP = 206; // An inspector artifact can't be resolved APP_INSPECTION_ARTIFACT_NOT_FOUND = 207; } // How far we got on initial connect before an error happened, when sending // ATTACH_ERROR optional AttachErrorState attach_error_state = 1; // The error encountered to abort the attach attempt optional AttachErrorCode attach_error_code = 2; } // Information specific to snapshots message DynamicLayoutInspectorSnapshotInfo { // The version of the snapshot file format. Current versions are: // 1 - non-dynamic inspector // 2 - new version of non-dynamic inspector, never enabled in production // 3 - dynamic inspector in legacy mode (API < 28) // 4 - dynamic inspector in normal mode optional int32 snapshot_version = 1; // What program saved the snapshot enum SaveSource { UNKNOWN = 0; STUDIO = 1; } // What program saved the snapshot optional SaveSource save_source = 2; // The version of studio (or some other future tool) that saved it optional string save_version = 3; // Was the inspector in live mode when the snapshot was saved optional bool live_when_saved = 4; // How long it took to save the snapshot in milliseconds optional uint32 save_duration_ms = 5; // How long it took to load the snapshot in milliseconds optional uint32 load_duration_ms = 6; } // Session data for dynamic layout inspector (inspector v2) message DynamicLayoutInspectorSession { // Session data around live versus refresh mode optional DynamicLayoutInspectorLiveMode live = 1; // Session data around 3D rotation optional DynamicLayoutInspectorRotation rotation = 2; // Session data around memory usage optional DynamicLayoutInspectorMemory memory = 3; // Session data around compose optional DynamicLayoutInspectorCompose compose = 4; // Session data around the system view toggle optional DynamicLayoutInspectorSystemNode system = 5; // Session data around goto declaration optional DynamicLayoutInspectorGotoDeclaration goto_declaration = 6; } // Session data for dynamic layout inspector (inspector v2) around live mode message DynamicLayoutInspectorLiveMode { // Number of times the refresh button was clicked optional uint32 refresh_button_clicks = 1; // Component selection count while in live update mode optional uint32 clicks_with_live_updates = 2; // Component selection count while in manual refresh mode optional uint32 clicks_without_live_updates = 3; } // Session data for dynamic layout inspector (inspector v2) around 3D rotation message DynamicLayoutInspectorRotation { // Component selection count in image while showing in 3D optional uint32 image_clicks_in_3d = 1; // Component selection count in image while showing in 2D optional uint32 image_clicks_in_2d = 2; // Component selection count in the component tree while showing in 3D optional uint32 component_tree_clicks_in_3d = 3; // Component selection count in the component tree while showing in 2D optional uint32 component_tree_clicks_in_2d = 4; } message DynamicLayoutInspectorCompose { // Is the kotlin reflection library included in the project optional bool kotlin_reflection_available = 1; // Number of times a compose node was selected in image optional uint32 image_clicks = 2; // Number of times a compose node was selected in the component tree optional uint32 component_tree_clicks = 3; // Number of times a link in the property value section was clicked optional uint32 go_to_source_from_property_value_clicks = 4; // The max recomposition count seen for a composable in a session optional uint32 max_recomposition_count = 5; // The max recomposition skips seen for a composable in a session optional uint32 max_recomposition_skips = 6; // The max highlight amount seen in a session optional float max_recomposition_highlight = 7; // Number of times the recomposition counts were explicitly reset optional uint32 recomposition_reset_clicks = 8; } message DynamicLayoutInspectorSystemNode { // Number of selections while the system views are hidden optional uint32 clicks_with_hidden_system_views = 1; // Number of selections while the system views are visible optional uint32 clicks_with_visible_system_views = 2; } // Session data for dynamic layout inspector (inspector v2) around memory usage message DynamicLayoutInspectorMemory { // Memory snapshot for the first image rendered optional Snapshot initial_snapshot = 1; // Memory snapshot for the image requiring the most memory in the session optional Snapshot largest_snapshot = 2; message Snapshot { // True if the image was based on a skia snapshot, false it was a bitmap optional bool skia_image = 1; // The size used in the capture in mega bytes optional uint64 capture_size_mb = 2; // The time it took to measure the memory used optional uint64 measurement_duration_ms = 3; } } // Session data around goto declaration message DynamicLayoutInspectorGotoDeclaration { // Number of clicks on "Goto Declaration" menu action optional uint32 clicks_menu_action = 1; // Number of times the "Goto Declaration" menu action was activated with key // shortcut optional uint32 key_strokes_shortcut = 2; // Number of times a double click was used to "Goto Declaration" optional uint32 double_clicks = 3; } // Kotlin support information message KotlinSupport { // True if "Include Kotlin Support" option checked // when Android project created, False otherwise. // Set when kind = TEMPLATE_RENDER optional bool include_kotlin_support = 1; // Kotlin version used, e.g. "1.1.3-2". optional string kotlin_support_version = 2; // Android Ktx version used, e.g. "1.0.0". optional string android_ktx_version = 3; } // Details for connection assistant event message ConnectionAssistantEvent { enum ConnectionAssistantEventType { UNKNOWN_EVENT_TYPE = 0; // Assistant is opened OPEN = 1; // Scan USB devices button clicked SCAN_USB_DEVICES_CLICKED = 2; // USB devices detected USB_DEVICES_DETECTED = 3; // Restart ADB devices button clicked RESTART_ADB_CLICKED = 4; // ADB devices detected ADB_DEVICES_DETECTED = 5; // Report issue button clicked, opens report dialog REPORT_ISSUE_CLICKED = 6; // Issue reported ISSUE_REPORTED = 7; } // Type of event optional ConnectionAssistantEventType type = 1; // defined if ConnectionAssistantEventType = USB_DEVICES_DETECTED, // ADB_DEVICES_DETECTEd optional int32 usb_devices_detected = 2; // defined if ConnectionAssistantEventType = USB_DEVICES_DETECTED, // ADB_DEVICES_DETECTEd optional int32 adb_devices_detected = 3; } // Details for Out of Memory Dialog event message OomDialogEvent { // Event type describing which memory the process ran out of optional OomDialogEventType event_type = 1; // Initial value of heap size (in MB) optional int32 initial_heap_size = 2; // Initial value of metaspace size (in MB) optional int32 initial_metaspace_size = 3; // Initial value of codecache size (in MB) optional int32 initial_codecache_size = 4; // New heap size (in MB) optional int32 saved_heap_size = 5; // New metaspace size (in MB) optional int32 saved_metaspace_size = 6; // New codecache size (in MB) optional int32 saved_codecache_size = 7; // true if user can modify memory size values optional bool editing_enabled = 8; // How user interacted with the dialog optional SelectedAction selected_action = 9; // Describes which memory type the process ran out of enum OomDialogEventType { UNKNOWN_EVENT_TYPE = 0; // Out of heap memory OOM_HEAP = 1; // Out of permanent generation heap memory OOM_PERM_GEN = 2; // Out of metaspace memory OOM_METASPACE = 3; // Out of code cache memory OOM_CODE_CACHE = 4; // Not out of memory, but only small amount of heap available // with frequent GC operations. LOW_HEAP = 5; } // How user interacted with the dialog enum SelectedAction { UNKNOWN_ACTION = 0; // Save new settings and continue CONTINUE_ACTION = 1; // Save new settings and quit QUIT_ACTION = 2; // Dialog dismissed without saving CANCEL_ACTION = 3; } } // Details for whats new assistant event // Deprecated since 3.6.0.8, use WhatsNewAssistantUpdateEvent instead. message WhatsNewAssistantEvent { option deprecated = true; enum WhatsNewAssistantEventType { UNKNOWN_EVENT_TYPE = 0; // Assistant is opened OPEN = 1; // Auto Open on first load of a new AS version AUTO_OPEN = 2; // First interaction after opening FIRST_INTERACTION = 3; // Assistant is closed CLOSED = 4; // Button clicked BUTTON_CLICKED = 5; } // Type of event optional WhatsNewAssistantEventType type = 1; } // Details for What's New Assistant and its interactive contents utilisation. message WhatsNewAssistantUpdateEvent { // Details about action button usage in What's New Assistant. // Track actions created/updated and action button clicks. message ActionButtonEvent { // Type of the action button enum ActionButtonType { UNKNOWN_BUTTON = 0; // Build analyzer action button BUILD_ANALYZER_SHOW = 1; // App Inspection action button APP_INSPECTION_SHOW = 2; } // State of the action button, tracks what message is shown at the moment. // Each feature can define their own states if there are any. enum ActionButtonState { UNKNOWN_STATE = 0; // Build analyzer can not be used because of old AGP version. BUILD_ANALYZER_AGP_VERSION_LOW = 1; // Build analyzer doesn't have data yet. Build will run on the click. BUILD_ANALYZER_NO_DATA = 2; // Build is running at the moment to gather data. BUILD_ANALYZER_BUILD_RUNNING = 3; // Build failed to finish and no data ready to be shown. BUILD_ANALYZER_BUILD_FAILED = 4; // Build analyzer data exist to be opened right away. BUILD_ANALYZER_DATA_READY = 5; } enum EventType { UNKNOWN_TYPE = 0; BUTTON_CREATED = 1; BUTTON_CLICK = 2; BUTTON_STATE_UPDATED = 3; } // Type of the action button optional ActionButtonType action_button_type = 1; // Type of the event optional EventType event_type = 2; // State of the button action at the moment of the event optional ActionButtonState action_button_state = 3; // Time between opening window and clicking state button optional int64 time_from_wna_open = 4; } // Whether this window was auto opened optional bool auto_opened = 1; // Whether this is the update flow or regular WNA optional bool update_flow = 2; // Whether the user scrolled to the bottom of the pane optional bool scrolled_to_bottom = 3; // Time between opening window and scrolling to bottom optional int64 time_to_scrolled_to_bottom = 7; // Whether the window was closed due to clicking "Dismiss" optional bool dismissed = 4; // Time between opening window and clicking update button optional int64 time_to_update_ms = 5; // Time between opening window and closing it optional int64 time_to_close_ms = 6; // Action button events occurred during this session repeated ActionButtonEvent action_button_events = 8; } // Details for Design Editor's Help Panel update message DesignEditorHelpPanelEvent { // What sort of action was performed optional HelpPanelAction action = 1; // Help panel type optional HelpPanelType help_panel_type = 2; // Time between opening window and closing it optional int64 time_to_close_ms = 3; enum HelpPanelAction { UNKNOWN_ACTION = 0; OPEN = 1; BUTTON_CLICKED = 2; CLOSE = 3; REACHED_END = 4; } enum HelpPanelType { UNKNOWN_PANEL_TYPE = 0; // Full default option FULL_ALL = 1; // Constraint layout specific panel CONSTRAINT_LAYOUT = 2; // Motion layout specific panel MOTION_LAYOUT = 3; // Nav editor specific panel NAV_EDITOR = 4; // Compose specific panel COMPOSE = 5; } } // Information about a session running lint -- in build, in IDE, etc message LintSession { // analysis type - build, ide batch, ide incremental optional AnalysisType analysis_type = 1; // performance metrics regarding this session optional LintPerformance lint_performance = 2; // lint issue id's (counts, severity, etc) repeated LintIssueId issue_ids = 3; // Client-side salted, sha256 of the root project path. // This exists to allow multiple instant run builds in one project by one // user to be correlated. // // The salt is rotated every 28 days, so it is not a permanent pseudonymous // identifier. It is anonymized and is unique per user, but has a 1-N // relation. optional string project_id = 4; // true if user is using baselines optional bool baseline_enabled = 5; // true if user is analyzing test sources optional bool including_test_sources = 6; // true if user is analyzing generated sources optional bool including_generated_sources = 7; // true if user is analyzing dependencies optional bool including_dependencies = 8; // true if the build is configured to abort on error optional bool abort_on_error = 9; // true if the build is configured to only check errors, not warnings optional bool ignore_warnings = 10; // true if the build is configured to promote all warnings to errors optional bool warnings_as_errors = 11; // The type of lint run that was performed: in IDE, from build, etc enum AnalysisType { // Other UNKNOWN_ANALYSIS_TYPE = 0; // Explicit lint (batch) execution, typically for a single variant // If reporting statistics for a complete multi-variant analysis (which // involves running lint repeatedly on each variant and then combining // the results) use BUILD_ALL_VARIANTS instead BUILD = 1; // Running lint implicitly as part of a release build, with a small // subset of checks enabled VITAL = 2; // Running a full lint analysis from the IDE (Analyze > Inspect Code) IDE_BATCH = 3; // Running lint on the fly in the editor for a single file IDE_FILE = 4; // Running the "lint" target on a project to compute results for all // variants and product flavors BUILD_ALL_VARIANTS = 5; } } // Information about a specific type of issue: frequency, severity, etc message LintIssueId { // The issue id is a unique identifier for this type of problem. // Examples of issue id's are "HardcodedText" and "NewApi". optional string issue_id = 1; // Number of occurrences of this issue in this session optional int64 count = 2; // Severity assigned to issues of this type by the user optional LintSeverity severity = 3; // The severity of the issue: fatal, or just a warning, etc enum LintSeverity { // Unknown UNKNOWN_SEVERITY = 0; // User did not change it from whatever lint set it to DEFAULT_SEVERITY = 1; // Fatal FATAL_SEVERITY = 2; // Error ERROR_SEVERITY = 3; // Warning WARNING_SEVERITY = 4; // Informational INFORMATIONAL_SEVERITY = 5; // Ignore (disabled/hidden) IGNORE_SEVERITY = 6; // Issue is enabled in general, but was suppressed with a local // annotation or comment SUPPRESSED_LOCALLY = 7; } } // Performance metrics about this lint analysis - duration, project size, etc message LintPerformance { // time to run lint in micro seconds optional int64 analysis_time_ms = 1; // number of files in project optional int64 file_count = 2; // number of gradle projects in session optional int64 module_count = 3; // number of Java source files in session optional int64 java_source_count = 4; // number of Kotlin source files in session optional int64 kotlin_source_count = 5; // number of resource files in session optional int64 resource_file_count = 6; // number of test soursce files in session. Note that test sources // also contribute to the other file counts above. optional int64 test_source_count = 7; // time to initialize lint projects optional int64 initialize_time_ms = 8; // time to register custom detectors optional int64 register_custom_detectors_time_ms = 9; // time to compute the applicable detectors optional int64 compute_detectors_time_ms = 10; // time to run the first round of checks optional int64 check_project_time_ms = 11; // time to run any extra phases optional int64 extra_phases_time_ms = 12; // time to report baseline issues optional int64 report_baseline_issues_time_ms = 13; // time to dispose projects optional int64 dispose_projects_time_ms = 14; // time to generate repors optional int64 report_generation_time_ms = 15; } // A quickfix for lint was invoked: data about issue type, fix type, etc message LintAction { // The issue id is a unique identifier for this type of problem. // Examples of issue id's are "HardcodedText" and "NewApi". optional string issue_id = 1; // Client-side salted, sha256 of the root project path. // This exists to allow multiple instant run builds in one project by one // user to be correlated. // // The salt is rotated every 28 days, so it is not a permanent pseudonymous // identifier. It is anonymized and is unique per user, but has a 1-N // relation. optional string project_id = 2; // A unique identifier for this quickfix. optional string fix_id = 3; // Feedback about this lint check if available optional LintFeedback lint_feedback = 4; // The user has provided feedback about this issue: problems, sentiment, etc enum LintFeedback { // Something else UNKNOWN_FEEDBACK = 0; // Lint incorrectly diagnosed the code FALSE_POSITIVE = 1; // The message is not clear UNCLEAR_MESSAGE = 2; // I liked this check, thanks LOVE_IT = 3; } } message RunEvent { enum Status { UNKNOWN_STATUS = 0; // The run finished successfully SUCCESS = 1; // The run finished with an error FAIL = 2; // The run was aborted mid-way ABORT = 3; } optional Status status = 1; // The executor used, from Executor::getId() optional string executor = 2; // Whether the app is debuggable optional bool debuggable = 3; // Whether instant run is enabled optional bool instant_run_enabled = 4; // Whether the apply changes button was used optional bool apply_changes = 5; // Whether the device dialog was open optional bool user_selected_target = 6; // Weather a device, like the emulator, was launched optional bool launched_devices = 7; // How many devices were targeted optional int32 device_count = 8; // True if this run event started mid-way optional bool partial = 9; // All the launch tasks executed during deploy repeated LaunchTaskDetail launch_task_detail = 10; // Timestamps in expected order // The run cycle begins optional int64 begin_timestamp_ms = 11; // The before-run tasks start (i.e. running gradle) optional int64 begin_before_run_tasks_timestamp_ms = 12; // End of the before-run tasks optional int64 end_before_run_tasks_timestamp_ms = 13; // Before launching, we must wait for devices optional int64 begin_wait_for_device_timestamp_ms = 14; // All devices are now ready optional int64 end_wait_for_device_timestamp_ms = 15; // Launch tasks start being executed optional int64 begin_launch_tasks_timestamp_ms = 16; // All launch tasks completed optional int64 end_launch_tasks_timestamp_ms = 17; // The run cycle finished optional int64 end_timestamp_ms = 18; // Whether the run configuration was set to deploy as instant optional bool deployed_as_instant = 19; // Whether the run configuration was set to deploy from app bundle optional bool deployed_from_bundle = 20; // Enum name representing deploy failure reason optional string deploy_failure_id = 21; // Whether the user configured AC to fall back to Run optional bool apply_changes_fallback_to_run = 22; // Whether the user configured ACC to fall back to Run optional bool apply_code_changes_fallback_to_run = 23; // Whether the user configured Run to disable overlay installs. optional bool run_always_install_with_pm = 24; enum AppComponent { UNKNOWN = 0; ACTIVITY = 1; WATCH_FACE = 2; TILE = 3; COMPLICATION = 4; } // Type of AppComponent user wants to run optional AppComponent app_component_type = 25; } message LaunchTaskDetail { // The id of the task optional string id = 1; // This task starts optional int64 start_timestamp_ms = 2; // This task ends optional int64 end_timestamp_ms = 3; // For the tasks that deploy artifacts, their details. repeated ArtifactDetail artifact = 4; // Thread ID this task is running on optional int32 tid = 5; // The completion status of the task. This value // is populated from several enums in code (using enum.code()) // interface, each LaunchTask has its own set of error codes with // some of them coming from device and being populated here. This is similar // to the RunEvent.deploy_failure_id optional string status = 6; } message StopEvent { // Whether the stop succeeded optional RunEvent.Status status = 1; // The executor used, from Executor::getId() optional string executor = 2; // Whether the app is debuggable optional bool debuggable = 3; // The stop cycle begins optional int64 begin_timestamp_ms = 4; // The stop cycle finished optional int64 end_timestamp_ms = 5; // Type of AppComponent user wants to stop optional RunEvent.AppComponent app_component_type = 6; } message StudioRunEvent { option deprecated = true; enum RunType { UNKNOWN = 0; RUN = 1; DEBUG = 2; PROFILE = 3; } enum SectionType { UNKNOWN_SECTION = 0; TOTAL = 1; STUDIO = 2; GRADLE = 3; EMULATOR = 4; DEPLOY = 5; } enum EventType { NONE = 0; START = 1; FINISH = 2; } // mirrors com.android.tools.idea.gradle.util.BuildMode enum BuildMode { UNKNOWN_BUILD_MODE = 0; /** Cleans the project.*/ CLEAN = 1; /** Compiles Java code and invokes Android build tools. */ ASSEMBLE = 2; /** Clean project and then {@link #ASSEMBLE}. */ REBUILD = 3; /** Compiles Java code, in selected modules, without invoking Android * build tools. */ COMPILE_JAVA = 4; /** Generate Java source only (e.g. R.java). */ SOURCE_GEN = 5; /** Build project with translation support. */ ASSEMBLE_TRANSLATE = 6; /** Build with the Gradle "bundle" task*/ BUNDLE = 7; /** Build APKS from the Gradle "bundle" task*/ APK_FROM_BUNDLE = 8; } enum DeployTask { UNKNOWN_TASK = 0; DEPLOY_APK = 1; DEPLOY_INSTANT_APP = 2; HOTSWAP = 3; SPLIT_APK_DEPLOY = 4; } // The run id is a UUID within a single run of Android Studio // for tracking a single run through various events optional string run_id = 1; // The type of "Run" Studio is performing optional RunType run_type = 2; // The section of the run this event is tracking optional SectionType section_type = 3; // The type of event: start or end or error optional EventType event_type = 4; // How long this section took, set when EventType is Finish or Failed optional uint32 duration_ms = 5; // Set if SectionType = Gradle AND EventType = Start optional BuildMode build_mode = 6; // Set if EventType = FINISH and SectionType = DEPLOY/TOTAL optional bool is_successful = 7; // Set if EventType = START and SectionType = DEPLOY optional uint32 artifact_count = 8; // Set if EventType = START and SectionType = DEPLOY optional DeployTask deploy_task = 9; // The number of features disabled by the user // Set if SectionType = DEPLOY and EventType = START and // BuildMode = BUNDLE/APK_FROM_BUNDLE optional uint32 disabled_dynamic_features_count = 11; // If this Run is using Instant Run, which may use HOTSWAP deploy task // but could also use other deploy tasks. // Set if SectionType = STUDIO and EventType = FINISH optional bool instant_run = 12; // If using SplitApkDeployTask and doing a partial install // Set if SectionType = DEPLOY and DeployTask = SPLIT_APK_DEPLOY optional bool patch_build = 13; // If using SplitApkDeployTask and doing a resource only swap that // does not restart the app // Set if SectionType = DEPLOY and DeployTask = SPLIT_APK_DEPLOY optional bool do_not_restart = 14; // If the app's debuggable flag is set to true // Set if SectionType = TOTAL and EventType = START optional bool debuggable = 15; // If the deploy target was picked by the user or auto selected by dialog // Set if SectionType = STUDIO and EventType = FINISH optional bool user_selected_target = 16; // Set if EventType = START and SectionType = DEPLOY // Details of each artifact being deployed. repeated ArtifactDetail artifact_details = 17; // Set when EventType = START and SectionType = TOTAL // If user clicked the Run button instead of Apply Changes optional bool force_coldswap = 18; // Set when EventType = START and SectionType = TOTAL // If Instant Run setting is enabled optional bool instant_run_enabled = 19; } message ArtifactDetail { // Size of the artifact in bytes. optional uint64 size = 1; } // Statistics regarding IntelliJ project sizes message IntellijProjectSizeStats { enum FileType { UNKNOWN_FILE_TYPE = 0; JAVA = 1; XML = 2; DOT_CLASS = 3; KOTLIN = 4; NATIVE = 5; } // Search scope to decide counted file set enum Scope { UNKNOWN_SCOPE = 0; // Whole project including both user sources and libraries ALL = 1; // All project libraries i.e. all jar files LIBRARY = 2; } optional FileType type = 1; optional Scope scope = 2; optional int32 count = 3; } // Statistics regarding tool windows message StudioToolWindowActionStats { enum EventType { UNKNOWN_EVENT_TYPE = 0; REGISTERED_EVENT_TYPE = 1; OPEN_EVENT_TYPE = 2; CLOSED_EVENT_TYPE = 3; } // "View Mode" in the UI enum ToolWindowType { // Default tool window type UNKNOWN_TOOL_WINDOW_TYPE = 0; // "Dock Pinned" in the UI DOCKED_TOOL_WINDOW_TYPE = 1; // "Float" in the UI FLOATING_TOOL_WINDOW_TYPE = 2; // "Undock" in the UI SLIDING_TOOL_WINDOW_TYPE = 3; // "Window" in the UI WINDOWED_TOOL_WINDOW_TYPE = 4; } // Id of the tool window // e.g. 'Assistant' optional string tool_window_id = 1; optional EventType event_type = 2; // "View Mode" in the UI optional ToolWindowType tool_window_type = 3; } // Statistics related to PSD message PSDEvent { // Available PSD generations enum PSDGeneration { PROJECT_STRUCTURE_DIALOG_GENERATION_UNKNOWN = 0; // Original PSD generation PROJECT_STRUCTURE_DIALOG_GENERATION_001 = 1; // "New PSD", use numbers just in case we get even a newer generation PROJECT_STRUCTURE_DIALOG_GENERATION_002 = 2; } // Available left Configurables enum PSDLeftConfigurable { PROJECT_STRUCTURE_DIALOG_LEFT_CONFIGURABLE_UNKNOWN = 0; // SDK PROJECT_STRUCTURE_DIALOG_LEFT_CONFIGURABLE_SDK = 1; // Project PROJECT_STRUCTURE_DIALOG_LEFT_CONFIGURABLE_PROJECT = 2; // Any service PROJECT_STRUCTURE_DIALOG_LEFT_CONFIGURABLE_SERVICE = 3; // Any module on version 1 PROJECT_STRUCTURE_DIALOG_LEFT_CONFIGURABLE_MODULE = 4; // Variables PROJECT_STRUCTURE_DIALOG_LEFT_CONFIGURABLE_VARIABLES = 100; // Modules on version 2 PROJECT_STRUCTURE_DIALOG_LEFT_CONFIGURABLE_MODULES = 101; // Dependencies PROJECT_STRUCTURE_DIALOG_LEFT_CONFIGURABLE_DEPENDENCIES = 102; // Build variants PROJECT_STRUCTURE_DIALOG_LEFT_CONFIGURABLE_BUILD_VARIANTS = 103; // Suggestions PROJECT_STRUCTURE_DIALOG_LEFT_CONFIGURABLE_SUGGESTIONS = 104; } // Top tabs that can be selected in the models enum PSDTopTab { PROJECT_STRUCTURE_DIALOG_TOP_TAB_UNKNOWN = 0; // Information PROJECT_STRUCTURE_DIALOG_TOP_TAB_INFORMATION = 1; // Properties PROJECT_STRUCTURE_DIALOG_TOP_TAB_PROPERTIES = 2; // Signing PROJECT_STRUCTURE_DIALOG_TOP_TAB_SIGNING = 3; // Flavors PROJECT_STRUCTURE_DIALOG_TOP_TAB_FLAVORS = 4; // Build types PROJECT_STRUCTURE_DIALOG_TOP_TAB_BUILD_TYPES = 5; // Dependencies PROJECT_STRUCTURE_DIALOG_TOP_TAB_DEPENDENCIES = 6; // Default Config PROJECT_STRUCTURE_DIALOG_TOP_TAB_DEFAULT_CONFIG = 100; // Signing Configs PROJECT_STRUCTURE_DIALOG_TOP_TAB_SIGNING_CONFIGS = 101; } // Fields that can be modified enum PSDField { PROJECT_STRUCTURE_DIALOG_FIELD_UNKNOWN = 0; // From SDK Location PROJECT_STRUCTURE_DIALOG_FIELD_SDK_LOCATION_ANDROID_SDK_LOCATION = 20; PROJECT_STRUCTURE_DIALOG_FIELD_SDK_LOCATION_JDK_LOCATION = 21; PROJECT_STRUCTURE_DIALOG_FIELD_SDK_LOCATION_ANDROID_NDK_LOCATION = 22; // From Project PROJECT_STRUCTURE_DIALOG_FIELD_PROJECT_GRADLE_VERSION = 40; PROJECT_STRUCTURE_DIALOG_FIELD_PROJECT_ANDROID_PLUGIN_VERSION = 41; PROJECT_STRUCTURE_DIALOG_FIELD_PROJECT_ANDROID_PLUGIN_REPOSITORY = 42; PROJECT_STRUCTURE_DIALOG_FIELD_PROJECT_DEFAULT_LIBRARY_REPOSITORY = 43; // From Module // From Information tab (there are no fields, only a message) // From Propertires tab PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_PROPERTIES_COMPILE_SDK_VERSION = 120; PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_PROPERTIES_BUILD_TOLS_VERSION = 121; PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_PROPERTIES_LIBRARY_REPOSITORY = 122; PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_PROPERTIES_IGNORE_ASSETS_PATTERN = 123; PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_PROPERTIES_INCREMENTAL_DEX = 124; PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_PROPERTIES_SOURCE_COMPATIBILITY = 125; PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_PROPERTIES_TARGET_COMPATIBILITY = 126; // From Signing tab PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_SIGNING_NAME = 140; PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_SIGNING_KEY_ALIAS = 141; PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_SIGNING_KEY_PASSWORD = 142; PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_SIGNING_STORE_FILE = 143; PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_SIGNING_STORE_PASSWORD = 144; // From Flavors tab PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_FLAVOR_NAME = 160; PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_FLAVOR_APPLICATION_ID = 161; PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_FLAVOR_PROGUARD_FILE = 162; PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_FLAVOR_SIGNING_CONFIG = 163; PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_FLAVOR_TARGET_SDK_VERSION = 164; PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_FLAVOR_TEST_INSTRUMENTATION_RUNNER = 165; PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_FLAVOR_TEST_APPLICATION_ID = 166; PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_FLAVOR_VERSION_CODE = 167; PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_FLAVOR_VERSION_NAME = 168; PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_FLAVOR_VERSION_NAME_SUFFIX = 169; // From Build Types tab PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_BUILDTYPE_NAME = 180; PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_BUILDTYPE_DEBUGGABLE = 181; PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_BUILDTYPE_JNI_DEBUGGABLE = 182; PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_BUILDTYPE_SIGNING_CONFIG = 183; PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_BUILDTYPE_RENDERSCRIPT_DEBUGGABLE = 184; PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_BUILDTYPE_RENDERSCRIPT_OPTIM_LEVEL = 185; PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_BUILDTYPE_MINIFY_ENABLED = 186; PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_BUILDTYPE_PSEUDO_LOCAL_ENABLED = 187; PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_BUILDTYPE_PROGUARD_FILE = 188; PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_BUILDTYPE_APPLICATION_ID_SUFFIX = 189; PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_BUILDTYPE_VERSION_NAME_SUFFIX = 190; PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_BUILDTYPE_ZIP_ALLIGN_ENABLED = 191; // From Dependencies tab PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_DEPENDENCIES_DEPENDENCY = 200; PROJECT_STRUCTURE_DIALOG_FIELD_MODULE_DEPENDENCIES_SCOPE = 201; // From Variables PROJECT_STRUCTURE_DIALOG_FIELD_VARIABLES_NAME = 300; PROJECT_STRUCTURE_DIALOG_FIELD_VARIABLES_VALUE = 301; // From Modules // From Default Config PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_DEFAULTCONFIG_APPLICATION_ID = 400; PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_DEFAULTCONFIG_TARGET_SDK_VERSION = 401; PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_DEFAULTCONFIG_MIN_SDK_VERSION = 402; PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_DEFAULTCONFIG_MAX_SDK_VERSION = 403; PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_DEFAULTCONFIG_SIGNING_CONFIG = 404; PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_DEFAULTCONFIG_PROGUARD_FILES = 405; PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_DEFAULTCONFIG_MANIFEST_PLACEHOLDERS = 406; PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_DEFAULTCONFIG_MULTI_DEX_ENABLED = 407; PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_DEFAULTCONFIG_TEST_INSTRUMENTATION_RUNNER_CLASS_NAME = 408; PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_DEFAULTCONFIG_TEST_INSTRUMENTATION_RUNNER_ARGUMENTS_KEY = 409; PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_DEFAULTCONFIG_TEST_INSTRUMENTATION_RUNNER_ARGUMENTS_VALUE = 410; PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_DEFAULTCONFIG_TEST_APPLICATION_ID = 411; PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_DEFAULTCONFIG_VERSION_CODE = 412; PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_DEFAULTCONFIG_VERSION_NAME = 413; // From Signing Configs PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_SIGNINGCONFIGS_NAME = 420; PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_SIGNINGCONFIGS_STORE_FILE = 421; PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_SIGNINGCONFIGS_STORE_PASSWORD = 422; PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_SIGNINGCONFIGS_KEY_ALIAS = 423; PROJECT_STRUCTURE_DIALOG_FIELD_MODULES_SIGNINGCONFIGS_KEY_PASSWORD = 424; // From Dependencies PROJECT_STRUCTURE_DIALOG_FIELD_DEPENDENCIES_REQUESTED_VERSION = 500; // From Build Variants // From Build Types PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_BUILDTYPES_DEBUGGABLE = 600; PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_BUILDTYPES_JNI_DEBUGGABLE = 601; PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_BUILDTYPES_RENDERSCRIPT_DEBUGGABLE = 602; PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_BUILDTYPES_RENDERSCRIPT_OPTIMIZATION_LEVEL = 603; PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_BUILDTYPES_SIGNING_CONFIG = 604; PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_BUILDTYPES_PROGUARD_FILES = 605; PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_BUILDTYPES_MANIFEST_PLACEHOLDERS = 606; PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_BUILDTYPES_MINIFY_ENABLED = 607; PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_BUILDTYPES_MULTI_DEX_ENABLED = 608; PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_BUILDTYPES_APPLICATIOND_ID_SUFFIX = 609; PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_BUILDTYPES_VERSION_NAME_SUFFIX = 610; PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_BUILDTYPES_ZIP_ALIGN_ENABLED = 611; // From Flavors PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_FLAVORS_DIMENSION = 620; PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_FLAVORS_APPLICATION_ID = 621; PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_FLAVORS_TARGET_SDK_VERSION = 622; PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_FLAVORS_MIN_SDK_VERSION = 623; PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_FLAVORS_MAX_SDK_VERSION = 624; PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_FLAVORS_SIGNING_CONFIG = 625; PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_FLAVORS_PROGUARD_FILES = 626; PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_FLAVORS_MANIFEST_PLACEHOLDERS = 627; PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_FLAVORS_MULTI_DEX_ENABLED = 628; PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_FLAVORS_TEST_INSTRUMENTATION_RUNNER_CLASS_NAME = 629; PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_FLAVORS_TEST_INSTRUMENTATION_RUNNER_ARGUMENTS_KEY = 630; PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_FLAVORS_TEST_INSTRUMENTATION_RUNNER_ARGUMENTS_VALUE = 631; PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_FLAVORS_TEST_APPLICATION_ID = 632; PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_FLAVORS_VERSION_CODE = 633; PROJECT_STRUCTURE_DIALOG_FIELD_BUILDVARIANTS_FLAVORS_VERSION_NAME = 634; // From Suggestions } // Repository usage statistics in PSD. message PSDRepositoryUsage { // Types of repositories that can be searched. enum PSDRepository { PROJECT_STRUCTURE_DIALOG_REPOSITORY_UNKNOWN = 0; PROJECT_STRUCTURE_DIALOG_REPOSITORY_GOOGLE = 1; PROJECT_STRUCTURE_DIALOG_REPOSITORY_MAVEN_CENTRAL = 2; PROJECT_STRUCTURE_DIALOG_REPOSITORY_JCENTER = 3; PROJECT_STRUCTURE_DIALOG_REPOSITORY_LOCAL = 4; PROJECT_STRUCTURE_DIALOG_REPOSITORY_OTHER = 5; } // The repository being accessed. optional PSDRepository repository = 1; // How long did it take to search the repository for a specific library // from the user's perspective. Some repositories like Google's one // requires multiple files to be fetched to complete the search. optional uint64 duration_ms = 2; } // What PSD generation is used? optional PSDGeneration generation = 1; // Left Configurable from which the event was created optional PSDLeftConfigurable left_configurable = 2; // Tab from which the event is generated optional PSDTopTab top_tab = 3; // How long was PSD open? optional uint64 duration_ms = 4; // List of fields that were modified repeated PSDField modified_fields = 5; // Repositories searched. repeated PSDRepositoryUsage repositories_searched = 6; } // UserSentiment describes how users feel about the product. message UserSentiment { // does the user feel positive or negative about the product at this time? optional SentimentState state = 1; // in our popup question the user can indicate a satisfaction level. optional SatisfactionLevel level = 2; enum SentimentState { UNKNOWN_SENTIMENT_STATE = 0; POSITIVE = 1; NEGATIVE = 2; // The user is feeling strong enough about the issue to start filing a bug. FILE_BUG = 3; // We popped up a question dialog on what the user's sentiment is instead of // them chosing to submit feedback themselves POPUP_QUESTION = 4; } enum SatisfactionLevel { UNKNOWN_SATISFACTION_LEVEL = 0; VERY_DISSATISFIED = 1; DISSATISFIED = 2; NEUTRAL = 3; SATISFIED = 4; VERY_SATISFIED = 5; } } // Detailed info about emulator boot up. message EmulatorBootInfo { enum BootStatus { UNKNOWN_STATUS = 0; BOOT_COMPLETED = 1; BOOT_FAILED = 2; } // Outcome of the emulator boot. optional BootStatus boot_status = 1; // How long it took to boot, either successfully or not. optional uint64 duration_ms = 2; } // Reports information about how users invoke available dialogs. message DialogStats { enum DialogState { UNKNOWN_DIALOG_STATE = 0; SHOW = 1; SELECT = 2; APPLY = 3; RESET = 4; CLOSE = 5; } // java class name (our code, not customer) of the Dialog reported on // e.g. ' com.intellij.openapi.options.newEditor.SettingsDialog' optional string dialog_class_name = 1; // State the dialog is transitioning to. optional DialogState state = 2; } // Data Binding metrics message DataBindingEvent { // The detailed type of this event. optional EventType type = 1; // The context in which this event was triggered. optional DataBindingContext context = 2; // Set if |type| is |DATA_BINDING_BUILD_EVENT| or |DATA_BINDING_SYNC_EVENT| optional DataBindingPollMetadata poll_metadata = 3; // Collects view binding layout count when |type| = |DATA_BINDING_BUILD_EVENT| optional ViewBindingPollMetadata view_binding_metadata = 4; // Type of data binding event enum EventType { UNKNOWN_TYPE = 0; /// Polling events // Triggered when a gradle sync happens DATA_BINDING_SYNC_EVENT = 1; // Triggered when a build happens DATA_BINDING_BUILD_EVENT = 2; /// User initiated events // Completion related events DATA_BINDING_COMPLETION_SUGGESTED = 101; DATA_BINDING_COMPLETION_ACCEPTED = 102; DATA_BINDING_COMPLETION_DECLINED = 103; } // Used to denote the context in which data binding events are triggered enum DataBindingContext { UNKNOWN_CONTEXT = 0; // Data binding expression of the format @{() -> obj.func()} DATA_BINDING_CONTEXT_LAMBDA = 1; // Data binding expression of the format @{obj::func} DATA_BINDING_CONTEXT_METHOD_REFERENCE = 2; // Data binding xml tags. For example tag. DATA_BINDING_CONTEXT_XML_TAG = 3; } // Data binding stats we actively poll for message DataBindingPollMetadata { /// These are set when the message is a |DATA_BINDING_SYNC_EVENT| // Whether user enabled data binding in gradle file. optional bool data_binding_enabled = 1; // # of data binding layout xmls optional uint32 layout_xml_count = 2; // # of data binding imports optional uint32 import_count = 3; // # of data binding variables optional uint32 variable_count = 4; // # of data binding expressions in the xml optional uint32 expression_count = 5; // # of data binding related errors generated by compiler optional uint32 error_count = 6; // # of modules in this project optional uint32 module_count = 7; // # of modules with data binding enabled optional uint32 data_binding_enabled_module_count = 8; // Observable type metrics optional ObservableMetrics observable_metrics = 101; // Binding adapter metrics optional BindingAdapterMetrics binding_adapter_metrics = 102; // Live Data metrics optional LiveDataMetrics live_data_metrics = 103; message ObservableMetrics { // # of observable primitives used optional uint32 primitive_count = 1; // # of observable collections optional uint32 collection_count = 2; // # of user defined observable objects optional uint32 observable_object_count = 3; } message BindingAdapterMetrics { // # of user defined adapters optional uint32 adapter_count = 1; // # of references to user defined adapters in layout xml optional uint32 adapter_reference_count = 2; } message LiveDataMetrics { // # of live data objects optional uint32 live_data_object_count = 1; } } // View binding stats we poll for message ViewBindingPollMetadata { // Whether user enabled view binding in gradle dsl. optional bool view_binding_enabled = 1; // Number of view binding layout xmls. optional uint32 layout_xml_count = 2; } } enum EditorFileType { UNKNOWN = 0; // Anything not explicitly in this list. JAVA = 1; KOTLIN = 2; XML = 3; // .xml, unless more specific info is available (see below). GROOVY = 4; PROPERTIES = 5; JSON = 6; KOTLIN_SCRIPT = 7; // .kts NATIVE = 8; // .c, .cpp, .h, etc. XML_MANIFEST = 9; // AndroidManifest.xml // XML resource types come from com.android.resources.ResourceFolderType. XML_RES_ANIM = 10; XML_RES_ANIMATOR = 11; XML_RES_COLOR = 12; XML_RES_DRAWABLE = 13; XML_RES_FONT = 14; XML_RES_INTERPOLATOR = 15; XML_RES_LAYOUT = 16; XML_RES_MENU = 17; XML_RES_MIPMAP = 18; XML_RES_NAVIGATION = 19; XML_RES_RAW = 20; XML_RES_TRANSITION = 21; XML_RES_VALUES = 22; XML_RES_XML = 23; } message TypingLatencyStats { message LatencyRecord { optional EditorFileType file_type = 1; // Total number of keys typed. optional int64 total_keys_typed = 2; // Sum of latency for all keys typed. optional int64 total_latency_ms = 3; // Max latency recorded for a single key typed. optional int64 max_latency_ms = 4; // Full latency histogram. optional Histogram histogram = 5; } // Per-file-type latency stats. repeated LatencyRecord latency_records = 1; } message EditorHighlightingStats { message Stats { optional EditorFileType file_type = 1; // Highlighting latencies in milliseconds. optional Histogram histogram = 2; } repeated Stats by_file_type = 1; } message EditorCompletionStats { message Stats { // File type (e.g., Java). optional EditorFileType file_type = 1; // Time in milliseconds to show initial completion popup. optional Histogram popup_latency = 2; // Time in milliseconds to fill *all* completion results. optional Histogram full_completion_latency = 3; // Time in milliseconds to insert a selected completion item. optional Histogram insertion_latency = 4; } // Completion stats for each file type. repeated Stats by_file_type = 1; } // Details of events relating to the Android Studio Patch Updater message StudioPatchUpdaterEvent { optional Kind kind = 1; // Information about the patch itself optional Patch patch = 2; // Details about patch updater issues presented to the user. optional IssueDialog issue_dialog = 3; // Options chosen by the user from the optional IssueDialogChoices issue_dialog_choices = 4; // The kind of event reported enum Kind { UNKNOWN_EVENT_KIND = 0; // Android Studio Patch Updater: Startup START = 1; // Android Studio Patch Updater: Display Patch details PATCH_DETAILS_SHOW = 2; // Android Studio Patch Updater: Show generic retry-able error dialog RETRYABLE_ERROR_DIALOG_SHOW = 3; // Android Studio Patch Updater: Show generic fatal error dialog FATAL_ERROR_DIALOG_SHOW = 4; // Android Studio Patch Updater: Show (potentially recoverable) validation // issue dialog VALIDATION_PROBLEMS_DIALOG_SHOW = 5; // Android Studio Patch Updater: Validation issue dialog was closed. VALIDATION_PROBLEMS_DIALOG_CLOSE = 6; // Android Studio Patch Updater: Enter phase of the update process PHASE_UNKNOWN = 7; PHASE_EXTRACTING_PATCH_FILES = 8; PHASE_VALIDATING_INSTALLATION = 9; PHASE_BACKING_UP_FILES = 10; PHASE_PREPARING_UPDATE = 11; PHASE_APPLYING_PATCH = 12; PHASE_REVERTING = 13; PHASE_CLEANING_UP = 14; // Android Studio Patch Updater: Successful exit EXIT_OK = 15; // Android Studio Patch Updater: Exit with controlled abort EXIT_ABORT = 16; // Android Studio Patch Updater: Exit with unexpected exception EXIT_EXCEPTION = 17; } // Information about the patch itself message Patch { // The version of studio patching from, e.g. '183.5153.38.35.5240547' optional string studio_version_from = 1; // The version of studio patching to, e.g. '183.5153.38.35.5256920' optional string studio_version_to = 2; } // The options available for the user to address the // patch updater errors. enum ValidationOption { UNKNOWN_VALIDATION_OPTION = 0; NONE = 1; IGNORE = 2; KEEP = 3; REPLACE = 4; DELETE = 5; KILL_PROCESS = 6; } // Details about patch updater issues presented to the user. message IssueDialog { // The issues presented in the table to the user, // which may or may not be actionable. repeated Issue issue = 1; message Issue { // The type of issue presented enum Kind { UNKNOWN_KIND = 0; INFO = 1; CONFLICT = 2; ERROR = 3; } // The action the updater was attempting to perform enum Action { UNKNOWN_ACTION = 0; CREATE = 1; UPDATE = 2; DELETE = 3; NO_ACTION = 4; VALIDATE = 5; } // The type of issue presented optional Kind kind = 1; // The action that the patcher was attempting to perform optional Action action = 2; // The options available to the user repeated ValidationOption presented_option = 3; } } // The resolution choices chosen by the user from the issue dialog message IssueDialogChoices { repeated Choice choice = 1; // A single choice made by the user message Choice { optional ValidationOption chosen_option = 1; } } } // Event related to the resource manager message ResourceManagerEvent { optional Kind kind = 1; optional ResourceType resource_type = 2; enum Kind { UNKNOWN_EVENT_KIND = 0; // Resource Manager tool window is openend TOOL_WINDOW_OPEN = 1; // Resource Manager opened as Resource Picker Dialog RESOURCE_PICKER_DIALOG_OPEN = 17; // Asset added pressing the "Import Drawable" action ASSET_ADDED_VIA_BUTTON = 2; // Asset added using Drag and Drop on the resource manager ASSET_ADDED_VIA_DND = 3; // User open the view showing the different version of a resource DETAIL_VIEW_OPENED = 4; // A resource has been opened via the resource manager ASSET_OPENED = 5; // List mode has been changed to grid or list LIST_MODE_CHANGED = 6; // User shows or hides dependent module assets DEPENDENT_MODULES_SHOWN = 18; DEPENDENT_MODULES_HIDDEN = 19; // User shows or hides libraries assets LIBRARIES_SHOWN = 7; LIBRARIES_HIDDEN = 8; // User shows or hides framework assets FRAMEWORK_SHOWN = 20; FRAMEWORK_HIDDEN = 21; // User shows or hides theme attributes assets THEME_ATTR_SHOWN = 22; THEME_ATTR_HIDDEN = 23; // User enables a filter by resource type (E.g: Filter 'vector' Drawables) ENABLE_FILTER_BY_TYPE = 24; // A density indicator was present in the imported file DENSITY_INFERED = 9; // Drop events DROP_ON_XML_BLANK_SPACE = 10; DROP_ON_XML_TAG = 11; DROP_ON_XML_ATTRIBUTE = 12; DROP_ON_LAYOUT_VIEW = 13; DROP_ON_LAYOUT_VIEWGROUP = 14; // Default drop type when the target does not recognize the resource url // type DROP_AS_TEXT = 15; // When user tries to import more resources than the supported number IMPORT_LIMIT_REACHED = 16; // When the user manually refreshes the preview of a resource REFRESH_RES_PREVIEW = 25; // When the user manually refreshes all previews whithin a ResourceType REFRESH_ALL_RES_TYPE_PREVIEWS = 26; } // The type of the resource. It could be an Android type (e.g drawable) // or an external type (e.g SVG, PNG) enum ResourceType { UNKNOWN = 0; DRAWABLE = 1; COLOR = 2; LAYOUT = 3; STRING = 4; FONT = 5; SVG = 6; RASTER = 7; NAVIGATION = 8; MENU = 9; // Animation related resources (animator, interpolator, transition, etc.) ANIMATION = 10; STYLE = 11; // Any other value-like resource (plurals, integers, etc.) VALUE = 12; XML = 13; } } message IdePluginInfo { // The set of plugins enabled for the current session. repeated IdePlugin plugins = 1; } message IdePlugin { // Unique ID (e.g., "org.jetbrains.kotlin"). optional string id = 1; // Version (e.g., "1.3.21-release-Studio3.4-1"). optional string version = 2; // Whether this plugin (in its current version) came bundled with Studio. optional bool bundled = 3; } // Information about the status of Windows Defender, which can have a // significant impact on build speed. We check whether realtime scanning is // enabled, and if so, whether several important directories are excluded from // scanning. This message is sent once per project, since the project root is // one such directory. message WindowsDefenderStatus { // Overall status of Windows Defender optional Status status = 1; // Whether the project root directory is excluded from scanning. optional bool project_dir_excluded = 2; // Status of Windows Defender - either scanning is disabled, or all, some, or // none of the important directories are excluded, or there was some problem // determining the status. enum Status { UNKNOWN_STATUS = 0; SCANNING_DISABLED = 1; ALL_EXCLUDED = 2; SOME_EXCLUDED = 3; NONE_EXCLUDED = 4; } } // Event for memory settings configuration and recommendation message MemorySettingsEvent { // Kind of the event. optional EventKind kind = 1; // Current memory settings. optional MemorySettings current = 2; // Recommended memory settings. optional MemorySettings recommended = 3; // New memory settings changed by users (may or may not be saved yet). optional MemorySettings changed = 4; enum EventKind { UNKNOWN = 0; // Configuration dialog shown. SHOW_CONFIG_DIALOG = 1; // Users change the settings and save. SETTINGS_CHANGE_SAVED = 2; // Users change the settings but do not save. SETTINGS_CHANGE_CANCELLED = 3; // Session uses the non-default recommended heap size. NON_DEFAULT_RECOMMENDATION_USED = 4; // Users click the "Apply recommendation" button in the memory panel. APPLY_RECOMMENDATION_BUTTON_CLICKED = 5; // Recommendation notification shown. SHOW_RECOMMENDATION = 6; // Users click "Save and Restart" from recommendation notification. SAVE_AND_RESTART = 7; // Users click "Configure" from recommendation notification. CONFIGURE = 8; // Users click "Remind me later" from recommendation notification. REMIND_ME_LATER = 9; // Users click "Do not ask again" from recommendation notification. DO_NOT_ASK = 10; } } message MemorySettings { optional int32 ide_xmx = 1; optional int32 gradle_daemon_xmx = 2; optional int32 kotlin_daemon_xmx = 3; } // Event related to studion update flow message StudioUpdateFlowEvent { optional Kind event_kind = 1; // Version we are updating to, e.g. "182.5107.16.33.5314842" optional string studio_new_version = 2; // Set when event_kind = DIALOG_OPEN optional DialogTrigger dialog_trigger = 3; // Set when event_kind = DIALOG_CLICK_ACTION // Some extra buttons can be added to the update dialog with // the build xml entry. The action is to open provided link in the browser. // Typically it is 'Release notes' button, but since it is not fixed, // seems good to send the name of the action. // This text comes as part of an update information xml from Google // and does not contain any end user information. optional string action_name = 4; enum Kind { UNKNOWN_KIND = 0; NOTIFICATION_SHOWN = 1; // User clicked on the notification update action NOTIFICATION_UPDATE_LINK_CLICKED = 2; // Update dialog was opened DIALOG_OPEN = 3; // Dialog button clicks DIALOG_CLICK_UPDATE = 4; DIALOG_CLICK_IGNORE = 5; DIALOG_CLICK_LATER = 6; // Other non-fixed actions (typically 'Release notes' link) DIALOG_CLICK_ACTION = 7; // Patch download result PATCH_DOWNLOAD_SUCCESS = 8; PATCH_DOWNLOAD_FAILURE = 9; } // What triggers update dialog to open enum DialogTrigger { UNKNOWN_DIALOG_TRIGER = 0; // User clicks check for updates action to open dialog MANUAL = 1; // User clicked on the notification update action to open dialog NOTIFICATION = 2; } } // Contains information on what we show on the build output window when the // build fails. message BuildErrorMessage { enum ErrorType { UNKNOWN_ERROR_TYPE = 0; JAVA_COMPILER = 1; KOTLIN_COMPILER = 2; CLANG = 3; CMAKE = 4; DATA_BINDING = 5; XML_PARSER = 6; AAPT = 7; D8 = 8; R8 = 9; RESOURCE_AND_ASSET_MERGER = 10; GENERAL_ANDROID_GRADLE_PLUGIN = 11; } enum FileType { UNKNOWN_FILE_TYPE = 0; // The file location is pointing to a build generated file. BUILD_GENERATED_FILE = 1; // The file location is pointing to a project file. PROJECT_FILE = 2; } // The tool produced the error. optional ErrorType error_shown_type = 1; // Whether the file location was parsed and shown successfully. optional bool file_location_included = 2; // The included file type. optional FileType file_included_type = 3; // Whether the line location in file was parsed and shown successfully. optional bool line_location_included = 4; } // Statistics for what we show on the build output window. message BuildOutputWindowStats { repeated BuildErrorMessage build_error_messages = 1; } // Statistics for Android Gradle Plugin DSL methods that are invoked in // build scripts or by other Gradle plugins. message GradlePluginDslUsageStats { // A data point for each DSL method the user invokes. repeated DslElementUse dsl_element_use = 1; // Statistics for an individual Android Gradle Plugin DSL method message DslElementUse { // The DSL method called in the build script or by another Gradle Plugin // This is an enum in android git: // tools/analytics-library/protos/src/main/proto/analytics_enums.proto // DslElementType optional int32 type = 1; // The number of times this method is called within this multi-project build optional int32 count = 2; } } // Information about how long DefaultActivityLocator blocked on getting // a list of activities from the merged manifest. message DefaultActivityLocatorStats { // Whether getting information from the merged manifest blocked the UI thread. optional bool blocks_ui_thread = 1; // Whether we're leveraging an index to determine the module's activities. optional bool index_based = 2; // Whether DefaultActivityLocator used a potentially stale manifest (as // opposed to blocking on a fresh view of the merged manifest). optional bool used_potentially_stale_manifest = 3; // How long it took us to obtain the list of activiteis // from the merged manifest. optional uint64 latency_ms = 4; } // Details for motion layout editor events message MotionLayoutEditorEvent { // List of event types available in motion layout editor enum MotionLayoutEditorEventType { UNKNOWN_EVENT_TYPE = 0; CREATE_CONSTRAINT = 1; CREATE_TRANSITION = 2; CREATE_ONCLICK = 3; TOGGLE_LAYOUT = 4; CREATE_KEY_POSITION = 5; CREATE_KEY_ATTRIBUTES = 6; CREATE_KEY_CYCLE = 7; CREATE_KEY_TRIGGER = 8; CREATE_KEY_TIME_CYCLE = 9; CONVERT_TO_CONSTRAINT = 10; CONVERT_TO_SECTIONED_CONSTRAINT = 11; CLEAR_CONSTRAINT = 12; SHOW_TIMELINE = 13; SHOW_CONSTRAINTSET = 14; SHOW_LAYOUT = 15; CONSTRAINT_TABLE_SELECT = 16; LAYOUT_TABLE_SELECT = 17; TIMELINE_TABLE_SELECT = 18; MOTION_PLAY = 19; MOTION_SPEED = 20; MOTION_PAUSE = 21; MOTION_DIRETION_TOGGLE = 22; } // Type of event optional MotionLayoutEditorEventType type = 1; } // Details for Validation Tool events // Note: Validation Tool was called multi view or visualization tool. message MultiViewEvent { // List of event types available in Validation Tool enum MultiViewEventType { UNKNOWN_EVENT_TYPE = 0; OPEN_PIXEL_DEVICES = 1; OPEN_PROJECT_LOCALES = 2; OPEN_CUSTOM_CONFIGURATION_SETS = 3; OPEN_COLOR_BLIND_MODE = 4; OPEN_LARGE_FONT = 5; OPEN_LARGE_DISPLAY = 6; // Select wear device category in Validation Tool OPEN_WEAR_DEVICES = 7; OPEN_REFERENCE_DEVICES = 8; // Select custom category which is created by user. OPEN_USER_DEFINED_CUSTOM_SETS = 9; } // Mode of the editor associated to this Validation Tool enum AssociatedSplitEditorMode { UNKNOWN_MODE = 0; TEXT_MODE = 1; SPLIT_MODE = 2; VISUAL_MODE = 3; } // Type of event optional MultiViewEventType type = 1; // The mode of the editor to the Validation Tool window optional AssociatedSplitEditorMode associated_split_editor_mode = 2; } // Details for Compose animation tooling event message ComposeAnimationToolingEvent { enum ComposeAnimationToolingEventType { UNKNOWN_EVENT_TYPE = 0; OPEN_ANIMATION_INSPECTOR = 1; CLOSE_ANIMATION_INSPECTOR = 2; // Track when the animation inspector is available for Compose previews. ANIMATION_INSPECTOR_AVAILABLE = 3; TRIGGER_PLAY_ACTION = 4; TRIGGER_PAUSE_ACTION = 5; ENABLE_LOOP_ACTION = 6; DISABLE_LOOP_ACTION = 7; CHANGE_ANIMATION_SPEED = 8; TRIGGER_JUMP_TO_START_ACTION = 9; TRIGGER_JUMP_TO_END_ACTION = 10; CHANGE_START_STATE = 11; CHANGE_END_STATE = 12; TRIGGER_SWAP_STATES_ACTION = 13; CLICK_ANIMATION_INSPECTOR_TIMELINE = 14; DRAG_ANIMATION_INSPECTOR_TIMELINE = 15; EXPAND_ANIMATION_CARD = 16; COLLAPSE_ANIMATION_CARD = 17; OPEN_ANIMATION_IN_TAB = 18; CLOSE_ANIMATION_TAB = 19; LOCK_ANIMATION = 20; UNLOCK_ANIMATION = 21; RESET_TIMELINE = 22; DRAG_TIMELINE_LINE = 23; } // Type of event. optional ComposeAnimationToolingEventType type = 1; // Multiplier of the animation speed (e.g. 1.5x, 0.25x). // Set when type is CHANGE_ANIMATION_SPEED. optional float animation_speed_multiplier = 2; } // Details for Compose MultiPreview event message ComposeMultiPreviewEvent { // One for each new or modified node in the MultiPreview graph, in terms of // annotation relations, detected when the process of finding preview // elements is executed in a file. repeated ComposeMultiPreviewNodeInfo multi_preview_nodes = 1; // Information about MultiPreview, in particular as information about a node // in the directed graph formed by a Composable function, and its related // Preview and MultiPreview annotations. message ComposeMultiPreviewNodeInfo { enum NodeType { UNKNOWN_NODE_TYPE = 0; ROOT_COMPOSABLE_FUNCTION_NODE = 1; MULTIPREVIEW_NODE = 2; PREVIEW_NODE = 3; } // Type of node in the MultiPreview graph. optional NodeType node_type = 1; // Anonymized id for the Composable node that is the root of this graph. optional int64 anonymized_composable_id = 2; // Number of direct childs which are Preview annotations. optional int32 preview_childs_count = 3; // Number of direct childs which are MultiPreview annotations. optional int32 multi_preview_childs_count = 4; // Number of nodes in the subtree rooted at this node and defined by the // graph traversal, which are Preview annotations. optional int32 subtree_previews_count = 5; // Number of nodes in the subtree rooted at this node and defined by the // graph traversal, which are MultiPreview annotations. optional int32 subtree_multi_previews_count = 6; // Number of nodes in the subtree rooted at this node and defined by the // graph traversal, which are not important for MultiPreview. optional int32 subtree_useless_nodes_count = 7; // Length of the path traversed from the root Composable to this node. optional int32 depth_level = 8; } } // Details for Compose deploy event message ComposeDeployEvent { enum ComposeDeployEventType { UNKNOWN_EVENT_TYPE = 0; DEPLOY_FROM_GUTTER = 1; DEPLOY_FROM_TOOLBAR = 2; } // Type of event. optional ComposeDeployEventType type = 1; } // Details for Compose sample event message ComposeSampleEvent { enum ComposeSampleEventType { UNKNOWN_EVENT_TYPE = 0; // Sample project is opened (package name matches) OPEN = 1; } // Type of event optional ComposeSampleEventType type = 1; } // Details for import sample event message ImportSampleEvent { // The ID of the sample imported. This is not user content, it will always be // a string generated by us since we publish the samples to the GitHub // repositories optional string import_sample_id = 1; } // The plugin identifier used in build attribution message BuildAttributionPluginIdentifier { enum PluginType { UNKNOWN_TYPE = 0; BUILD_SCRIPT = 1; // Deprecated, use OTHER_PLUGIN instead BINARY_PLUGIN = 2 [deprecated = true]; BUILD_SRC = 3; OTHER_PLUGIN = 4; } // Either a binary plugin or a build script plugin optional PluginType type = 1; // The display name of the plugin, that is the string used in the build script // when calling apply. ex: com.android.application, kotlin-android // Should not be set in the case of a build script optional string plugin_display_name = 2; // The class name of the gradle plugin. // ex: org.jetbrains.kotlin.gradle.plugin.KotlinAndroidPluginWrapper optional string plugin_class_name = 3; } // The task identifier used in build attribution message BuildAttribuitionTaskIdentifier { // The class name of the task // ex: MergeResources, JavaPreCompileTask optional string task_class_name = 1; // The plugin that registered this task optional BuildAttributionPluginIdentifier origin_plugin = 2; } // Data about tasks that always run message AlwaysRunTasksAnalyzerData { message AlwaysRunTask { enum AlwaysRunReason { UNKNOWN_REASON = 0; NO_OUTPUTS_WITHOUT_ACTIONS = 1; NO_OUTPUTS_WITH_ACTIONS = 2; UP_TO_DATE_WHEN_FALSE = 3; } // Reason the task is always running optional AlwaysRunReason reason = 1; // The origin plugin of the always running task // Deprecated, use task_identifier instead optional BuildAttributionPluginIdentifier plugin_identifier = 2 [deprecated = true]; // The always running task identifier optional BuildAttribuitionTaskIdentifier task_identifier = 3; } // The always running tasks detected by the analyzer repeated AlwaysRunTask always_run_tasks = 1; } // Data about non incremental annotation processors message AnnotationProcessorsAnalyzerData { message NonIncrementalAnnotationProcessor { // The duration of applying the annotation processor optional int64 compilation_duration_ms = 1; // The class name of the annotation processor. // ex: dagger.internal.codegen.ComponentProcessor, // com.google.auto.value.processor.AutoValueProcessor optional string annotation_processor_class_name = 2; } // The non incremental annotation processors detected by the analyzer repeated NonIncrementalAnnotationProcessor non_incremental_annotation_processors = 1; } // Data about the critical path of the build message CriticalPathAnalyzerData { message PluginBuildData { // Sum of build duration of tasks on the critical path that this plugin // created optional int64 build_duration_ms = 1; // The plugin identifier optional BuildAttributionPluginIdentifier plugin_identifier = 2; } // The total duration of the critical path optional int64 critical_path_duration_ms = 1; // The number of tasks on the critical path optional int32 number_of_tasks_on_critical_path = 2; // The critical path grouped by plugin contribution repeated PluginBuildData plugins_critical_path = 3; // The total duration of the tasks determining build duration optional int64 tasks_determining_build_duration_ms = 4; // The number of tasks determining build duration optional int32 number_of_tasks_determining_build_duration = 5; } // Data about project configuration phase message ProjectConfigurationAnalyzerData { // Configuration data for a plugin message PluginConfigurationData { // The time it took to configure the plugin optional int64 plugin_configuration_time_ms = 1; // The plugin identifier optional BuildAttributionPluginIdentifier plugin_identifier = 2; } message ConfigurationStep { enum StepType { UNKNOWN_STEP = 0; NOTIFYING_BUILD_LISTENERS = 1; RESOLVING_DEPENDENCIES = 2; COMPILING_BUILD_SCRIPTS = 3; EXECUTING_BUILD_SCRIPT_BLOCKS = 4; OTHER = 5; } // The type of the configuration step optional StepType type = 1; // Configuration step duration optional int64 configuration_time_ms = 2; } // Configuration data for a subproject message ProjectConfigurationData { // The total configuration time for the subproject optional int64 configuration_time_ms = 1; // The plugin configuration data for the subproject repeated PluginConfigurationData plugins_configuration_data = 2; // Project configuration steps that are not plugins configuration repeated ConfigurationStep configuration_steps = 3; } // The configuration data for all subprojects configured during the build repeated ProjectConfigurationData project_configuration_data = 1; // The configuration data summed for all subproject configured during the // build optional ProjectConfigurationData overall_configuration_data = 2; } // Data about misconfigured tasks message TasksConfigurationIssuesAnalyzerData { // Set of tasks that declare the same output message TasksSharingOutputData { // Plugins that created the tasks declaring the same output // Deprecated, use tasks_sharing_output instead repeated BuildAttributionPluginIdentifier plugins_created_sharing_output_tasks = 1 [deprecated = true]; // The tasks that are sharing the same output repeated BuildAttribuitionTaskIdentifier tasks_sharing_output = 2; } // The sets of tasks that declare the same output as detected by the analyzer repeated TasksSharingOutputData tasks_sharing_output_data = 1; } // Data about configuration cache compatibility message ConfigurationCacheCompatibilityData { enum CompatibilityState { UNKNOWN_STATE = 0; // Configuration cache property not set, AGP version is incompatible AGP_NOT_COMPATIBLE = 1; AGP_DOES_NOT_PROVIDE_PLUGINS_DATA = 2; // CC property not set, some plugins detected as incompatible INCOMPATIBLE_PLUGINS_DETECTED = 3; // CC property not set, no plugins detected as incompatible // but some unknown plugins or buildSrc code might be incompatible INCOMPATIBLE_PLUGINS_NOT_DETECTED = 4; // CC property set to true CONFIGURATION_CACHE_TURNED_ON = 5; CONFIGURATION_CACHE_TRIAL_FLOW_BUILD = 6; // CC property set to false CONFIGURATION_CACHE_TURNED_OFF = 7; } optional CompatibilityState compatibility_state = 1; // Non empty only if INCOMPATIBLE_PLUGINS_DETECTED state. repeated BuildAttributionPluginIdentifier incompatible_plugins = 2; } // Data about jetifier usage in the project message JetifierUsageData { enum JetifierUsageState { UNKNOWN_STATE = 0; JETIFIER_NOT_USED = 1; // Jetifier is used in project // but no existing checkJetifier task results found JETIFIER_USED_CHECK_REQUIRED = 2; JETIFIER_CAN_BE_REMOVED = 3; JETIFIER_REQUIRED_FOR_LIBRARIES = 4; } optional JetifierUsageState jetifier_usage_state = 1; // Size of the libraries list found by checkJetifier task optional int32 number_of_libraries_require_jetifier = 2; // True if this build had ran checkJetifier task optional bool check_jetifier_task_build = 3; } message BuildDownloadsAnalysisData { message RepositoryStats { enum RepositoryType { UNKNOWN_REPOSITORY = 0; GOOGLE = 1; MAVEN_CENTRAL = 2; JCENTER = 3; OTHER_REPOSITORY = 4; } // Type of the repository, if it is one of the known ones. optional RepositoryType repository_type = 1; optional int32 success_requests_count = 2; optional int64 success_requests_total_time_ms = 3; optional int64 success_requests_total_bytes_downloaded = 4; optional int32 failed_requests_count = 5; optional int64 failed_requests_total_time_ms = 6; optional int64 failed_requests_total_bytes_downloaded = 7; // Missed request is when file was not found in the repository. // These are not marked as failed but data downloaded is 0 bytes. optional int32 missed_requests_count = 8; optional int64 missed_requests_total_time_ms = 9; } // Aggregated result per repository requested for file downloads. repeated RepositoryStats repositories = 1; } // Data about build attribution analyzers message BuildAttributionAnalyzersData { // Total build time in microseconds optional int64 total_build_time_ms = 1; // Data from the always running tasks analyzer optional AlwaysRunTasksAnalyzerData always_run_tasks_analyzer_data = 2; // Data from the annotation processors analyzer optional AnnotationProcessorsAnalyzerData annotation_processors_analyzer_data = 3; // Data from the critical path analyzer optional CriticalPathAnalyzerData critical_path_analyzer_data = 4; // Data from the project configuration analyzer optional ProjectConfigurationAnalyzerData project_configuration_analyzer_data = 5; // Data from the tasks configuration issues analyzer optional TasksConfigurationIssuesAnalyzerData tasks_configuration_issues_analyzer_data = 6; // Data from configuration caching compatibility analyzer optional ConfigurationCacheCompatibilityData configuration_cache_compatibility_data = 7; // Data from jetifier usage analyzer optional JetifierUsageData jetifier_usage_data = 8; // Data from downloads analyzer optional BuildDownloadsAnalysisData downloads_analysis_data = 9; } // Data about build attribution performance message BuildAttributionPerformanceStats { // The duration it takes from when the build is finished, until all build // attribution analyzers finish optional int64 post_build_analysis_duration_ms = 1; // The duration it takes to build the UI optional int64 ui_creation_duration_ms = 2; // The latency introduced by the tooling API events (the duration from // when the build is finished until when the build finished event is received) optional int64 tooling_api_build_finished_event_latency_ms = 3; } // Stats about build attribution message BuildAttributionStats { enum BuildAnalysisStatus { UNKNOWN_STATUS = 0; // Build successful, analysis successful. SUCCESS = 1; // Build failed, no analysis done. BUILD_FAILURE = 2; // Build analyzer failed during events processing or post-processing. ANALYSIS_FAILURE = 3; } enum BuildType { UNKNOWN_BUILD_TYPE = 0; REGULAR_BUILD = 1; // Build triggered from Build Analyzer configuration cache warning page. CONFIGURATION_CACHE_TRIAL_FLOW_BUILD = 2; // Build triggered from Build Analyzer jetifier warning page. CHECK_JETIFIER_BUILD = 3; } // Data from build attribution analyzers optional BuildAttributionAnalyzersData build_attribution_analyzers_data = 1; // Stats about the performance of build attribution optional BuildAttributionPerformanceStats build_attribution_performance_stats = 2; // The session id is a UUID tracking a single build report generated // to associate build attribution events together optional string build_attribution_report_session_id = 3; optional BuildAnalysisStatus build_analysis_status = 4; optional BuildType build_type = 5; } // Tracks user interaction with build attribution UI. message BuildAttributionUiEvent { enum EventType { UNKNOWN_TYPE = 0; // New build attribution tab created. TAB_CREATED = 1; // Tab was opened by the user. TAB_OPENED_WITH_TAB_CLICK = 2; TAB_OPENED_WITH_BUILD_OUTPUT_LINK = 3; // User closed the tab completely. TAB_CLOSED = 4; // User switched to another tab (e.g. back to build or sync). TAB_HIDDEN = 5; // New content is shown in existing build attribution tab. CONTENT_REPLACED = 6; // User clicked 'more info' link on one of the report pages. HELP_LINK_CLICKED = 7; // User switched to another page of the report. PAGE_CHANGE_TREE_CLICK = 8; PAGE_CHANGE_TREE_KEYBOARD = 9; PAGE_CHANGE_LINK_CLICK = 10; // User clicked on issue report link. GENERATE_REPORT_LINK_CLICKED = 11; // User used copy button from report dialog. REPORT_DIALOG_TEXT_COPY_CLICKED = 12; // User closed report dialog. REPORT_DIALOG_CLOSED = 13; // Sent to mark the moment when current build info becomes inaccessible. // It can be as a result of a new build or closing the project. USAGE_SESSION_OVER = 14; // Tab was opened using button in What's New Assistant. TAB_OPENED_WITH_WNA_BUTTON = 15; // View changed using data combo box. DATA_VIEW_COMBO_SELECTED = 16; // Data grouping changed using grouping control. GROUPING_CHANGED = 17; // Open memory settings button clicked. OPEN_MEMORY_SETTINGS_BUTTON_CLICKED = 18; // Applied filter state change on tasks or warnings page. FILTER_APPLIED = 19; CONFIGURE_GC_WARNING_SUSPEND_CLICKED = 20; UPGRADE_AGP_BUTTON_CLICKED = 21; RERUN_BUILD_WITH_CONFIGURATION_CACHE_CLICKED = 22; TURN_ON_CONFIGURATION_CACHE_IN_PROPERTIES_LINK_CLICKED = 23; // Update plugin button on configuration cache warnings. UPDATE_PLUGIN_BUTTON_CLICKED = 24; RUN_CHECK_JETIFIER_TASK_CLICKED = 25; REMOVE_JETIFIER_PROPERTY_CLICKED = 26; // Use of an action on jetifier warning page that searches for where // the problematic library is defined in build files. FIND_LIBRARY_DECLARATION_CLICKED = 27; // Sent when tool window balloon is shown notifying about warnings. TOOL_WINDOW_BALLOON_SHOWN = 28; TOOL_WINDOW_BALLOON_DETAILS_LINK_CLICKED = 29; TOOL_WINDOW_BALLOON_DONT_SHOW_AGAIN_LINK_CLICKED = 30; } message Page { // All different page types shown in build attribution report. enum PageType { UNKNOWN_PAGE = 0; BUILD_SUMMARY = 1; CRITICAL_PATH_TASKS_ROOT = 2; CRITICAL_PATH_TASK_PAGE = 3; PLUGINS_ROOT = 4; PLUGIN_PAGE = 5; PLUGIN_CRITICAL_PATH_TASKS_ROOT = 6; PLUGIN_CRITICAL_PATH_TASK_PAGE = 7; PLUGIN_TASK_SETUP_ISSUE_ROOT = 8; PLUGIN_TASK_SETUP_ISSUE_PAGE = 9; PLUGIN_ALWAYS_RUN_ISSUE_ROOT = 10; PLUGIN_ALWAYS_RUN_NO_OUTPUTS_PAGE = 11; PLUGIN_ALWAYS_RUN_UP_TO_DATE_OVERRIDE_PAGE = 12; TASK_SETUP_ISSUE_ROOT = 13; TASK_SETUP_ISSUE_PAGE = 14; ALWAYS_RUN_ISSUE_ROOT = 15; ALWAYS_RUN_NO_OUTPUTS_PAGE = 16; ALWAYS_RUN_UP_TO_DATE_OVERRIDE_PAGE = 17; ANNOTATION_PROCESSORS_ROOT = 18; ANNOTATION_PROCESSOR_PAGE = 19; CONFIGURATION_TIME_ROOT = 20; CONFIGURATION_TIME_PROJECT = 21; CONFIGURATION_TIME_PLUGIN = 22; // Plugin warnings page when grouped by plugin. PLUGIN_WARNINGS_ROOT = 23; WARNINGS_ROOT = 24; // Task warnings page when grouped by plugin. PLUGIN_TASK_WARNINGS = 25; CONFIGURATION_CACHE_ROOT = 26; CONFIGURATION_CACHE_PLUGIN_WARNING = 27; JETIFIER_USAGE_WARNING = 28; DOWNLOADS_INFO = 29; } // Type of current page. optional PageType page_type = 1; // Page number of this type in current report. // Used to distinguish different pages of the same type in the same report. // ex: 1, 2, 3, 4... optional int32 page_entry_index = 2; } // All external links used in the report. enum OutgoingLinkTarget { UNKNOWN_OUTGOING_LINK_TARGET = 0; CRITICAL_PATH_HELP = 1; DUPLICATE_OUTPUT_FOLDER_ISSUE_HELP = 2; NO_OUTPUTS_DECLARED_ISSUE_HELP = 3; UP_TO_DATE_EQUALS_FALSE_ISSUE_HELP = 4; NON_INCREMENTAL_ANNOTATION_PROCESSORS_HELP = 5; OPTIMIZE_CONFIGURATION_PHASE_HELP = 6; CONFIGURE_GC = 7; CONFIGURATION_CACHING = 8; JETIFIER_MIGRATION = 9; } // Filter consists of items that might be included or not. // Current filter state is represented by items that are included (turned on). // Next ID: 11 enum FilterItem { UNKNOWN_FILTER_ITEM = 0; // Filters by task type. SHOW_ANDROID_PLUGIN_TASKS = 1; SHOW_THIRD_PARTY_TASKS = 2; SHOW_PROJECT_CUSTOMIZATION_TASKS = 3; // Filters by warning type. SHOW_ALWAYS_RUN_TASK_WARNINGS = 4; SHOW_TASK_SETUP_ISSUE_WARNINGS = 5; SHOW_ANNOTATION_PROCESSOR_WARNINGS = 6; SHOW_CONFIGURATION_CACHE_WARNINGS = 9; SHOW_JETIFIER_USAGE_WARNINGS = 10; // Other task attributes filters SHOW_WARNINGS_FOR_TASK_NOT_FROM_CRITICAL_PATH = 7; SHOW_TASKS_WITHOUT_WARNINGS = 8; } // Type of this build attribution UI event. optional EventType event_type = 1; // What page was opened when this event happened. optional Page current_page = 2; // What page will be opened because of this event (if page changes). optional Page target_page = 3; // The session id is a UUID tracking a single build report generated // to associate build attribution events together optional string build_attribution_report_session_id = 4; // Target of the external link clicked. Set when event type HELP_LINK_CLICKED. optional OutgoingLinkTarget link_target = 5; // List of filter items applied now, set when event type FILTER_APPLIED. repeated FilterItem applied_filters = 6; // How much time did it take to react on this user action. optional int64 event_processing_time_ms = 7; // Width of the Build Analyzer tool window in pixels. optional int64 width = 8; // Height of the Build Analyzer tool window in pixels. optional int64 height = 9; } message AndroidCppExtensionEvent { enum AndroidCppExtensionEventType { UNSPECIFIED_ANDROID_CPP_EXTENSION_EVENT_TYPE = 0; BUILD = 1; DEBUG = 2; } optional AndroidCppExtensionEventType type = 1; optional BuildEvent build_event = 2; optional DebugEvent debug_event = 3; message BuildEvent { // A GUID for the build session, this session ID is per project and is // intended to correlate build events for a particular project. optional string build_session = 1; optional string build_program_version = 2; optional DeviceInfo.ApplicationBinaryInterface platform = 3; optional string ndk_version = 4; optional bool is_debug_build = 5; optional int64 duration_ms = 6; optional bool is_using_distributed_build = 7; // The absolute path of the project on user's computer being built. This // value is anonymized before uploaded with salt. optional string build_project_path = 12; optional BuildEventType type = 8; enum BuildEventType { UNSPECIFIED_BUILD_EVENT_TYPE = 0; BUILD_COMPLETE = 1; COMPILE_COMPLETE = 2; LINK_COMPLETE = 3; GRADLE_COMPLETE = 4; } optional BuildCompleteInfo build_complete_info = 9; // Information about building the whole project. This event is sent when the // build completes. message BuildCompleteInfo { optional bool succeeded = 1; optional int32 c_source_file_count = 3; optional int32 cpp_source_file_count = 4; } optional CompileCompleteInfo compile_complete_info = 10; // Information about compiling a batch of C/C++ files, e.g. one event per // ClangCompile task run. message CompileCompleteInfo { // The language level of the majority of files. optional LanguageLevel language_level = 1; // The number of source files of this language level. optional int32 source_file_count = 2; // All batches of various language level in this project. repeated LanguageLevelBatch all_languge_levels = 3; message LanguageLevelBatch { // The language level of this batch. optional LanguageLevel language_level = 1; // The number of source files in this batch. optional int32 source_file_count = 2; } } optional LinkCompleteInfo link_complete_info = 11; // Information about linking. message LinkCompleteInfo { enum WellKnownLibraries { UNSPECIFIED_WELL_KNOWN_LIBRARIES = 0; ANGLE = 1; BORINGSSL = 2; CARTOGRAPHER = 3; COCOS2D = 4; DAYDREAM = 5; FLATBUFFER = 6; FREEGLUT = 7; GAMESDK = 8; GAUSSIANLIB = 9; OGRE = 10; OPENCV = 11; OPENVR = 12; OPEN_GL = 13; OPEN_SSL = 14; QT5 = 15; SDL2 = 16; SDL3 = 17; SHADERC = 18; SQLITE = 19; UNITY = 20; UNREAL = 21; VULKAN = 22; } repeated WellKnownLibraries library_dependencies = 1; } enum LanguageLevel { UNSPECIFIED_LANGUAGE_LEVEL = 0; C89 = 1; GNU89 = 2; CPP98 = 3; GNUPP98 = 4; C99 = 5; GNU99 = 6; C11 = 7; GNU11 = 8; CPP11 = 9; GNUPP11 = 10; CPP14 = 11; GNUPP14 = 12; C17 = 13; GNU17 = 14; CPP17 = 15; GNUPP17 = 16; } // TODO: try adding gradle info like the app_id. } message DebugEvent { // A GUID for the debug session optional string session = 1; // The numerical version of the host, For example, 15.9. optional string host_version = 2; optional DeviceInfo.ApplicationBinaryInterface platform = 3; optional bool is_using_emulator = 4; optional bool is_debug_build = 5; // Time that it takes each debugging event to complete. For example, if the // type is `START_WITHOUT_DEBUGGING`, this duration is how long it takes // the host to send the intent to launch the main activity after build // finishes. optional int64 duration_ms = 6; optional DebugEventType type = 7; enum DebugEventType { UNSPECIFIED_DEBUG_EVENT_TYPE = 0; START_WITHOUT_DEBUGGING = 1; START_WITH_DEBUGGING = 2; // User cancels debugging/launching before app starts running or device is // attached. CANCEL = 3; DEVICE_ATTACHED = 4; ADD_BREAKPOINT = 5; REMOVE_BREAKPOINT = 6; HIT_BREAKPOINT = 7; STEP_OVER = 8; STEP_INTO = 9; STEP_OUT = 10; SUSPEND = 11; STOP = 12; CONTINUE = 13; EXECUTE_COMMAND = 14; } } } message AppInspectionEvent { enum Type { UNKNOWN_EVENT_TYPE = 0; // This is a wrapped event fired by an inspector. One of the inspector // fields below should be set INSPECTOR_EVENT = 1; ERROR_OCCURRED = 2; TOOL_WINDOW_OPENED = 3; TOOL_WINDOW_HIDDEN = 4; PROCESS_SELECTED = 5; // To distinguish between user-initiated stops vs. crash-initiated stops, // compare with |ERROR_OCCURRED| counts. INSPECTION_STOPPED = 6; // Inspection restarted after a crash INSPECTION_RESTARTED = 7; } enum ErrorKind { UNKNOWN_ERROR_KIND = 0; INSPECTOR_CRASHED = 1; APP_DISCONNECTED = 2; } message EnvironmentMetadata { optional uint32 num_processes = 1; optional uint32 num_devices = 2; } // The detailed type of this event optional Type type = 1; // Set if |type| is |INSPECTOR_EVENT| oneof inspector_event { // Event associated with the user interacting with the database inspector DatabaseInspectorEvent database_inspector_event = 2; // Event associated with the user interacting with the WorkManager inspector WorkManagerInspectorEvent work_manager_inspector_event = 3; // Event associated with the user interacting with the Network inspector NetworkInspectorEvent network_inspector_event = 4; // Event associated with the user interacting with background task inspector BackgroundTaskInspectorEvent background_task_inspector_event = 5; } // Set if |type| is |ERROR_OCCURRED| optional ErrorKind error_kind = 101; // Set if |type| is |TOOL_WINDOW_OPENED|, |PROCESS_SELECTED| optional EnvironmentMetadata environment_metadata = 102; // App inspection fields above this point // Inspector definitions below this point message DatabaseInspectorEvent { enum Type { UNKNOWN_EVENT_TYPE = 0; ERROR_OCCURRED = 1; // A user modified a cell in a table TABLE_CELL_EDITED = 2; // A user manually requested refreshing some (potentially stale) data TARGET_REFRESHED = 3; STATEMENT_EXECUTED = 4; STATEMENT_EXECUTION_CANCELED = 5; LIVE_UPDATES_TOGGLED = 8; OFFLINE_MODE_ENTERED = 9; ENTER_OFFLINE_MODE_USER_CANCELED = 10; OFFLINE_DATABASE_DOWNLOAD_FAILED = 11; EXPORT_DIALOG_OPENED = 12; EXPORT_OPERATION_COMPLETED = 13; } enum ErrorKind { UNKNOWN_ERROR_KIND = 0; IS_RECOVERABLE_TRUE = 1; IS_RECOVERABLE_FALSE = 2; IS_RECOVERABLE_UNKNOWN = 3; } enum TargetType { UNKNOWN_TARGET_TYPE = 0; SCHEMA_TARGET = 1; TABLE_TARGET = 2; } enum StatementContext { UNKNOWN_STATEMENT_CONTEXT = 0; SCHEMA_STATEMENT_CONTEXT = 1; GUTTER_STATEMENT_CONTEXT = 2; USER_DEFINED_STATEMENT_CONTEXT = 3; } enum ConnectivityState { UNKNOWN_CONNECTIVITY_STATE = 0; CONNECTIVITY_ONLINE = 1; CONNECTIVITY_OFFLINE = 2; } // Information relevant when we switch to offline mode message OfflineModeMetadata { // How long it takes to download database data from the device optional int32 total_download_time_ms = 1; // How many bytes of database data were downloaded optional int64 total_download_size_bytes = 2; } // Information related to the opening of an "export data" dialog message ExportDialogOpenedEvent { enum Origin { UNKNOWN_ORIGIN = 0; SCHEMA_TREE_CONTEXT_MENU = 1; SCHEMA_TREE_EXPORT_BUTTON = 2; QUERY_RESULTS_EXPORT_BUTTON = 3; TABLE_CONTENTS_EXPORT_BUTTON = 4; } // What context kicked off the opening of the export dialog? optional Origin origin = 1; } // Information about an export that successfully completed. message ExportOperationCompletedEvent { enum Source { UNKNOWN_SOURCE = 0; DATABASE_SOURCE = 1; TABLE_SOURCE = 2; QUERY_SOURCE = 3; } enum SourceFormat { UNKNOWN_SOURCE_FORMAT = 0; FILE_FORMAT = 1; IN_MEMORY_FORMAT = 2; } enum Destination { UNKNOWN_DESTINATION = 0; DB_DESTINATION = 1; SQL_DESTINATION = 2; CSV_DESTINATION = 3; } enum Outcome { UNKNOWN_OUTCOME = 0; SUCCESS_OUTCOME = 1; CANCELLED_BY_USER_OUTCOME = 2; // Export operation was cancelled due to entering/leaving offline mode. CANCELLED_BY_OFFLINE_MODE_CHANGE_OUTCOME = 3; // Cancelled due to normal flow, e.g. Studio shutting down. CANCELLED_OTHER_OUTCOME = 4; // Genuine error while performing an export operation. ERROR_OUTCOME = 5; } // What kind of data was being exported optional Source source = 1; // What is the format of the source data optional SourceFormat source_format = 2; // What file type was the data exported as optional Destination destination = 3; // How long did the export take in milliseconds? optional int32 export_duration_ms = 4; // Was the operation successful? If not, how did it fail? optional Outcome outcome = 5; } // The detailed type of this event optional Type type = 1; // Set if |type| is |ERROR_OCCURRED| optional ErrorKind error_kind = 2; // Set if |type| is |TARGET_REFRESHED| optional TargetType target_type = 3; // Set if |type| is |STATEMENT_EXECUTED|, |STATEMENT_EXECUTION_CANCELED| optional StatementContext statement_context = 4; // Set if |type| is |LIVE_UPDATING_TOGGLED| optional bool live_updating_enabled = 5; // Set if |type| is |STATEMENT_EXECUTED|, |STATEMENT_EXECUTION_CANCELED|, // |EXPORT_OPERATION_COMPLETED| optional ConnectivityState connectivity_state = 6; // Set if |type| is |OFFLINE_MODE_ENTERED| optional OfflineModeMetadata offline_mode_metadata = 7; // Set if |type| is |EXPORT_DIALOG_OPENED| optional ExportDialogOpenedEvent export_dialog_opened_event = 8; // Set if |type| is |EXPORT_OPERATION_COMPLETED| optional ExportOperationCompletedEvent export_completed_event = 9; } // Deprecated. Use BackgroundTaskInspectorEvent instead. // Event associated with the user interacting with the WorkManager inspector message WorkManagerInspectorEvent { // The detailed type of this event enum Type { UNKNOWN_EVENT_TYPE = 0; // Global events // Fired when the user requests viewing data in table form TABLE_MODE_SELECTED = 1; // Fired when the user requests viewing data in graph form GRAPH_MODE_SELECTED = 2; // Worker-centric events // Fired when a worker is actively selected by the user WORK_SELECTED = 101; // Fired when the user clicks on a link that jumps into code JUMPED_TO_SOURCE = 102; // Fired when the user requests stopping a running worker WORK_CANCELED = 103; } // UI context associated with the current event enum Context { UNKNOWN_CONTEXT = 0; // The current event is related to the table view TABLE_CONTEXT = 1; // The current event is related to the graph view GRAPH_CONTEXT = 2; // The current event is related to the details panel DETAILS_CONTEXT = 3; // The current event is related to the tool buttons bar TOOL_BUTTON_CONTEXT = 4; } // Active UI layout when the current event was sent enum Mode { UNKNOWN_MODE = 0; // The table view is currently active TABLE_MODE = 1; // The graph view is currently active GRAPH_MODE = 2; } // Information about the chain of workers a worker is part of message ChainInfo { // The total number of all workers in this work chain optional int32 worker_count = 1; // The total number of all connections between workers optional int32 dependency_count = 2; // The longest chain of parents / children optional int32 max_depth = 3; // The widest chain of siblings optional int32 max_width = 4; } // The detailed type of this event optional Type type = 1; // UI context associated with the current event optional Context context = 2; // Active UI layout when the current event was sent optional Mode mode = 3; // Set if event indicates we're going to update the graph view, i.e. // |type| is |GRAPH_MODE_SELECTED|, // |type| is |WORK_SELECTED| when |mode| is |GRAPH_MODE| optional ChainInfo chain_info = 4; } // Events associated with users interacting with the network inspector message NetworkInspectorEvent { enum Type { UNKNOWN_EVENT_TYPE = 0; // User clicks on the migration prompt in profilers MIGRATION_LINK_SELECTED = 1; // User selects a connection to bring up the details panel CONNECTION_DETAIL_SELECTED = 2; // Connection details panel // User selects the request tab REQUEST_TAB_SELECTED = 3; // User selects the response tab RESPONSE_TAB_SELECTED = 4; // User selects the callstack tab CALLSTACK_TAB_SELECTED = 5; // User creates a new rule RULE_CREATED = 6; // User edits the rule details panel RULE_UPDATED = 7; // A network response is intercepted RESPONSE_INTERCEPTED = 8; } message RuleUpdatedEvent { enum Component { UNKNOWN_COMPONENT = 0; URL_PROTOCOL = 1; URL_HOST = 2; URL_PORT = 3; URL_PATH = 4; URL_QUERY = 5; FIND_CODE = 6; FIND_REPLACE_CODE = 7; ADD_HEADER = 8; FIND_REPLACE_HEADER = 9; FIND_REPLACE_BODY = 10; REPLACE_BODY = 11; } optional Component component = 1; } message ResponseInterceptedEvent { optional bool status_code = 1; optional bool header_added = 2; optional bool header_replaced = 3; optional bool body_replaced = 4; optional bool body_modified = 5; } optional Type type = 1; optional RuleUpdatedEvent rule_detail_updated = 2; optional ResponseInterceptedEvent response_intercepted = 3; } // Events associated with users interacting with the background task inspector message BackgroundTaskInspectorEvent { enum Type { UNKNOWN_EVENT_TYPE = 0; // General events // User clicks on the migration prompt in profilers MIGRATION_LINK_SELECTED = 1; // Fired when the user requests viewing data in table form TABLE_MODE_SELECTED = 2; // Fired when the user requests viewing data in graph form GRAPH_MODE_SELECTED = 3; // Fired when the user clicks on a link that jumps into code JUMPED_TO_SOURCE = 4; // Entry selection events // Clicks on a standalone job JOB_SELECTED = 101; // Clicks on a job associated with a work JOB_UNDER_WORK_SELECTED = 102; // Clicks on an alarm ALARM_SELECTED = 103; // Clicks on a standalone wake lock WAKE_LOCK_SELECTED = 104; // Clicks on a wake lock associated with a job WAKE_LOCK_UNDER_JOB_SELECTED = 105; // Fired when a worker is actively selected by the user WORK_SELECTED = 106; // Work events // Fired when the user requests stopping a running worker WORK_CANCELED = 201; } // UI context associated with the current event enum Context { UNKNOWN_CONTEXT = 0; // The current event is related to the table view TABLE_CONTEXT = 1; // The current event is related to the graph view GRAPH_CONTEXT = 2; // The current event is related to the details panel DETAILS_CONTEXT = 3; // The current event is related to the tool buttons bar TOOL_BUTTON_CONTEXT = 4; } // Active UI layout when the current event was sent enum Mode { UNKNOWN_MODE = 0; // The table view is currently active TABLE_MODE = 1; // The graph view is currently active GRAPH_MODE = 2; } // Information about the chain of workers a worker is part of message ChainInfo { // The total number of all workers in this work chain optional int32 worker_count = 1; // The total number of all connections between workers optional int32 dependency_count = 2; // The longest chain of parents / children optional int32 max_depth = 3; // The widest chain of siblings optional int32 max_width = 4; } // The detailed type of this event optional Type type = 1; // UI context associated with the current event optional Context context = 2; // Active UI layout when the current event was sent optional Mode mode = 3; // Set if event indicates we're going to update the graph view, i.e. // |type| is |GRAPH_MODE_SELECTED|, // |type| is |WORK_SELECTED| when |mode| is |GRAPH_MODE| optional ChainInfo chain_info = 4; } } message AvdLaunchEvent { // Describes how the AVD was launched. Always present. optional LaunchType launch_type = 1; // The class of the launched AVD. Always present. optional AvdClass avd_class = 2; enum LaunchType { UNKNOWN_LAUNCH_TYPE = 0; STANDALONE = 1; IN_TOOL_WINDOW = 2; } enum AvdClass { UNKNOWN_AVD_CLASS = 0; GENERIC = 1; FOLDABLE = 2; TV = 3; AUTOMOTIVE = 4; WEARABLE = 5; } } // Tracks user interaction with tooling support for Dagger message DaggerEditorEvent { enum Type { UNKNOWN_EVENT_TYPE = 0; NAVIGATED = 1; OPENED_LINK_FROM_ERROR = 2; FIND_USAGES_NODE_WAS_DISPLAYED = 3; CLICKED_ON_GUTTER = 4; GUTTER_WAS_DISPLAYED = 5; } enum ElementType { UNKNOWN_ELEMENT_TYPE = 0; PROVIDER = 1; CONSUMER = 2; COMPONENT = 3; SUBCOMPONENT = 4; MODULE = 5; ENTRY_POINT = 6; COMPONENT_METHOD = 7; ENTRY_POINT_METHOD = 8; ASSISTED_INJECTED_CONSTRUCTOR = 9; ASSISTED_FACTORY_METHOD = 10; } // Detailed description of naviganion event message NavigationMetadata { enum NavigationContext { UNKNOWN_CONTEXT = 0; CONTEXT_GUTTER = 1; CONTEXT_USAGES = 2; } // Context from which a navigation was called optional NavigationContext context = 1; // ElementType that is source of navigation optional ElementType from_element = 2; // ElementType that is target of navigation optional ElementType to_element = 3; } // The detailed type of this event optional Type type = 1; // Set if |type| is |NAVIGATED| optional NavigationMetadata navigation_metadata = 2; // Set if |type| is |FIND_USAGES_NODE_WAS_DISPLAYED|, |CLICKED_ON_GUTTER|, // |GUTTER_WAS_DISPLAYED| optional ElementType owner_element_type = 3; // Set if |type| is |FIND_USAGES_NODE_WAS_DISPLAYED|, |GUTTER_WAS_DISPLAYED| optional int64 calculation_time_ms = 4; } // Track Android Test Retention events. message AndroidTestRetentionEvent { // Compatibility check result related to one retention snapshot. message SnapshotCompatibility { enum Result { UNKNOWN_FAILURE = 0; LOADABLE = 1; SNAPSHOT_FILE_NOT_FOUND = 2; EMULATOR_EXEC_NOT_FOUND = 3; SNAPSHOT_PROTO_FILE_NOT_FOUND = 4; EMULATOR_LOADABLE_CHECK_FAILURE = 5; } // Compatibility check result. optional Result result = 1; // More detailed failure reason returned by the emulator. Only set when // result=EMULATOR_LOADABLE_CHECK_FAILURE. optional EmulatorSnapshotFailureReason emulator_check_failure_reason = 2; } optional SnapshotCompatibility snapshot_compatibility = 1; } // Tracks UI impressions and user interactions in the test report UI. message ParallelAndroidTestReportUiEvent { // IDs to identify UI element. enum UiElement { UNKNOWN_UI_ELEMENT = 0; TEST_SUITE_VIEW = 1; TEST_SUITE_VIEW_TABLE_ROW = 2; TEST_SUITE_DETAILS_HORIZONTAL_VIEW = 3; TEST_SUITE_DETAILS_VERTICAL_VIEW = 4; TEST_SUITE_LOG_VIEW = 5; TEST_SUITE_DEVICE_INFO_VIEW = 6; TEST_SUITE_OPT_IN_BANNER = 7; TEST_SUITE_RETENTION_VIEW = 8; // A dialog that is displayed after you click on run button // to promote Android instrumentation test execution using // Gradle from Android Studio. b/190209774. GRADLE_ANDROID_TEST_RUNNER_OPT_IN_DIALOG = 9; } // All IDs of UI element that are displayed to users. repeated UiElement impressions = 1; // Tracks details information of a user interaction. message UserInteraction { // Represents type of a user interaction. enum UserInteractionType { UNKNOWN_UI_INTERACTION = 0; CLICK = 1; } optional UserInteractionType type = 1; // The UI element ID of which this user interaction occurred. optional UiElement ui_element = 2; // Represents result type of a user interaction. enum UserInteractionResultType { UNKNOWN_UI_INTERACTION_RESULT = 0; ACCEPT = 1; DISMISS = 2; } optional UserInteractionResultType result = 3; } // All interactions occurred. repeated UserInteraction interactions = 2; } message ApplyChangesAgentError { enum AgentPurpose { UNKNOWN_PURPOSE = 0; STARTUP_AGENT = 1; APPLY_CHANGES = 2; APPLY_CODE_CHANGES = 3; } // Framework & runtime classes that the Apply Changes agent may instrument. enum TargetClass { UNKNOWN_TARGET_CLASS = 0; ACTIVITY_THREAD = 1; DEX_PATH_LIST_ELEMENT = 2; DEX_PATH_LIST = 3; RESOURCES_MANAGER = 4; THREAD = 5; } // When the last agent was attached, measured on the device's steady clock. optional int64 agent_attach_time_ms = 1; // How many times the AC agent has attached to this VM. optional int32 agent_attach_count = 2; // When this crash occurred, measured on the device's steady clock. optional int64 event_time_ms = 3; // The operation that caused the most recent agent to attach. optional AgentPurpose agent_purpose = 4; // If the failure was related to an instrumentation failure, this contains // a list of classes that could not be instrumented. repeated TargetClass target_classes = 5; } // Record of a single variant API use. Each variant API used will be recorded // and can either be a Variant API method call, a VariantProperties API method // call or an access to the Gradle public artifacts. message VariantApiUsage { // this represents a method call on the Variant interface and sub types. repeated VariantAccess variant_access = 1; // this represents a method call on the VariantProperties interface and sub // types. repeated VariantPropertiesAccess variant_properties_access = 2; // this represents an access to any of the public artifact type we make // available through the [Artifacts] interface. Access can be reading (GET) or // producing (CREATE, APPEND, ...). repeated ArtifactAccess artifact_access = 3; } // Record of a single public artifact access through the public variant API. message ArtifactAccess { // Identification of the type of artifact access. optional AccessType type = 1; // The artifact type used as an input (read). // This is an enum in android git: // tools/analytics-library/protos/src/main/proto/analytics_enums.proto // will only be set when type == TRANSFORM_MANY optional int32 input_artifact_type = 2; // The artifact type used as an output. // This is an enum in android git: // tools/analytics-library/protos/src/main/proto/analytics_enums.proto optional int32 output_artifact_type = 3; enum AccessType { UNKNOWN_ACCESS_TYPE = 0; GET = 1; GET_ALL = 2; CREATE = 3; APPEND = 4; TRANSFORM = 5; TRANSFORM_MANY = 6; } } // Record of a single Variant API method call. message VariantAccess { // The method enum value that was used. // This is the VariantMethodType enum in android git: // tools/analytics-library/protos/src/main/proto/analytics_enums.proto optional int32 type = 1; } // Record of a single VariantProperties API method call. message VariantPropertiesAccess { // The method enum value that was used. // This is the VariantPropertiesMethodType enum in android git: // tools/analytics-library/protos/src/main/proto/analytics_enums.proto optional int32 type = 1; } message UpgradeAssistantComponentInfo { enum UpgradeAssistantComponentKind { UNKNOWN_ASSISTANT_COMPONENT_KIND = 0; AGP_CLASSPATH_DEPENDENCY = 1; GMAVEN_REPOSITORY = 2; GRADLE_VERSION = 3; JAVA8_DEFAULT = 4; COMPILE_RUNTIME_CONFIGURATION = 5; FABRIC_CRASHLYTICS = 6; MIGRATE_TO_BUILD_FEATURES = 7; REMOVE_SOURCE_SET_JNI = 8; MIGRATE_TO_ANDROID_RESOURCES = 9; REMOVE_BUILD_TYPE_USE_PROGUARD = 10; REMOVE_IMPLEMENTATION_PROPERTIES = 11; GRADLE_PLUGINS = 12; MIGRATE_TO_INSTALLATION = 13; MIGRATE_TO_EMULATOR_SNAPSHOTS = 14; MIGRATE_TO_TEST_COVERAGE = 15; MIGRATE_PACKAGING_OPTIONS = 16; MIGRATE_TO_LINT = 17; REWRITE_DEPRECATED_OPERATORS = 18; REDUNDANT_PROPERTIES = 19; ANDROID_MANIFEST_PACKAGE = 20; R8_FULL_MODE_DEFAULT = 21; } message Java8DefaultProcessorSettings { enum NoLanguageLevelAction { UNKNOWN_NO_LANGUAGE_LEVEL_ACTION = 0; ACCEPT_NEW_DEFAULT = 1; INSERT_OLD_DEFAULT = 2; } optional NoLanguageLevelAction no_language_level_action = 1; } message R8FullModeDefaultProcessorSettings { enum NoPropertyPresentAction { UNKNOWN_NO_PROPERTY_PRESENT_ACTION = 0; ACCEPT_NEW_DEFAULT = 1; INSERT_OLD_DEFAULT = 2; } optional NoPropertyPresentAction no_property_present_action = 1; } // The kind of processor. optional UpgradeAssistantComponentKind kind = 1; // Whether the processor is enabled. optional bool is_enabled = 2; // Settings of the processor. Will be set if kind is // JAVA8_DEFAULT. optional Java8DefaultProcessorSettings java8_default_settings = 3; // Settings of the processor. Will be set if kind is // R8_FULL_MODE_DEFAULT. optional R8FullModeDefaultProcessorSettings r8_full_mode_default_settings = 4; } message UpgradeAssistantEventInfo { enum UpgradeAssistantEventKind { UNKNOWN_UPGRADE_ASSISTANT_EVENT_KIND = 0; FIND_USAGES = 1; PREVIEW_REFACTORING = 2; EXECUTE = 3; FAILURE_PREDICTED = 4; SYNC_SKIPPED = 5; SYNC_FAILED = 6; SYNC_SUCCEEDED = 7; INTERNAL_ERROR = 8; BLOCKED = 9; } // The kind of event. optional UpgradeAssistantEventKind kind = 1; // The number of usages. Will be set if kind is FIND_USAGES, // PREVIEW_REFACTORING, EXECUTE, SYNC_SKIPPED, SYNC_FAILED, or // SYNC_SUCCEEDED. optional int32 usages = 2; // The number of files involved in the build. Will be set if // kind is FIND_USAGES, PREVIEW_REFACTORING, EXECUTE, // SYNC_SKIPPED, SYNC_FAILED, or SYNC_SUCCEEDED. optional int32 files = 3; } message UpgradeAssistantComponentEvent { // The uuid for a session of the upgrade assistant. optional string upgrade_uuid = 1; // The software version of AGP used by the project. optional string current_agp_version = 2; // The software version of AGP after upgrade. optional string new_agp_version = 3; // The software version of Gradle used by the project. optional string current_gradle_version = 4; // The software version of Gradle after upgrade. optional string new_gradle_version = 5; // Information about the component involved in the event. optional UpgradeAssistantComponentInfo component_info = 6; // Information about the event. optional UpgradeAssistantEventInfo event_info = 7; } message UpgradeAssistantProcessorEvent { // The uuid for a session of the upgrade assistant. optional string upgrade_uuid = 1; // The software version of AGP used by the project. optional string current_agp_version = 2; // The software version of AGP after upgrade. optional string new_agp_version = 3; // The software version of Gradle used by the project. optional string current_gradle_version = 4; // The software version of Gradle after upgrade. optional string new_gradle_version = 5; // Information about the components involved in the event. repeated UpgradeAssistantComponentInfo component_info = 6; // Information about the event. optional UpgradeAssistantEventInfo event_info = 7; } // Details for interactive preview event message InteractivePreviewEvent { // List of event types available in an interactive preview enum InteractivePreviewEventType { UNKNOWN_EVENT_TYPE = 0; REPORT_FPS = 1; REPORT_STARTUP_TIME = 2; } // Type of event optional InteractivePreviewEventType type = 1; // Frame rate (frames per second) in the interactive preview session optional int32 fps = 2; // Interactive session duration in milliseconds optional int32 duration_ms = 3; // Number of user actions during the interactive session optional int32 actions = 4; // Startup time of the interactive session in milliseconds optional int32 startup_time_ms = 5; // Number of the previews on the surface the preview for this interactive // session belongs to optional int32 peer_previews = 6; } // A user's response to a survey message SurveyResponse { // Name of the survey // This is one of a set of string constants set by Google, // i.e. "analytics/surveys/satisfaction" optional string name = 1; // One or more responses selected by the user repeated int32 responses = 2; } // Record of a registered transform message AsmClassesTransformRegistration { // List of scopes available for transforming enum Scope { UNKNOWN_SCOPE = 0; PROJECT = 1; ALL = 2; } // Name of the factory class supplied in registration. // Example: FireperfClassVisitorFactory optional string class_visitor_factory_class_name = 1; // Scope of the classes to be transformed optional Scope scope = 2; } // An action to set the asm frames computation mode for the asm classes // transforms message AsmFramesComputationModeUpdate { // List of frames computation modes enum Mode { UNKNOWN_MODE = 0; COPY_FRAMES = 1; COMPUTE_FRAMES_FOR_INSTRUMENTED_METHODS = 2; COMPUTE_FRAMES_FOR_INSTRUMENTED_CLASSES = 3; COMPUTE_FRAMES_FOR_ALL_CLASSES = 4; } // The requested frames computation mode optional Mode mode = 1; } // Deprecated, use SuggestedImportEvent instead. // Tracks user interaction with auto-import support. message AutoImportEvent { option deprecated = true; // GMaven coordinate, which is generated by Google(not user data). optional string artifact_id = 1; } // Data collected by IntelliJ's FileTypeUsageCounterCollector regarding files message FileUsage { enum EventType { UNKNOWN_TYPE = 0; SELECT = 1; EDIT = 2; OPEN = 3; CLOSE = 4; } // Anonymized guid representing file path optional string file_path = 1; // Type of file, i.e. kotlin, java optional string file_type = 2; // Plugin type optional string plugin_type = 3; // Plugin version optional string plugin_version = 4; // Event type optional EventType event_type = 5; } // Details for live literal events message LiveLiteralsEvent { enum LiveLiteralsEventType { UNKNOWN_EVENT_TYPE = 0; // User manually enabled live literals USER_ENABLE = 1; // User manually disabled live literals USER_DISABLE = 2; // Device with live literals started START = 3; // Device with live literals stopped STOP = 4; // Aggregated live literals deployment stats DEPLOY_STATS = 5; } // Describes the type of device used for LiveLiterals enum LiveLiteralsDeviceType { UNKNOWN_DEVICE_TYPE = 0; PHYSICAL = 1; EMULATOR = 2; PREVIEW = 3; } // Type of event optional LiveLiteralsEventType event_type = 1; // Device type for [START, STOP] events optional LiveLiteralsDeviceType device_type = 2; // Deployment stats per device type repeated LiveLiteralsDeployStats deploy_stats = 3; // Details for live literals deploy stats message LiveLiteralsDeployStats { // The device type for these aggregated stats. optional LiveLiteralsDeviceType device_type = 1; // Devices of this type. optional uint32 devices_count = 2; // Number of successful deployments. optional uint32 successful_deployments = 3; // Number of failed deployments. optional uint32 failed_deployments = 4; // Stats for number of reported deployment problems. optional PercentileEstimator number_of_problems = 5; // Stats for deployment type. optional PercentileEstimator deployment_time_ms = 6; } } // Data collected when running Migrate to Non-Transitive R class action. message NonTransitiveRClassMigrationEvent { // The uuid for a session of the migration. optional string migration_uuid = 1; enum NonTransitiveRClassMigrationEventKind { UNKNOWN_MIGRATION_EVENT_KIND = 0; FIND_USAGES = 1; PREVIEW_REFACTORING = 2; EXECUTE = 3; SYNC_SKIPPED = 4; SYNC_FAILED = 5; SYNC_SUCCEEDED = 6; } // The kind of event. optional NonTransitiveRClassMigrationEventKind kind = 2; // The number of usages. Will be set if kind is FIND_USAGES, // PREVIEW_REFACTORING or EXECUTE. optional int32 usages = 3; } // Tracks user interaction with suggested import support. message SuggestedImportEvent { // GMaven coordinate, which is generated by Google(not user data). // E.g. androidx.recyclerview:recyclerview optional string artifact_id = 1; } // Data collected by IntelliJ's RefreshProgress message VfsRefresh { // Duration of the VFS refresh in milliseconds optional uint64 duration_ms = 1; } // Tracks user interactions with signing wizard message SigningWizardEvent { enum SigningWizardFailureCause { FAILURE_CAUSE_UNKNOWN = 0; FAILURE_CAUSE_NO_MODULE_FACET = 1; FAILURE_CAUSE_NO_MODULE_ROOT_PATH = 2; FAILURE_CAUSE_NO_ANDROID_MODEL = 3; FAILURE_CAUSE_NO_VARIANTS_SELECTED = 4; FAILURE_CAUSE_ENCRYPTION_ERROR = 5; FAILURE_CAUSE_COMPILE_ABORTED = 6; FAILURE_CAUSE_COMPILE_ERRORS = 7; FAILURE_CAUSE_CANNOT_CREATE_APK = 8; FAILURE_CAUSE_ZIP_ALIGN_ERROR = 9; } enum SigningTargetType { TARGET_TYPE_UNKNOWN = 0; TARGET_TYPE_APK = 1; TARGET_TYPE_BUNDLE = 2; } // Specify cause when signing fails optional SigningWizardFailureCause failure_cause = 1; // Details when building and signing a Gradle project optional SigningTargetType target_type = 2; // Number of modules in project optional uint32 number_of_modules = 3; // Number of variants selected for signing optional uint32 number_of_variants = 4; // Private key is stored? optional bool is_private_key_exported = 5; } // File type information for a project message FileType { // Type of file, i.e. kotlin, java, xml optional string file_type = 1; // Plugin type, i.e. platform optional string plugin_type = 2; // Number of files of this type in the project optional uint32 number_of_files = 3; } // Kotlin project configuration information logged by IntelliJ message KotlinProjectConfiguration { enum EventType { TYPE_UNKNOWN = 0; BUILD = 1; } // Build system, i.e. Gradle optional string system = 1; // plugin version optional string plugin_version = 2; // plugin name, i.e. org.jetbrains.kotlin optional string plugin = 3; // plugin type, i.e. JB_BUNDLED optional string plugin_type = 4; // platform, i.e. jvm optional string platform = 5; // indicates whether this a kotlin multiplatform programming project optional bool is_multiplatform = 6; // indicates the type of the configuration event (i.e. build) optional EventType event_type = 7; } // Data collected by IntelliJ when a run is started message RunStartData { // Unique id for activity. This number is generated sequentially // and exists only across the lifetime of the process. optional int32 ide_activity_id = 1; // Type of launch performed, i.e. Run, Debug, etc. optional string executor = 2; // Type of run configuration, i.e. AndroidRunConfigurationType optional string run_configuration = 3; } // Data collected by IntelliJ when a run is finished message RunFinishData { // duration of the run in ms optional int64 duration_ms = 1; // Unique id for activity optional int32 ide_activity = 2; } // Event related to the device manager tool window, the replacement for the AVD // manager message DeviceManagerEvent { // The kind of DeviceManagerEvent optional EventKind kind = 1; // The count of devices under the Virtual tab. Set when kind = // VIRTUAL_DEVICE_COUNT. optional int32 virtual_device_count = 2; // The kind of DeviceManagerEvent enum EventKind { // Default kind UNSPECIFIED = 0; // The count of devices under the Virtual tab VIRTUAL_DEVICE_COUNT = 1; // The Launch action under the Virtual tab was clicked VIRTUAL_LAUNCH_ACTION = 2; // The Device file explorer action under the Virtual tab was clicked VIRTUAL_DEVICE_FILE_EXPLORER_ACTION = 3; // The Edit action under the Virtual tab was clicked VIRTUAL_EDIT_ACTION = 4; // The Pair device action under the Virtual tab was clicked VIRTUAL_PAIR_DEVICE_ACTION = 5; // The Duplicate action under the Virtual tab was clicked VIRTUAL_DUPLICATE_ACTION = 6; // The Wipe data action under the Virtual tab was clicked VIRTUAL_WIPE_DATA_ACTION = 7; // The Cold boot now action under the Virtual tab was clicked VIRTUAL_COLD_BOOT_NOW_ACTION = 8; // The Show on disk action under the Virtual tab was clicked VIRTUAL_SHOW_ON_DISK_ACTION = 9; // The Delete action under the Virtual tab was clicked VIRTUAL_DELETE_ACTION = 10; // The Stop action under the Virtual tab was clicked VIRTUAL_STOP_ACTION = 11; // The Device file explorer action under the Physical tab was clicked PHYSICAL_DEVICE_FILE_EXPLORER_ACTION = 12; // The Pair device action under the Physical tab was clicked PHYSICAL_PAIR_DEVICE_ACTION = 13; // The Delete action under the Physical tab was clicked PHYSICAL_DELETE_ACTION = 14; // The Unpair device action under the Virtual tab was clicked VIRTUAL_UNPAIR_DEVICE_ACTION = 15; // The Unpair device action under the Physical tab was clicked PHYSICAL_UNPAIR_DEVICE_ACTION = 16; } } // Event related to Wear OS emulator pairing assistant message WearPairingEvent { // The kind of WearPairingEvent optional EventKind kind = 1; // The kind of WearPairingEvent enum EventKind { // Default kind UNSPECIFIED = 0; // Assistant was launched with no pre-selected device (ie two columns) SHOW_ASSISTANT_FULL_SELECTION = 1; // Assistant was launched with a pre-selected device (ie single column) SHOW_ASSISTANT_PRE_SELECTION = 2; // "Successful Pairing" screen is displayed SHOW_SUCCESSFUL_PAIRING = 3; // "Install Wear OS Companion" screen is displayed SHOW_INSTALL_WEAR_OS_COMPANION = 4; // Devices lost connection and then automatically reconnected AUTOMATIC_RECONNECT = 5; } } message GradleJdkInvalidEvent { // Reason to consider JDK as invalid optional InvalidJdkReason reason = 1; // List of invalid JDK reasons enum InvalidJdkReason { // Default (not specified) INVALID_JDK_UNSPECIFIED_REASON = 0; // JDK is not specified (Neither gradleJvm nor project-jdk-name are defined) INVALID_JDK_UNDEFINED_JDK = 1; // gradleJvm is set to #USE_PROJECT_JDK but project-jdk-name is not defined INVALID_JDK_PROJECT_JDK_UNDEFINED = 2; // gradleJvm set to #USE_JAVA_HOME but JAVA_HOME is not a valid path INVALID_JDK_JAVA_HOME_INVALID = 3; // gradleJvm set to #USE_INTERNAL_JAVA but SystemProperties.javaHome is not // a valid JDK INVALID_JDK_INTERNAL_JAVA_INVALID = 4; // A JDK name is defined but the JDK table does not have it INVALID_JDK_NAME_NOT_IN_TABLE = 5; // JDK can be found in the JDK table but the home path is not defined on it INVALID_JDK_HOME_PATH_NOT_DEFINED = 6; // There is no bin/javac in the JDK path INVALID_JDK_NO_JAVAC = 7; // Some required files are missing from the JDK path INVALID_JDK_MISSING_FILES = 8; } } message DeviceExplorerEvent { optional Action action = 1; // Number of files (Only valid for transfer actions) optional int32 transfer_file_count = 2; // Total size in bytes (Only valid for transfer actions) optional int32 transfer_total_size = 3; // Total time in ms (Only valid for transfer actions) optional int32 transfer_time_ms = 4; enum Action { // Default UNSPECIFIED = 0; // The user changed the device in the dropdown. DEVICE_CHANGE = 1; // The user created a new file NEW_FILE = 2; // The user created a new directory NEW_DIRECTORY = 3; // The user downloaded a file using "save as" SAVE_AS = 4; // The user uploaded a file using "upload..." UPLOAD = 5; // The user uploaded a file using drag and drop DROP = 6; // The user deleted a path DELETE = 7; // The user resync'ed a path SYNC = 8; // The user copied a path COPY_PATH = 9; // The user expanded a data/data/* directory EXPAND_APP_DATA = 10; } } // Event raised when user opts in to metrics message OptInToMetrics {} // Event raised when user opts out of metrics message OptOutOfMetrics {} // Event related to detection of Version Catalog use in a project message GradleVersionCatalogDetectorEvent { // The state of Version Catalog use as detected optional State state = 1; enum State { // Default state UNKNOWN_GRADLE_VERSION_CATALOG_DETECTOR_STATE = 0; // The build system does not support Version Catalogs UNSUPPORTED = 1; // The project does not use Version Catalogs NONE = 2; // There is explicit configuration or use of Version Catalogs in // the project configuration files EXPLICIT = 3; // There is implicit use of Version Catalogs in the project // without explicit mention in configuration files IMPLICIT = 4; } } // Events raised by user interactions with the coroutine debugger message CoroutineDebuggerEvent { enum Type { // Default UNKNOWN_EVENT_TYPE = 0; // Studio tried to launch the coroutine debugger LAUNCH_EVENT = 1; } optional Type type = 1; // can be set if event type is LAUNCH_EVENT // the user can enable or disable the coroutine debugger from studio settings optional bool disabled_in_settings = 2; } // Events raised by user interactions with Splitting Tabs tool windows message SplittingTabsUsageEvent { // The type of Splitting Tabs tool window optional ToolWindowType tool_window_type = 1; // The event type optional EventType event_type = 2; // Set if type is PANEL_SPLIT optional SplitType split_type = 3; // The tool window subsystem using the Splitting Tabs component enum ToolWindowType { // Default UNKNOWN_TOOL_WINDOW_TYPE = 0; // A Logcat tool window. LOGCAT_TOOL_WINDOW = 1; } // The type of event enum EventType { // Default UNKNOWN_EVENT_TYPE = 0; // A panel is created. PANEL_CREATED = 1; // A tab is created. TAB_CREATED = 2; // A panel is split. PANEL_SPLIT = 3; // A panel is moved. PANEL_MOVED = 4; // A panel is renamed. PANEL_RENAMED = 5; // A panel is closed. PANEL_CLOSED = 6; } // Details of a Split event. Set if event_type is a PANEL_SPLIT message SplitType { // The orientation of the split optional Orientation orientation = 1; // The UI component the Split event was initiated from optional Source source = 2; // The orientation of the Split enum Orientation { // Default UNKNOWN_ORIENTATION = 0; // Horizontal orientation HORIZONTAL = 1; // Vertical orientation VERTICAL = 2; } // The source of the event enum Source { // Default UNKNOWN_SOURCE = 0; // The split action in the Tab header TAB = 1; // The aplit action in the panel context menu PANEL = 2; } } } // Events raised by user interactions with Logcat tool windows message LogcatUsageEvent { // The event type optional Type type = 1; // Historical, no longer used for writing as of 02/2022 optional LogcatFormatConfiguration format_dialog = 2 [deprecated = true]; // A logcat filter. Set when type is FILTER_ADDED_TO_HISTORY. optional LogcatFilterEvent logcat_filter = 3; // The Logcat format configuration set by the format dialog optional LogcatFormatDialog format_dialog_applied = 4; // A Logcat panel was added optional LogcatPanelEvent panel_added = 5; // The type of event enum Type { // Default UNKNOWN_EVENT_TYPE = 0; // Format Dialog Applied FORMAT_DIALOG = 1; // We don't want to log filters on every keystroke so we only log when a // filter is added to history which is much less frequent. FILTER_ADDED_TO_HISTORY = 2; // A Logcat panel was added PANEL_ADDED = 3; } // The state of a Logcat format dialog when applied message LogcatFormatDialog { // The Logcat format configuration the dialog represents optional LogcatFormatConfiguration configuration = 1; // The state of the "set as default" checkbox optional bool is_default_preset = 2; // True if the "Apply" button was used as oppesed to "OK" optional bool is_apply_button_used = 3; } // The state of a Logcat Format Dialog message LogcatFormatConfiguration { // Show timestamp field optional bool is_show_timestamp = 1; // Timestamp format includes the date optional bool is_show_date = 2; // Show the process id field optional bool is_show_process_id = 3; // Show the thread id field optional bool is_show_thread_id = 4; // Show the tag field optional bool is_show_tags = 5; // Show repeated tags optional bool is_show_repeated_tags = 6; // The width of the tag field optional int32 tag_width = 7; // Show the package field optional bool is_show_packages = 8; // Show repeated packages optional bool is_show_repeated_packages = 9; // The width of the package field optional int32 package_width = 10; // The preset configuration if applicable optional Preset preset = 11; // Historical, no longer used for writing as of 02/2022 optional bool is_default_preset = 12 [deprecated = true]; // Historical, no longer used for writing as of 02/2022 optional bool is_apply_button_used = 13 [deprecated = true]; // Logcat Format presets enum Preset { // Default UNKNOWN_PRESET = 0; // The standard format STANDARD = 1; // The compact format COMPACT = 2; } } // A summary of a logcat search filter // (Logcat is the logging from an Android device the developer is testing // their app on) message LogcatFilterEvent { // Summary of search terms pertaining to the log entry 'tag' field optional TermVariants tag_terms = 1; // Summary of search terms pertaining to the log entry 'package' field optional TermVariants package_terms = 2; // Summary of search terms pertaining to the log entry 'message' field optional TermVariants message_terms = 3; // Summary of search terms pertaining to entire log entry optional TermVariants line_terms = 4; // Number of search terms pertaining to entire log entry. Differs from the // above as these terms do not use the 'line:' prefix. optional int32 implicit_line_terms = 5; // Number of search terms pertaining to the 'level' field. optional int32 level_terms = 6; // Number of search terms pertaining to the 'timestamp' field. As in // "how long ago the entry was logged" optional int32 age_terms = 7; // Number of the search terms of the form 'package:mine'. optional int32 package_project_terms = 8; // Number of or operators in the expression optional int32 or_operators = 9; // Number of and operators in the expression optional int32 and_operators = 10; // Number of parentheses pairs in the expressions optional int32 parentheses = 11; // Does the filter contain an error optional bool contains_errors = 12; // Is this filter saved as a favorite optional bool is_favorite = 13; // Number of 'is:crash' search terms. optional int32 crash_terms = 14; // Number of 'is:stacktrace' search terms. optional int32 stacktrace_terms = 15; // Summary of search terms pertaining to the log entry 'process' field optional TermVariants process_terms = 16; // A summary of a term with regex and negated variants message TermVariants { // Number of normal terms (for example 'tag:foo') optional int32 count = 1; // Number of negated terms (for example '-tag:foo') optional int32 count_negated = 2; // Number of regex terms (for example 'tag~:foo') optional int32 count_regex = 3; // Number of negated regex terms (for example '-tag~:foo') optional int32 count_negated_regex = 4; } } // Details of a Logcat panel message LogcatPanelEvent { // True if the panel is created from a restore-state. optional bool is_restored = 1; // The formatting configuration of the panel optional LogcatFormatConfiguration format_configuration = 2; // The panel filter. optional LogcatFilterEvent filter = 3; } } // Memory and CPU counters as reported by the OS message OSMetrics { // Processes started by Android Studio // (Android Studio itself, daemons, emulator, etc.) repeated Process processes = 1; // Process details: start time, memory and CPU usage message Process { // Process ID optional int32 pid = 1; // Parent's process ID optional int32 parent_pid = 2; // Process start time optional int64 start_timestamp_ms = 3; // Total CPU used by the process so far optional int64 total_cpu_use_milliseconds = 4; // Detected process type optional ProcessType type = 5; // Type of last not-unknown parent process optional ProcessType last_known_parent_type = 6; // Linux, MacOS: Resident Set Size in 1024-units. // Memory allocated to this process and currently in RAM optional int64 rss = 7; // Windows: Working Set Size (in bytes). // Amount of memory this process needs to execute efficiently optional int64 working_set_size = 8; // Windows: Private Page Count (in bytes). // Count of bytes accessible only by this process optional int64 private_page_count = 9; } // Known processes started by Android Studio enum ProcessType { // Unknown process UNKNOWN_PROCESS_TYPE = 0; // Instance of Android Studio's JVM ANDROID_STUDIO = 1; // File-system notifier FS_NOTIFIER = 2; // Gradle daemon GRADLE_DAEMON = 3; // Emulator EMULATOR = 4; // Kotlin daemon KOTLIN_DAEMON = 5; // Console host (Windows only) CONSOLE_HOST = 6; } } message SdkIndexLibraryDetails { // Group Id of library optional string group_id = 1; // Artifact Id of library optional string artifact_id = 2; // Version of library optional string version_string = 3; } message LiveEditEvent { enum Status { UNKNOWN = 0; // LiveEdit push succeeded SUCCESS = 1; // LiveEdit push failed due to transport issues PUSH_FAILED = 2; // LiveEdit failed because the user added a method UNSUPPORTED_ADDED_METHOD = 3; // LiveEdit failed because the user removed a method UNSUPPORTED_REMOVED_METHOD = 4; // LiveEdit failed because the user added a class UNSUPPORTED_ADDED_CLASS = 5; // LiveEdit failed because the user added a field UNSUPPORTED_ADDED_FIELD = 6; // LiveEdit failed because the user removed a field UNSUPPORTED_REMOVED_FIELD = 7; // LiveEdit failed because of an error with inlining UNSUPPORTED_MODIFY_INLINE = 8; // LiveEdit failed because the user changed the class hierarchy UNSUPPORTED_MODIFY_INHERITANCE = 9; } // Result of the LiveEdit device push optional Status status = 1; // Whether the changed code involves a non-@Composable method optional bool has_non_compose = 2; // The duration of the LiveEdit compile, in milliseconds optional int64 compile_duration_ms = 3; // The duration of the LiveEdit push, in milliseconds optional int64 push_duration_ms = 4; } message GoogleLoginPluginEvent { enum EventKind { UNKNOWN_EVENT_TYPE = 0; LOGIN_WITH_SUCCESS = 1; LOGIN_WITH_FAILURE = 2; // Forced logout is performed as a first step to recover from // `TokenResponseException` FORCE_LOGOUT = 3; } optional EventKind event = 1; } message DeviceMirroringSession { enum DeviceKind { UNKNOWN_DEVICE_KIND = 0; PHYSICAL = 1; VIRTUAL = 2; } optional DeviceKind device_kind = 1; optional int64 duration_sec = 2; } message AppQualityInsightsUsageEvent { enum AppQualityInsightsUsageEventType { UNKNOWN_EVENT = 0; // AQI Panel is opened ZERO_STATE = 1; // AQI Fetches Crashes CRASHES_FETCHED = 2; // Interactions with Crash Details view CRASH_LIST_DETAILS_VIEW = 3; // AQI Stacktrace clicked STACKTRACE_CLICKED = 4; // AQI User leaves to see crash in console FB_CONSOLE_LINK_CLICKED = 5; // AQI matchers run MATCHERS_INITIATED = 6; // AQI Experiences an error ERROR = 7; } enum CrashType { UNKNOWN_TYPE = 0; FATAL = 1; NON_FATAL = 2; } enum Confidence { UNKNOWN_CONFIDENCE = 0; LOW = 1; MEDIUM = 2; HIGH = 3; } enum Resolution { UNKNOWN_RESOLUTION = 0; LINE = 1; METHOD = 2; CLASS = 3; FAILED = 4; } message AppQualityInsightsZeroStateDetails { enum EmptyState { UNKNOWN_STATE = 0; // User isn't logged into Android Studio NO_LOGIN = 1; // User doesn't have a google-services.json in the module NO_FIREBASE = 2; } optional EmptyState empty_state = 1; } message AppQualityInsightsFetchDetails { enum TimeFilter { UNKNOWN_FILTER = 0; THIRTY_DAYS = 1; SIXTY_DAYS = 2; NINETY_DAYS = 3; SEVEN_DAYS = 4; TWENTYFOUR_HOURS = 5; } enum FetchSource { UNKNOWN_SOURCE = 0; // Passive background refresh BACKGROUND = 1; // User initiated refresh REFRESH = 2; // User applied filter FILTER = 3; // User selected a different project PROJECT_SELECTION = 4; } enum SeverityFilter { UNKNOWN_SEVERITY = 0; FATAL = 1; NON_FATAL = 2; ALL = 3; } // The Time filter used for this fetch of crashes optional TimeFilter time_filter = 1; // Whether the version filter is enabled for this fetch (false means all // versions) optional bool version_filter = 2; // The Severity filter used for this fetch of crashes optional SeverityFilter severity_filter = 3; // True if the project fetched for was the default project for the variant optional bool default_project = 4; // The source triggering this fetch optional FetchSource fetch_source = 5; // The number of retries required to get the data (0 means it got it first // try) optional int32 num_retries = 6; // Whether the fetch hit a cached result (true means no network request was // made) optional bool cache = 7; } message AppQualityInsightsCrashOpenDetails { enum CrashOpenSource { UNKNOWN_SOURCE = 0; // Crash was opened in AQI panel LIST = 1; // Crash was opened directly from codebase INSPECTION = 2; } optional CrashType crash_type = 1; optional CrashOpenSource source = 2; } message AppQualityInsightsStacktraceDetails { optional CrashType crash_type = 1; // True if the file is part of the users project (ie: not a library) optional bool local_file = 2; optional Confidence confidence = 3; optional Resolution resolution = 4; } message AppQualityInsightsConsoleLinkDetails { enum ConsoleOpenSource { UNKNOWN_SOURCE = 0; // Console was opened from details view DETAILS = 1; // Console was opened by inspection quick-fix action INSPECTION = 2; } optional CrashType crash_type = 1; optional ConsoleOpenSource source = 2; optional Confidence confidence = 3; optional Resolution resolution = 4; } message AppQualityInsightsMatcherDetails { enum MatcherSource { UNKNOWN_SOURCE = 0; // Matcher was run to fill in details panel DETAILS = 1; // Matcher was run to populate in code highlighting INSPECTION = 2; } optional Confidence confidence = 1; optional Resolution resolution = 2; optional MatcherSource source = 3; optional CrashType crash_type = 4; } message AppQualityInsightsErrorDetails { enum ErrorSource { UNKNOWN_SOURCE = 0; // Occurred during scan for google-services.json CONFIG_SCAN = 1; // Occurred during RPC (fetching data) RPC = 2; // Occurred while trying to match stacktrace to local code MATCHERS = 3; // Occurred during authentication (fetching auth token) AUTHENTICATION = 4; } optional ErrorSource source = 1; optional int32 api_error_code = 2; } // The app_id is the id for the user's android app // which we salt on the client (28 day rotation) then sha256 // so it is anonymized and is unique per user, but has a 1-N relation. optional string app_id = 1; // Type of event optional AppQualityInsightsUsageEventType type = 2; // set when type = ZERO_STATE optional AppQualityInsightsZeroStateDetails zero_state_details = 3; // set when type = CRASHES_FETCHED optional AppQualityInsightsFetchDetails fetch_details = 4; // set when type = CRASH_LIST_DETAILS_VIEW optional AppQualityInsightsCrashOpenDetails crash_open_details = 5; // set when type = STACKTRACE_CLICKED optional AppQualityInsightsStacktraceDetails stacktrace_details = 6; // set when type = FB_CONSOLE_LINK_CLICKED optional AppQualityInsightsConsoleLinkDetails console_link_details = 7; // set when type = MATCHERS_INITIATED optional AppQualityInsightsMatcherDetails matcher_details = 8; // set when type = ERROR optional AppQualityInsightsErrorDetails error_details = 9; } message FastPreviewEvent { enum Type { UNKNOWN = 0; // Fast Preview was enabled by the user USER_ENABLED = 1; // Fast Preview was disable by the user USER_DISABLED = 2; // Fast Preview was disabled automatically after an error AUTO_DISABLED = 3; // Fast Preview compilation completed COMPILE = 4; } message CompilationResult { enum Status { UNKNOWN = 0; // Compilation was successful SUCCESS = 1; // The code could not be compiled because the compiler daemon // failed to start DAEMON_START_ERROR = 2; // Compilation failed FAILED = 3; } // Result of the Compilation optional Status status = 1; // Number of files compiled optional int64 compiled_files = 2; // The duration of the compilation, in milliseconds optional int64 compile_duration_ms = 3; // The duration of the refresh, in milliseconds optional int64 refresh_duration_ms = 4; } // Result of the LiveEdit device push optional Type type = 1; // The compilation result when type = COMPILE optional CompilationResult compilation_result = 2; } message MemoryUsageReportEvent { enum ComponentCategory { DEFAULT_COMPONENT_CATEGORY = 0; ANDROID_RESOURCE_MANAGER_CATEGORY = 1; ANDROID_RESOURCE_REPOSITORY_CATEGORY = 2; ANDROID_DESIGN_TOOLS_CATEGORY = 3; ANDROID_GRADLE_CATEGORY = 4; ANDROID_PROFILER_CATEGORY = 5; ANDROID_TEMPLATES_CATEGORY = 6; ANDROID_RUN_DEBUG_CATEGORY = 7; ANDROID_LINT_CATEGORY = 8; ANDROID_CPP_CATEGORY = 9; ANDROID_AVDMANAGER_CATEGORY = 10; ANDROID_EDITORS_CATEGORY = 11; ANDROID_DIAGNOSTICS_CATEGORY = 12; ANDROID_DATA_BINDINGS_CATEGORY = 13; ANDROID_SDK_CATEGORY = 14; INTELLIJ_PLATFORM_CATEGORY = 15; ANDROID_REST_CATEGORY = 16; } enum ComponentKind { reserved 10; DEFAULT_COMPONENT_KIND = 0; ANDROID_RESOURCE_MANAGER = 1; ANDROID_RESOURCE_REPOSITORY = 2; ANDROID_RENDERING = 3; ANDROID_LAYOUT_EDITOR = 4; ANDROID_LAYOUTLIB = 5; ANDROID_NAVEDITOR = 6; ANDROID_GRADLE = 7; ANDROID_PROFILER = 8; ANDROID_TEMPLATES = 9; ANDROID_LOGCAT = 11; ANDROID_LINT = 12; ANDROID_CPP = 13; ANDROID_AVDMANAGER = 14; ANDROID_EDITORS = 15; ANDROID_INSPECTIONS = 16; ANDROID_DIAGNOSTICS = 17; ANDROID_DATA_BINDINGS = 18; ANDROID_SDK = 19; INTELLIJ_KOTLIN = 20; INTELLIJ_PROJECT = 21; INTELLIJ_APPLICATION = 22; INTELLIJ_MODULE = 23; INTELLIJ_VFS = 24; INTELLIJ_EDITOR = 25; INTELLIJ_PSI = 26; ANDROID_TRANSPORT = 27; ANDROID_RUN_DEPLOYER = 28; ANDROID_DDM = 29; ANDROID_DEBUG = 30; ANDROID_APK_VIEW = 31; ANDROID_REST = 32; } message ComponentMemoryUsage { optional ComponentKind component = 1; optional uint32 owned_objects_number = 2; optional uint64 owned_objects_total_size = 3; optional uint32 retained_objects_number = 4; optional uint64 retained_objects_total_size = 5; } message SharedClusterMemoryUsage { repeated ComponentKind components = 1 [packed = true]; optional uint32 objects_number = 2; optional uint64 objects_total_size = 3; } message ComponentCategoryMemoryUsage { optional ComponentCategory component_category = 1; optional uint32 owned_objects_number = 2; optional uint64 owned_objects_total_size = 3; optional uint32 retained_objects_number = 4; optional uint64 retained_objects_total_size = 5; } message MemoryUsageCollectionMetadata { enum ErrorCode { NO_ERROR = 0; HEAP_IS_TOO_BIG = 1; CANT_TAG_OBJECTS = 2; // JVM doesn't have a capability of tagging objects configured OBJECTS_MAP_IS_TOO_BIG = 3; // The size of the object map exceeded the limit CLASS_FIELDS_CACHE_IS_TOO_BIG = 4; // The size of the class fields cache exceeded the limit WRONG_ROOT_OBJECT_ID = 5; // Something went wrong: one of the root // objects had the wrong id after enumeration LOW_MEMORY = 6; // LowMemory state occurred during the heap traversal // (and collecting was immediately stopped) AGENT_LOAD_FAILED = 7; // Loading object tagging java agent failed } optional ErrorCode error_code = 1; optional uint32 total_heap_objects_count = 2; optional uint64 total_heap_objects_size = 3; optional uint32 max_field_cache_size = 4; optional uint32 max_object_queue_size = 5; // number of objects that were enumerated during the first traverse, but // GCed after that and were not reached during the second pass. optional uint32 enumerated_garbage_collected_objects_count = 6; optional double collection_time_seconds = 7; optional bool is_in_power_save_mode = 8; optional uint32 unsuccessful_field_accesses_number = 9; } repeated ComponentMemoryUsage component_stats = 1; repeated SharedClusterMemoryUsage shared_stats = 2; repeated ComponentCategoryMemoryUsage component_category_stats = 3; optional MemoryUsageCollectionMetadata metadata = 4; }