Как я могу использовать adb для удаления APK с нескольких подключенных устройств?

adb uninstall <package name> работает, когда подключено 1 устройство.

Как я могу выполнить эту работу для подключенных 5+ устройств?

Ответ 1

Вот простой script, который я использую для выполнения команд adb на всех моих устройствах, должен работать под Linux и MacOsX.

Возможно, вам придется адаптировать его к своей среде разработки.

#!/bin/bash
# Script adb+
# Usage
# You can run any command adb provide on all your current devices
# ./adb+ <command> is the equivalent of ./adb -s <serial number> <command>
#
# Examples
# ./adb+ version
# ./adb+ install apidemo.apk
# ./adb+ uninstall com.example.android.apis

adb devices | while read line
do
    if [ ! "$line" = "" ] && [ `echo $line | awk '{print $2}'` = "device" ]
    then
        device=`echo $line | awk '{print $1}'`
        echo "$device [email protected] ..."
        adb -s $device [email protected]
    fi
done

Ответ 2

Чтобы удалить пакет, когда подключено несколько устройств, вы можете использовать следующие команды.

  • adb devices Это приведет к отображению списка подключенных элементов.

    List of devices         attached  
    1234c112fsasfl          device  
    53fsks22323233          device  
    192.168.56.101:5555     device
    
  • adb -s your_device_key uninstall your_package_name.

    $ adb -s 1234c112fsasfl uninstall com.test.sample
    
    success - (if the device contains the apk with the specified package name)  
    failure - (if the device did not contain the apk with the specified package name)
    

Ответ 3

Вам нужно будет написать script, который вызывает adb несколько раз, и при каждом запуске он укажет серийный номер для каждого подключенного устройства с ключом -s.

Альтернативой является использование Android Maven plugin, который может просто перебирать все подключенные устройства (или только эмуляторы или устройства). См. я nteraction с главой устройств в книге Maven: The Complete Reference, которую я написал.

Также не то, что взаимодействие с несколькими устройствами в плагине Android Maven также работает для тестов push, pull, install и running.

Ответ 4

В JAVA:

public class main {
    private final static String packageName = "com.mypackage.xxx";

    public static void main(String[] args) throws IOException, InterruptedException {
        new main().doStuff();
    }

    private void doStuff() throws IOException, InterruptedException {

        Runtime rt = Runtime.getRuntime();

        String command = "adb devices -l";
        Process pr = rt.exec(command);

        ArrayList<HashMap<String, String>> devices = new ArrayList<HashMap<String, String>>();
        BufferedReader bf = new BufferedReader(new InputStreamReader(pr.getInputStream()));
        String l = "";
        while ((l = bf.readLine()) != null) {
            String[] res = l.split("\\s{2,}");
            if (res.length == 2) {
                HashMap<String, String> device = new HashMap<String, String>();
                device.put("serial", res[0]);
                device.put("name", res[1]);
                devices.add(device);
            }
        }

        String commandUninstall = "adb -s %s uninstall %s";
        for (HashMap<String, String> map : devices) {
            String serial = map.get("serial");
            String finalCommanUnisntall = String.format(commandUninstall, serial, packageName);
            System.out.println(finalCommanUnisntall);

            Process pr2 = rt.exec(finalCommanUnisntall);
            BufferedReader bf2 = new BufferedReader(new InputStreamReader(pr2.getInputStream()));
            String l2 = "";
            while ((l2 = bf2.readLine()) != null) {
                System.out.println(l2);
            }
        }


    }
}

Ответ 5

Я понимаю, что этот вопрос уже имеет принятый ответ, но:

for d in $(adb devices -l | sed '1d' | sed '$d' |  awk '{print $1}'); do adb -s $d uninstall your.pkg.id.here; done

Подкоманда сначала:

  • перечислить все подключенные устройства
  • разделите первую строку
  • разделите окончательную строку
  • напечатать первый столбец (идентификатор устройства)

Затем внешний цикл for:

  • для каждого идентификатора устройства
  • удалите your.pkg.id.here из указанного устройства.