सवाल मैं एकाधिक कनेक्टेड डिवाइसों पर एपीके इंस्टॉल कैसे कर सकता हूं?


मेरे पास 7 डेवलपमेंट मशीन हैं जो मेरी विकास मशीन में प्लग हैं।

आम तौर पर मैं करता हूँ adb install <path to apk> और केवल एक ही डिवाइस पर स्थापित कर सकते हैं।

अब मैं अपने सभी 7 कनेक्टेड डिवाइसों पर अपना एपीके इंस्टॉल करना चाहता हूं। मैं इसे एक ही कमांड में कैसे कर सकता हूं? मैं शायद एक स्क्रिप्ट चलाने के लिए चाहता हूँ।


44
2017-12-22 23:10


मूल


uninstallapp.rb gist.github.com/XinyueZ/2d61133b6acbde19f3c5 installapk.rb gist.github.com/XinyueZ/2128a11e174141908728 - TeeTracker


जवाब:


आप उपयोग कर सकते हैं adb devices कनेक्टेड डिवाइसों की सूची प्राप्त करने के लिए और फिर चलाएं adb -s DEVICE_SERIAL_NUM install... सूचीबद्ध हर डिवाइस के लिए।

कुछ (बैश) की तरह:

adb devices | tail -n +3 | cut -sf 1 -d " " | xargs -iX adb -s X install ...

टिप्पणियों का सुझाव है कि यह नए संस्करणों के लिए बेहतर काम कर सकता है:

adb devices | tail -n +2 | cut -sf 1 | xargs -iX adb -s X install ...

मैक ओएसएक्स के लिए (लिनक्स पर परीक्षण नहीं किया गया):

adb devices | tail -n +2 | cut -sf 1 | xargs -I {} adb -s {} install ...

69
2017-12-22 23:25



धन्यवाद! दुर्भाग्य से मैं स्क्रिप्ट चलाने के लिए असमर्थ था। मैं शैल स्क्रिप्टिंग में एक विशेषज्ञ नहीं हूँ। मुझे त्रुटि मिलती है: xargs: illegal option -- i usage: xargs [-0opt] [-E eofstr] [-I replstr [-R replacements]] [-J replstr] [-L number] [-n number [-x]] [-P maxprocs] [-s size] [utility [argument ...]] - Sheehan Alam
बदलने की कोशिश करो -iX साथ में -I X - kichik
कोई त्रुटि नहीं, लेकिन उस पंक्ति को निष्पादित करने के बाद कुछ भी नहीं होता है - Sheehan Alam
क्या आपने प्रतिस्थापित किया था ... आपके एपीके नाम के साथ? पूरे अंतिम को बदलने का प्रयास करें adb के साथ बुलाना echo X यह सुनिश्चित करने के लिए कि यह उन मूल्यों को प्रिंट करता है जिन्हें आप उम्मीद करेंगे। - kichik
adb devices | tail -n +3 | cut -sf 1 -d " " | xargs -I X echo X -s X install SONR कुछ भी प्रिंट नहीं करता है - Sheehan Alam


अन्य उत्तरों बहुत उपयोगी थे हालांकि मुझे जो कुछ चाहिए वह काफी नहीं था। मैंने सोचा कि अगर मैं अन्य पाठकों के लिए अधिक स्पष्टता प्रदान करता हूं तो मैं अपना समाधान (एक खोल स्क्रिप्ट) पोस्ट करूंगा। यह एकाधिक apks और किसी भी mp4s स्थापित करता है

echo "Installatron"

for SERIAL in $(adb devices | tail -n +2 | cut -sf 1);
do 
  for APKLIST in $(ls *.apk);
  do
  echo "Installatroning $APKLIST on $SERIAL"
  adb -s $SERIAL install $APKLIST
  done

  for MP4LIST in $(ls *.mp4);
  do
  echo "Installatroning $MP4LIST to $SERIAL"
  adb -s $SERIAL push $MP4LIST sdcard/
  done
done

echo "Installatron has left the building"

उन सभी अन्य उत्तरों के लिए धन्यवाद जो मुझे इस बिंदु पर पहुंचा।


12
2018-02-11 23:23





किचिक की प्रतिक्रिया से तैयार एक कार्यात्मक एक लाइन कमांड है (धन्यवाद!):

एडीबी डिवाइस | पूंछ-एन +2 | कट-एसएफ 1 | xargs -iX adb -s एक्स install -r * .apk

लेकिन यदि आप मेवेन का उपयोग करना चाहते हैं तो यह भी आसान है:

एमवीएन एंड्रॉइड: तैनाती


10
2017-09-21 20:18



मैं एंड्रॉइड के लिए इसे कैसे स्थापित करूं? - Igor Ganapolsky
मेरे लिए काम नहीं करता है। आउटपुट: xargs: adb: सिग्नल 13 द्वारा समाप्त किया गया - Dima Star


एक और छोटा विकल्प ... मैंने यह जानने के लिए इस पृष्ठ पर ठोकर खाई -s $SERIAL वास्तविक adb कमांड से पहले आना है! धन्यवाद stackoverflow!

for SERIAL in $(adb devices | grep -v List | cut -f 1);
do `adb -s $SERIAL install -r /path/to/product.apk`;
done

6
2017-11-14 17:38





डेव ओवेन्स से सभी उपकरणों पर किसी भी कमांड को चलाने के लिए सामान्यीकृत समाधान:

for SERIAL in $(adb devices | grep -v List | cut -f 1);
do echo adb -s $SERIAL $@;
done

इसे "adb_all" जैसी कुछ स्क्रिप्ट में रखें और एक ही डिवाइस के लिए एडीबी के रूप में उपयोग करें।

मुझे एक और अच्छी चीज मिली है जो प्रत्येक कमांड के लिए कांटा पृष्ठभूमि प्रक्रियाओं को है, और उनके पूरा होने की प्रतीक्षा करें:

for SERIAL in $(adb devices | grep -v List | cut -f 1);
do adb -s $SERIAL $@ &
done

for job in `jobs -p`
do wait $job
done

फिर आप ऐप इंस्टॉल करने और गतिविधि शुरू करने के लिए आसानी से एक स्क्रिप्ट बना सकते हैं

./adb_all_fork install myApp.apk
./adb_all_fork shell am start -a android.intent.action.MAIN -n my.package.app/.MainActivity

5
2018-06-19 13:11



मुझे यह सुझाव काफी पसंद आया। मेरे में महान काम करता है ~/bin फ़ोल्डर। - Jack O'Connor


मुझे पसंद आया काम कर रहे मैट की लिपि लेकिन सोचा कि इसे थोड़ा सुधार किया जा सकता है, यहां मेरा संशोधित संस्करण है:

#!/bin/bash

install_to_device(){
local prettyName=$(adb -s $1 shell getprop ro.product.model)
echo "Starting Installatroning on $prettyName"
for APKLIST in $(find . -name "*.apk" -not -name "*unaligned*");
  do
  echo "Installatroning $APKLIST on $prettyName"
  adb -s $1 install -r $APKLIST
  adb -s $1 shell am start -n com.foo.barr/.FirstActivity;
  adb -s $1 shell input keyevent KEYCODE_WAKEUP
  done
  echo "Finished Installatroning on $prettyName"
}

echo "Installatron"
gradlew assembleProdDebug

for SERIAL in $(adb devices | tail -n +2 | cut -sf 1);
do 
  install_to_device $SERIAL&
done

मेरा संस्करण एक ही चीज़ को छोड़कर करता है:

  • यह परियोजना की जड़ से apks पाता है
  • यह एक साथ हर डिवाइस पर स्थापित करता है
  • इसमें apks के "unaligned" संस्करणों को शामिल नहीं किया गया है (इन्हें वैसे भी गठबंधन संस्करणों द्वारा स्थापित किया जा रहा था
  • यह उनके डिवाइस आईडी के बजाय फोन के पठनीय नाम दिखाता है

अभी भी कुछ तरीकों से सुधार किया जा सकता है लेकिन मैं इसके साथ काफी खुश हूं।


3
2018-04-24 15:06



इस स्क्रिप्ट के आधार पर मैंने यूनिटी ऐप बिल्ड के लिए एक संस्करण बनाया benoitfreslon.com/fr/2017/08/... - Benoît Freslon


निम्न आदेश काम करना चाहिए:

$ adb devices | tail -n +2 | head -n -1 | cut -f 1 | xargs -I X adb -s X install -r path/to/your/package.apk

एडीबी डिवाइस डिवाइस की सूची देता है। अंत में अंतिम खाली रेखा को हटाने के लिए दूसरी पंक्ति से शुरू करने के लिए पूंछ-एन +2 और सिर -1 एन का उपयोग करें। डिफ़ॉल्ट टैब डिलीमीटर के साथ कट के माध्यम से पिपिंग हमें पहला कॉलम मिलता है जो सीरियल हैं।

प्रत्येक धारावाहिक के लिए adb कमांड चलाने के लिए xargs का उपयोग किया जाता है। यदि आप पुनः इंस्टॉल नहीं कर रहे हैं तो -r विकल्प हटाएं।


2
2018-01-31 04:16



यह केवल हेड कमांड से -1 को हटाए जाने के बाद ही काम करता है और 1 के साथ प्रतिस्थापित किया जाता है। इसके अलावा यह केवल पहले डिवाइस पर स्थापित है, सभी नहीं। यदि मैं हेड कमांड पर -1 के साथ -1 को प्रतिस्थापित नहीं करता हूं तो मुझे एक ./adb डिवाइस मिलते हैं पूंछ-एन +2 | सिर -1 एन सिर: अवैध लाइन गिनती -1 - Siddharth
सिर: अवैध रेखा गणना - -1 - Igor Ganapolsky


साथ में यह स्क्रिप्ट आप बस कर सकते हैं:

adb+ install <path to apk>

स्वच्छ, सरल।


2
2018-05-31 05:07



बिल्कुल सही, अगर हम इसे जीनमोशन उपकरणों के साथ उपयोग कर सकते हैं, जो टीसीपीआईपी के माध्यम से कनेक्ट होते हैं ... उन्हें संदर्भित करने का कोई तरीका नहीं - Jose_GD
@ जोसे_जीडी क्यों नहीं? मेरा जवाब देखें, मैंने सफलतापूर्वक इसका उपयोग किया - Drew
@ ड्रू क्षमा करें, आप सही हैं। मैंने बाद में सीखा कि-ip_address संभव है। - Jose_GD
समानांतर में ऐसा करने का कोई तरीका? फिलहाल यह स्क्रिप्ट अनुक्रमिक रूप से एक समय में एक डिवाइस पर स्थापित होती है। - Igor Ganapolsky


यदि आप उन डिवाइसों का उपयोग नहीं करना चाहते हैं जिन्होंने एडीबी सक्षम नहीं किया है; इसे इस्तेमाल करो

मैक / लिनक्स

adb devices | grep device | grep -v devices | awk '{print$1}' | xargs -I {} adb -s {} install path/to/yourApp.apk 

adb devices | grep device | grep -v devices | cut -sf 1 | xargs -I {} adb -s {} install path/to/yourApp.apk

2
2018-05-10 23:39





इस कमांड लाइन उपयोगिता का प्रयोग करें: एडीबी foreach


1
2017-09-30 16:38