7

के विचारों के गुणों को कैसे जान सकता है I want to know hierarchyViewer टूल एंड्रॉइड में कैसे काम करता है। चूंकि सभी एंड्रॉइड ऐप विभिन्न प्रक्रियाओं में चलता है, यह विचारों के लेआउट को कैसे जान सकता है। कौन सा दृश्य और इसकी गुणों को पदानुक्रम Viewer पर धक्का देता है।एंड्रॉइड स्टूडियो का पदानुक्रम दृश्य उपकरण एंड्रॉइड स्क्रीन

एंड्रॉइड पुश डेटा की कौन सी सेवा HierarchyViewer टूल पर है। क्या कोई मुझे कृपया यह समझा सकता है?

उत्तर

2

कैसे एडीबी आयोजित किया जाता है पर पहले देखो चलें की जरूरत है।

  1. ग्राहक - - एक ग्राहकों मशीन पर चल रहा विकास के लिए इस्तेमाल किया जा रहा यह 3 मुख्य घटक के रूप में वर्णित here है। क्लाइंट को एडीबी कमांड जारी करके खोल से बुलाया जाता है। पदानुक्रम दर्शक भी एडीबी क्लाइंट बनाता है।
  2. सर्वर - एक सर्वर जो आपकी विकास मशीन पर पृष्ठभूमि प्रक्रिया के रूप में चलता है। यह adb क्लाइंट से add (adb daemon) पर जारी किए गए आदेशों को संचारित करता है।
  3. adbd - एडब डिमन प्रत्येक एमुलेटर या डिवाइस पर पृष्ठभूमि प्रक्रिया के रूप में चलता है। एडीबी डिमन एमुलेटर या डिवाइस से डेटा के संचार के लिए एडब सर्वर पर संचार के लिए ज़िम्मेदार है। एडीबी डिमन डिवाइस पर चलने वाली विभिन्न सेवाओं के लिए संचार करता है जो कि आईपीसी तंत्र की तरह है।

उदाहरण के लिए जब हम शेल पर adb install example.apk जैसे कमांड जारी करते हैं। यह पहली बार मशीन पर एडीबी क्लाइंट को आमंत्रित करता है और बताता है कि यह example.apk इंस्टॉल करना चाहता है। तब सर्वर डिवाइस पर चल रहे एडीबी डिमन को कमांड के साथ एपीके भेजता है। संचार आमतौर पर पोर्ट 5554 पर चल रहे टीसीपी कनेक्शन के माध्यम से संचारित एडीबी पुल द्वारा किया जाता है। फिर एडब डिमन सिस्टम सर्वर को कमांड करने के लिए कॉल करता है। एक सर्वर एक सिस्टम सर्वर के रूप में बुलाया है

हर Android डिवाइस पर -

अब देता है कहानी का Android डिवाइस पक्ष पर एक नजर है। आप adb shell ps | grep system_server कमांड जारी करके इसकी स्थिति पा सकते हैं। सिस्टम सर्वर सेवाओं के प्रबंधन के लिए ज़िम्मेदार है।सिस्टम सर्वर द्वारा चलाए जा रहे कुछ सेवाओं रहे हैं

  • उपकरण नीति
  • ऑडियो सेवा
  • पावर प्रबंधक
  • पैकेज प्रबंधक
  • सामग्री प्रदाता
  • विंडो प्रबंधक
  • गतिविधि प्रबंधक और कई और ....

विंडो प्रबंधक की तरह जानकारी है - मुख्य थ्रेड, खिड़की में गड़बड़ी, अभिविन्यास, लेयरिंग, इनपुट इवेंट मैनेजमेंट, ध्यान केंद्रित करने आदि अपने दृश्यों पर जानकारी पहले से ही विंडोज प्रबंधक के साथ उपलब्ध है।

तो अब सब कुछ एक साथ अंतिम प्रवाह पदानुक्रम दर्शक के लिए डाल है -

  1. पदानुक्रम दर्शक viewswhen के बारे में जानकारी पूछ एडीबी ग्राहक बनाता है REMOTE_COMMAND_CAPTURE_LAYERS या COMMAND_WINDOW_MANAGER_LIST की तरह एक आदेश जारी किए हैं।
  2. अनुरोध एडीबी सर्वर जो अनुप्रयोग चल डिवाइस पर adbd को फ़ॉरवर्ड तक पहुँचता है।
  3. adbd सिस्टम सर्वर से अनुरोध को आगे भेजता है जो उस सेवा की पहचान करता है जिस पर अनुरोध को अग्रेषित किया जाना है। इस मामले में विंडो मैनेजर है।
  4. विंडो मैनेजर तो देखें प्रबंधक जो आवेदन के मुख्य यूआई थ्रेड के लिए थ्रेड पूल के प्रबंध के लिए जिम्मेदार है पूछता है।
  5. व्यू प्रबंधक विंडो प्रबंधक को यह जानकारी देता है।
  6. विंडो प्रबंधक डेटा को वापस विज्ञापन भेजता है।
  7. Adbd इसे वापस adb सर्वर पर संचारित करता है।
  8. एडीबी सर्वर डेटा पदानुक्रम दर्शक को वापस देता है।

    उम्मीद है कि यह मदद करता है।

+0

जानकारी के लिए धन्यवाद ... इसका मतलब है कि "विंडो प्रबंधक" के पास वर्तमान विंडो के सभी दृश्यों तक पहुंच है .. फिर पदानुक्रम दृश्य केवल कुछ गुण दिखाता है लेकिन सभी नहीं। उदाहरण के लिए यदि व्यू टेक्स्टव्यू है .. तो पदानुक्रम क्यों नहीं है व्यूअर टेक्स्टकॉलर, पृष्ठभूमि रंग, पैडिंग इत्यादि भी दिखाता है ... लेकिन यह केवल टेक्स्ट, क्लिक करने योग्य, सक्षम इत्यादि दिखाता है ... – user3265443

+0

आधिकारिक दस्तावेज देखें [यहां] (http://developer.android.com/tools/performance/hierarchy-viewer/index.html), इसमें दृश्य के लिए सभी उपलब्ध गुण हैं। बिंदु 15 और 16 देखें, यह आपको दृश्य के सभी विवरण प्रदान करने में सक्षम होगा। – sandeep

+0

मैं [व्यूसेवर] (https://github.com/romainguy/ViewServer) का उपयोग कर अपने स्वयं के ऐप के लिए केवल पदानुक्रम चला सकता हूं। यदि मैं अन्य ऐप्स के लिए डीबग मोड चालू है तो क्या मैं पदानुक्रम दृश्य चला सकता हूं? above..just के लिए – user3265443

0

मैं आपके सवाल का पढ़ा है, मैं अच्छा जवाब नहीं है, लेकिन मेरी पहली प्रतिक्रिया मैं logcat देखने के लिए थक गया जब मैं HierarchyViewer शुरू करने और यह है कि क्या मैं बहुत ही दिलचस्प (आधा सड़क) में पाया गया है:

1873-21873/? D/AndroidRuntime: >>>>>> START com.android.internal.os.RuntimeInit uid 2000 <<<<<< 
01-16 20:10:37.246 21873-21873/? D/AndroidRuntime: CheckJNI is OFF 
01-16 20:10:37.283 21873-21873/? D/ICU: No timezone override file found: /data/local/tmp/misc/zoneinfo/current/icu/icu_tzdata.dat 
01-16 20:10:37.341 21873-21873/? I/Radio-JNI: register_android_hardware_Radio DONE 
01-16 20:10:37.361 21873-21873/? D/AndroidRuntime: Calling main entry com.android.commands.uiautomator.Launcher 
01-16 20:10:38.551 21873-21873/? I/AccessibilityNodeInfoDumper: Skipping invisible child: [email protected]; boundsInParent: Rect(0, 0 - 1412, 1692); boundsInScreen: Rect(0, 322 - -13, 2014); packageName: com.google.android.googlequicksearchbox; className: android.view.ViewGroup; text: null; error: null; maxTextLength: -1; contentDescription: null; viewIdResName: null; checkable: false; checked: false; focusable: false; focused: false; selected: false; clickable: true; longClickable: true; contextClickable: false; enabled: true; password: false; scrollable: false; actions: [AccessibilityAction: ACTION_SELECT - null, AccessibilityAction: ACTION_CLEAR_SELECTION - null, AccessibilityAction: ACTION_CLICK - null, AccessibilityAction: ACTION_LONG_CLICK - null, AccessibilityAction: ACTION_ACCESSIBILITY_FOCUS - null, AccessibilityAction: ACTION_UNKNOWN - null] 
01-16 20:10:38.582 21873-21873/? I/AccessibilityNodeInfoDumper: Skipping invisible child: [email protected]; boundsInParent: Rect(0, 0 - 324, 380); boundsInScreen: Rect(312, 1676 - 636, 2014); packageName: com.google.android.googlequicksearchbox; className: android.view.View; text: null; error: null; maxTextLength: -1; contentDescription: null; viewIdResName: null; checkable: false; checked: false; focusable: false; focused: false; selected: false; clickable: false; longClickable: false; contextClickable: false; enabled: true; password: false; scrollable: false; actions: [AccessibilityAction: ACTION_SELECT - null, AccessibilityAction: ACTION_CLEAR_SELECTION - null, AccessibilityAction: ACTION_ACCESSIBILITY_FOCUS - null, AccessibilityAction: ACTION_UNKNOWN - null] 
01-16 20:10:38.583 21873-21873/? I/AccessibilityNodeInfoDumper: Skipping invisible child: [email protected]; boundsInParent: Rect(0, 0 - 1412, 1692); boundsInScreen: Rect(1454, 322 - 1440, 2014); packageName: com.google.android.googlequicksearchbox; className: android.view.ViewGroup; text: null; error: null; maxTextLength: -1; contentDescription: null; viewIdResName: null; checkable: false; checked: false; focusable: false; focused: false; selected: false; clickable: true; longClickable: true; contextClickable: false; enabled: true; password: false; scrollable: false; actions: [AccessibilityAction: ACTION_SELECT - null, AccessibilityAction: ACTION_CLEAR_SELECTION - null, AccessibilityAction: ACTION_CLICK - null, AccessibilityAction: ACTION_LONG_CLICK - null, AccessibilityAction: ACTION_ACCESSIBILITY_FOCUS - null, AccessibilityAction: ACTION_UNKNOWN - null] 
01-16 20:10:38.584 21873-21873/? I/AccessibilityNodeInfoDumper: Skipping invisible child: [email protected]; boundsInParent: Rect(0, 0 - 0, 0); boundsInScreen: Rect(28, 112 - 28, 112); packageName: com.google.android.googlequicksearchbox; className: android.view.View; text: null; error: null; maxTextLength: -1; contentDescription: null; viewIdResName: com.google.android.googlequicksearchbox:id/dummy_focus_view; checkable: false; checked: false; focusable: true; focused: false; selected: false; clickable: false; longClickable: false; contextClickable: false; enabled: true; password: false; scrollable: false; actions: [AccessibilityAction: ACTION_FOCUS - null, AccessibilityAction: ACTION_SELECT - null, AccessibilityAction: ACTION_CLEAR_SELECTION - null, AccessibilityAction: ACTION_ACCESSIBILITY_FOCUS - null, AccessibilityAction: ACTION_UNKNOWN - null] 
01-16 20:10:38.586 21873-21873/? I/AccessibilityNodeInfoDumper: Skipping invisible child: [email protected]; boundsInParent: Rect(0, 0 - 182, 182); boundsInScreen: Rect(0, 84 - 182, 266); packageName: com.google.android.googlequicksearchbox; className: android.view.View; text: null; error: null; maxTextLength: -1; contentDescription: null; viewIdResName: com.google.android.googlequicksearchbox:id/focus_indicator; checkable: false; checked: false; focusable: false; focused: false; selected: false; clickable: false; longClickable: false; contextClickable: false; enabled: true; password: false; scrollable: false; actions: [AccessibilityAction: ACTION_SELECT - null, AccessibilityAction: ACTION_CLEAR_SELECTION - null, AccessibilityAction: ACTION_ACCESSIBILITY_FOCUS - null, AccessibilityAction: ACTION_UNKNOWN - null] 
01-16 20:10:38.591 21873-21873/? I/AccessibilityNodeInfoDumper: Skipping invisible child: [email protected]; boundsInParent: Rect(0, 0 - 42, 42); boundsInScreen: Rect(668, 2053 - 689, 2074); packageName: com.google.android.googlequicksearchbox; className: android.widget.ImageView; text: null; error: null; maxTextLength: -1; contentDescription: null; viewIdResName: com.google.android.googlequicksearchbox:id/active; checkable: false; checked: false; focusable: false; focused: false; selected: false; clickable: false; longClickable: false; contextClickable: false; enabled: true; password: false; scrollable: false; actions: [AccessibilityAction: ACTION_SELECT - null, AccessibilityAction: ACTION_CLEAR_SELECTION - null, AccessibilityAction: ACTION_ACCESSIBILITY_FOCUS - null, AccessibilityAction: ACTION_UNKNOWN - null] 
01-16 20:10:38.592 21873-21873/? I/AccessibilityNodeInfoDumper: Skipping invisible child: [email protected]; boundsInParent: Rect(0, 0 - 42, 42); boundsInScreen: Rect(699, 2042 - 741, 2084); packageName: com.google.android.googlequicksearchbox; className: android.widget.ImageView; text: null; error: null; maxTextLength: -1; contentDescription: null; viewIdResName: com.google.android.googlequicksearchbox:id/inactive; checkable: false; checked: false; focusable: false; focused: false; selected: false; clickable: false; longClickable: false; contextClickable: false; enabled: true; password: false; scrollable: false; actions: [AccessibilityAction: ACTION_SELECT - null, AccessibilityAction: ACTION_CLEAR_SELECTION - null, AccessibilityAction: ACTION_ACCESSIBILITY_FOCUS - null, AccessibilityAction: ACTION_UNKNOWN - null] 
01-16 20:10:38.592 21873-21873/? I/AccessibilityNodeInfoDumper: Skipping invisible child: [email protected]; boundsInParent: Rect(0, 0 - 42, 42); boundsInScreen: Rect(752, 2053 - 773, 2074); packageName: com.google.android.googlequicksearchbox; className: android.widget.ImageView; text: null; error: null; maxTextLength: -1; contentDescription: null; viewIdResName: com.google.android.googlequicksearchbox:id/active; checkable: false; checked: false; focusable: false; focused: false; selected: false; clickable: false; longClickable: false; contextClickable: false; enabled: true; password: false; scrollable: false; actions: [AccessibilityAction: ACTION_SELECT - null, AccessibilityAction: ACTION_CLEAR_SELECTION - null, AccessibilityAction: ACTION_ACCESSIBILITY_FOCUS - null, AccessibilityAction: ACTION_UNKNOWN - null] 
01-16 20:10:38.593 21873-21873/? I/AccessibilityNodeInfoDumper: Skipping invisible child: [email protected]; boundsInParent: Rect(0, 0 - 324, 350); boundsInScreen: Rect(1172, 2126 - 1440, 2392); packageName: com.google.android.googlequicksearchbox; className: android.view.View; text: null; error: null; maxTextLength: -1; contentDescription: null; viewIdResName: null; checkable: false; checked: false; focusable: false; focused: false; selected: false; clickable: false; longClickable: false; contextClickable: false; enabled: true; password: false; scrollable: false; actions: [AccessibilityAction: ACTION_SELECT - null, AccessibilityAction: ACTION_CLEAR_SELECTION - null, AccessibilityAction: ACTION_ACCESSIBILITY_FOCUS - null, AccessibilityAction: ACTION_UNKNOWN - null] 
01-16 20:10:38.596 21873-21873/? W/AccessibilityNodeInfoDumper: Fetch time: 111ms 

इसलिए यदि आप logcat पढ़ आप उपकरण एक नई प्रक्रिया com.android.internal.os.RuntimeInit तो इस प्रक्रिया में कुछ args (मुख्य विधि में के स्रोत कोड लांचर देखें) के बाद कि लांचर रन एक साथ com.android.commands.uiautomator.Launcher कॉल करने कि मिल जाएगा निर्दिष्ट कमांड वें लॉन्चर व्यू के दृश्यों को डंप पर (लॉगकैट देखें)।

मुझे आशा है कि आप मदद लेकिन अधिक जानकारी और शोध :)

संबंधित मुद्दे