Перенос данных и приложений на новое устройство с помощью adb (LineageOS 17)

Это перевод статьи Marco Balmer. Migrating data and apps to a new device with adb (LineageOS 17).

Содержание

Аннотация

В этой статье описано как перенести приложения и данные со старого смартфона на новый (LineageOS 17.1) с помощью adb pull и adb push.

Требования

При использовании Fairphone и LinageOS 17.1 нужно включить следующие опции:

  • Отладка по USB
  • Отладка суперпользователем

Шаг 1,

включить режим суперпользователя в терминале.

adb root

Снятие резервной копии

Шаг 2,

определить, куда сохранить резервную копию.

BACKUPDIR="~/"

Шаг 3,

запустить три задачи adb pull для сохранения трёх видов данных:

  • данных пользователя (data/user/0),
  • приложений .apk (data/app),
  • внутреннего хранилища (mnt/sdcard).

Делается это с помощью следующих команд:

cd $BACKUPDIR
adb pull -a data/user/0
adb pull -a data/app
adb pull -a mnt/sdcard

(Необязательный) шаг 4,

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

rm -rf com.android.* android* com.caf.fmradio org.lineageos* lineageos.platform *qualcomm*

Восстановление из резервной копии

Шаг 5,

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

adb kill-server
adb root

Шаг 6,

следующие команды скопируют сохранённое содержимое внутреннего хранилища на новое устройство:

cd $BACKUPDIR
adb push sdcard/ /mnt/

Шаг 7,

следующая команда установит все приложения на новое устройство:

time find ./app/ -type f -name base.apk -print0 -exec adb install {} \;

Шаг 8,

следующая команда восстановит данные ваших приложений на новом устройстве:

adb push 0/ /data/user/

Шаг 9,

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

adb shell

# Сгенерируем скрипт для исправления прав доступа по данным из файла /data/system/packages.list:
cat /data/system/packages.list | awk '{print "chown u0_a" $2-10000 ":u0_a" $2-10000 " /data/data/"$1" -R"}' > /data/media/fix_perms.sh
sh /data/media/fix_perms.sh
rm /data/media/fix_perms.sh

exit

Шаг 10,

перезагрузите устройство и готово.

adb reboot

Заключительные замечания

Восстановить работу некоторых приложений таким образом не получится. Например:

Предлагаем воспользоваться собственными функциями резервного копирования этих приложений.

Сценарий

Пример сценария для съёма полной резервной копии устройства:

#!/bin/bash
set -x

if [ -z $1 ];
then
    echo "Ой!"
    exit 1
fi

BACKUP_DATE=$(date +%Y-%m-%d-%H%M)
BACKUPDIR=/srv/backup/shared/${BACKUP_DATE}_backup-fp2-${1}

mkdir -p $BACKUPDIR
cd $BACKUPDIR || exit $?

# Начинаем
adb kill-server
adb start-server
adb root || exit 1

BACKUP_SRC_DIRS=(
    'mnt/sdcard'
    'data/app'
    'data/user/0'
)

i=0
until [ -z ${BACKUP_SRC_DIRS[i]} ];
do
    adb pull -a ${BACKUP_SRC_DIRS[i]}
    i=$(( $i + 1 ))
done

Ссылки