एडीबी कमांड का उपयोग करके डिवाइस पर टच इवेंट भेजने के लिए एडीबी का उपयोग कैसे करें?


88

मैं AndroidDebugBridge का उपयोग करके डिवाइस पर टच ईवेंट भेजने की कोशिश कर रहा हूं, ताकि मैं UI परीक्षणों के लिए कुछ बुनियादी स्वचालन कर सकूं। मैंने लिंक में चर्चा का अनुसरण किया है । मैं एमुलेटर पर टच को अनुकरण करने के लिए सेंटीवेंट का उपयोग करने में सक्षम हूं, लेकिन डिवाइस पर ऐसा करने में असमर्थ हूं।

उपर्युक्त लिंक की तरह एमुलेटर प्रत्येक स्पर्श के लिए 6 घटनाओं (xcoord, ycoord, 2 for press, 2 for release) को भेजता है और इस जानकारी को भेजने वालों के लिए उपयोग करना आसान था, लेकिन डिवाइस के लिए टचस्क्रीन के लिए एक गेटवे लगता है। बहुत सारी घटनाएँ उत्पन्न करना।

क्या किसी व्यक्ति ने ADB से डिवाइस पर टच भेजने में कामयाबी हासिल की है? क्या आप कृपया समाधान साझा कर सकते हैं।


डिवाइस पर, क्या आपने जांच की कि क्या आप घटनाओं को उचित "इनपुट-डिवाइस" में पास कर रहे हैं? अर्थात। इनपुट-डिवाइस जो स्पर्श-चालक के रूप में पंजीकृत है?
theCodeArtist

जवाबों:


135

एंड्रॉइड एक inputकमांड-लाइन टूल के साथ आता है जो विविध इनपुट घटनाओं का अनुकरण कर सकता है। दोहन ​​का अनुकरण करने के लिए, यह है:

input tap x y

आप दूरस्थ रूप से कमांड चलाने के लिए adb शेल (> 2.3.5) का उपयोग कर सकते हैं:

adb shell input tap x y

2
यह nox_adb.exe धन्यवाद का उपयोग करके Nox App पर पूरी तरह से काम करता है!
स्मिर्लिंक

2
डबल टैप के परीक्षण के लिए मैंने एक लूप क्लिक इस तरह लिखा है i = 0; जबकि [$ (($ i)) -ले 2]; do i = $ (($ i + 1)); इनपुट नल 500 800; किया हुआ; लेकिन यह हर एक सेकंड में जगह पर क्लिक कर रहा है। क्या मैं टर्मिनल का उपयोग करके इसे तेजी से कर सकता हूं?
विग्नेश केएम

66

किसी विशेष क्रिया को करने के लिए (उदाहरण के लिए वेब ब्राउज़र को खोलने के लिए), आपको पहले यह पता लगाना होगा कि कहां टैप करना है। ऐसा करने के लिए, आप पहले भाग सकते हैं:

adb shell getevent -l

एक बार जब आप डिवाइस पर प्रेस करते हैं, तो उस स्थान पर जिसे आप चाहते हैं, आपको यह आउटपुट दिखाई देगा:

<...>
/dev/input/event3: EV_KEY       BTN_TOUCH            DOWN
/dev/input/event3: EV_ABS       ABS_MT_POSITION_X    000002f5
/dev/input/event3: EV_ABS       ABS_MT_POSITION_Y    0000069e

adb आपको बता रहा है कि 2x5, 69e में हेक्स में एक कुंजी दबाया गया (बटन नीचे) जो दशमलव में 757 और 1694 है।

यदि आप अब उसी घटना को उत्पन्न करना चाहते हैं, तो आप उसी स्थान पर इनपुट टैप कमांड का उपयोग कर सकते हैं:

adb shell input tap 757 1694

अधिक जानकारी पर पाया जा सकता है:

https://source.android.com/devices/input/touch-devices.html http://source.android.com/devices/input/getevent.html


11
स्पर्श सह-निर्देशांक खोजने के लिए, मैं डेवलपर विकल्प -> स्पर्श स्थान दिखाएँ का उपयोग करने की सलाह दूंगा। इसके अलावा, यह दशमलव में मान देता है।
प्रवीण

3
यदि आप हेक्स को दशमलव में बदलना नहीं चाहते हैं, तो आप अपने शेल को ऐसा करने दे सकते हैं adb shell input tap $((16#2f5)) $((16#69e)):। इसके अलावा, सिर्फ पांडित्य होने के लिए, 0x2F5 और 0x69E क्रमशः 757 और 1694 हैं ... आपने आधारों के बीच रूपांतरण करने के लिए क्या उपयोग किया था?
घोटी

धन्यवाद @ghoti यकीन नहीं है कि मैं इसे किसी अन्य बिंदु या ऐसा कुछ कॉपी किया होगा ...
टॉमस

इसके शीर्ष पर बिल्डिंग मैंने adb shell getevent -l | grep ABS_MT_POSITION --line-buffered | awk '{a = substr($0,54,8); sub(/^0+/, "", a); b = sprintf("0x%s",a); printf("%d\n",strtonum(b))}'एक पूर्णांक के रूप में नल की स्थिति प्राप्त करने वाली कमांड का निर्माण किया
किक्जावन

12

२.३.५ के पास नहीं था input tap, बस input keyeventऔर input text आप इसके लिए बंदर का उपयोग कर सकते हैं: (यह https://stackoverflow.com/a/18959385/1587329 पर जवाब की एक प्रति है ):

आप इस तरह से बंदरों का उपयोग करना चाह सकते हैं :

$ monkeyrunner
>>> from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
>>> device = MonkeyRunner.waitForConnection()
>>> device.touch(200, 400, MonkeyDevice.DOWN_AND_UP)

आप एक ड्रैग भी कर सकते हैं, एक्टिविटी शुरू कर सकते हैं आदि मंकीडेवीस के एप पर एक नजर डाल सकते हैं


5

आपको उपयोग करने की आवश्यकता नहीं है

अदब शैल getevent -l

कमांड, आपको बस X और Y प्राप्त करने के लिए डिवाइस [टच डेटा दिखाएं] पर डेवलपर विकल्पों में सक्षम करने की आवश्यकता है।

कुछ और जानकारी मेरे लेख में यहाँ देखी जा सकती है: https://mobileqablog.wordpress.com/2016/08/20/android-automatic-touchscreen-taps-adb-shell-input-touchscreen-tap/


4

Android के uiautomator का उपयोग करने पर विचार करें , adb शेल uiautomator [...] के साथ या सीधे SD .K के साथ आने वाले .jar का उपयोग करने पर।


BTW, बाजार पर कुछ उपकरण हैं जो Android के स्वचालन परीक्षण को आपके लिए काफी आसान बना सकते हैं।
एलिस्ट

4

टॉमस के उत्तर के शीर्ष पर बिल्डिंग, यह मेरे द्वारा पाए गए पूर्णांक के रूप में स्थान नल की स्थिति को खोजने का सबसे अच्छा तरीका है:

adb shell getevent -l | grep ABS_MT_POSITION --line-buffered | awk '{a = substr($0,54,8); sub(/^0+/, "", a); b = sprintf("0x%s",a); printf("%d\n",strtonum(b))}'

adb shell getevent -lघटनाओं की एक सूची प्राप्त करने के लिए उपयोग करें , के लिए grep का उपयोग करना ABS_MT_POSITION(हेक्स में स्पर्श घटनाओं के साथ लाइन प्राप्त करता है) और अंत में संबंधित हेक्स मान प्राप्त करने के लिए awk का उपयोग करें, उन्हें शून्य से पट्टी करें और हेक्स को पूर्णांक में परिवर्तित करें। जब आप डिवाइस पर प्रेस करते हैं तो यह लगातार टर्मिनल में x और y निर्देशांक प्रिंट करता है।

फिर आप कमांड भेजने के लिए इस adb शेल कमांड का उपयोग कर सकते हैं:

adb shell input tap x y
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.