Приложения не устанавливаются с восстановлением adb

У меня есть устройство Android 7.0 без рута (NVIDIA Shield Tablet), для которого ранее была создана резервная копия с помощью

adb backup -apk -shared -all -nosystem -f mybackup.ab

Но восстановить его с

adb restore mybackup.ab

приводит к тому /Android/data, что и т.д восстанавливаются, но приложения из apk файлов не устанавливаются, ошибок нет.

Мне пришлось извлечь файлы apk из mybackup.ab и установить их вручную в пакетном режиме с расширением adb install <...>.apk. После этого все было хорошо.

Я совершенно уверен, что у меня ранее была подобная проблема с 6.0. и гелий / углерод раньше, но думал, что это было связано с выбранным мной методом резервного копирования.

В чем проблема adb restore? Это потому, что устройство не рутировано? Почему adb installтогда работает так, как ожидалось?

@SkylarMT Пока нет. Все равно придется использовать adb installв пакетах. Надеюсь, кто-нибудь может помочь в этом.
У меня был частичный успех с помощью Titanium Backup для восстановления файла резервной копии adb. Он требует root и не получил все, но восстановил более половины установленных мной приложений.
Посмотрите, поможет ли это решение

Ответы (3)

Я немного адаптировал скрипт niels, чтобы исправить некоторые проблемы с ним:

#!/bin/bash

set -e

if [ $# -ne 1 ]; then
  echo "Usage: $0 <package-name>"
  exit 1
fi

echo -n "Enter password: "
read -s password
echo

java -jar abe.jar unpack $1 $1.tar "$password"
tar -xf $1.tar --wildcards '*/base.apk'
rm $1.tar
for apk in apps/**/a/base.apk; do
  adb install "$apk" || true
done

adb restore $1

echo "Ready"

Просто загрузите последнюю версию abe.jarс https://github.com/nelenkov/android-backup-extractor/releases и запустите скрипт с файлом резервной копии в качестве аргумента. Скрипт требует javaустановки.

Я решил это с помощью следующего скрипта

#!/bin/bash
killall adb > /dev/null 2>&1
set -e

if [ $# -ne 1 ]; then
  echo "Usage: $0 <package-name-without-ab>"
  exit 1
fi

export PATH=/opt/jdk1.8.0_152_jce/jre/bin:$PATH
ab=$1.ab
java -jar /opt/android-backup-extractor-20160710-bin/abe.jar unpack $ab $ab.tar apw; tar -xf $ab.tar --wildcards '*.apk' --strip-components=3
mv base.apk $ab.apk
rm $ab.tar
adb install $ab.apk

adb restore $ab

echo "Ready"

Кроме того, вам понадобится программа для извлечения резервных копий Android. Как бы то ни было, по моему опыту, резервное копирование adb по-прежнему небезопасно. Прежде всего, некоторые приложения могут установить флаг, поэтому они не будут резервными. А восстановление работает только иногда и не обязательно, например если сменить устройство. Жаль, что в 2018 году только Titanium Backup хорошо работает, если у вас есть рутированный телефон.

Huawei Backup также хорошо работает на телефонах Huawei. Но до Титаниума далеко :-(

Команда adb restoreне устанавливает .apk обратно. На самом деле, эта команда предназначена только для обратной записи системных файлов и файлов данных. - Сайт Android-разработчика

Если вы хотите автоматизировать процесс установки приложений:

  1. Добавить все извлеченные .apk в одну папку
  2. Введите for %f in (C:\_apk folder location_\*.apk) do adb install "%f"ПРИМЕЧАНИЕ. Если у вас есть файлы .apk, в именах которых есть пробелы, adb не распознает пробелы , перепишите их с помощью _ или чего-либо еще.
Не могли бы вы указать ссылку на эту информацию, если она верна? Поскольку adb backupрезервное копирование всего, включая apks, я ожидаю, что это adb restoreсделает противоположное. Потому что в противном случае кажется, что apks просто тратят место в файле .ab.
В таблице 1.> Команды резервного копирования и восстановления на сайте Android devadb restore команда описана как «Восстановить содержимое устройства из файла», она интерпретируется для меня как распаковка файлов и размещение только на устройстве, а не в установочных пакетах. Я думаю, что имеет смысл для установки использовать команду define adb install(она не обязательно имеет функциональность установки в других командах), но я согласен, что это было бы неплохо :)
@MaTTBelis «Восстановить содержимое из файла» для меня означает восстановить все, что содержится в файле (включая установку APK, если он там есть). И до MM он делал именно это (я использую это с Android 4, когда он был представлен). Проблемы начались только с Android 7, где ошибка, похоже, не давала установить APK. На некоторых устройствах вы обнаружите, что в logcat он пытается именно это (но терпит неудачу, не говоря об этом). На самом деле, для этих устройств ответ Нильса работает.