Я хочу написать простую программу (java), запускаемую на рабочем столе, чтобы сначала проверить, установлено ли какое-либо приложение на устройстве, а если нет, установить его. Для части установки я могу использовать команду adb install. Как проверить, установлено ли приложение на устройстве.
Вы можете найти свой ответ, например, на Github , а подробности — в документации разработчиков :
adb shell 'pm list packages [options] <FILTER>'
Печатает все пакеты, опционально только те, имя пакета которых содержит текст в формате .
Параметры:
-f: See their associated file. -d: Filter to only show disabled packages. -e: Filter to only show enabled packages. -s: Filter to only show system packages. -3: Filter to only show third party packages. -i: See the installer for the packages. -u: Also include uninstalled packages. --user <USER_ID>: The user space to query.
Как видите: если вы не указали -u
параметр, pm list
будут отображаться только установленные приложения. Отфильтруйте вывод для пакета, с которым вы хотите иметь дело. Если вывод «пустой», пакет не установлен:
adb shell 'pm list packages' | grep -x 'com.foobar'
не должен ничего выводить, если com.foobar
он не установлен.
Поскольку в своем вопросе вы ссылаетесь как на java, так и на adb, похоже, что вы знакомы с обоими.
Просто используйте ваше Java-приложение в качестве оболочки для выполнения системных команд adb.
Используя системные команды для adb, вы можете использовать ту же программу Java (оболочку adb) для проверки установки и фактического выполнения установки.
Вы можете заменить «пакеты pm list» любой из команд adb, выполняющих ваши намерения.
Это класс Java, который вы можете использовать. Конечно, ваше Java-приложение может искать в возвращаемой строке (ответе) приложения, которые вы хотите проверить.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class checkandroid {
static int exitstatus;
public static void main(String[] args) {
// TODO Auto-generated method stub
String shellcommand = "/opt/android/android-studio/sdk/platform-tools/adb shell pm list packages";
String response = runit(shellcommand);
System.out.println(response);
}
static String runit(String inputstr) {
String output = "";
exitstatus = 0;
Process p = null;
// -----------------------------------------------
try {
p = Runtime.getRuntime().exec(inputstr);
InputStream cmdStdOut = null;
InputStream cmdStdErr = null;
cmdStdOut = p.getInputStream();
cmdStdErr = p.getErrorStream();
String line = "";
String line1 = "";
BufferedReader stdOut = new BufferedReader(new InputStreamReader(
cmdStdOut));
BufferedReader stdErr = new BufferedReader(new InputStreamReader(
cmdStdErr));
while ((line = stdOut.readLine()) != null) {
// logger.info(line);
// System.out.println(line);
output += line + "\n";
}
stdOut.close();
System.out.print("Error Status: ");
while ((line1 = stdErr.readLine()) != null) {
// logger.info(line);
System.out.println(line1);
output += line1;
}
stdErr.close();
try {
p.waitFor();
} catch (InterruptedException e) {
// Auto-generated catch block
e.printStackTrace();
}
exitstatus = p.exitValue();
System.out.println(p.exitValue());
} catch (IOException e) {
// Auto-generated catch block
e.printStackTrace();
}
// -----------------------------------------------
return output;
}
}
Иззи
Чак
-r
switch toadb install
уже выполняет эту проверку и переустанавливает приложение (с сохранением всех данных), если оно уже существует.пользователь3734225