HOME
  Security
   Software
    Hardware
  
FPGA
  CPU
   Android
    Raspberry Pi
  
nLite
  Xcode
   etc.
    ALL
  
LINK
BACK
 

2015/07/16

Heliunアプリを使って非Rooted端末でアプリのデータ領域をバックアップ・リストアする方法 Heliunアプリを使って非Rooted端末でアプリのデータ領域をバックアップ・リストアする方法

(adbコマンドで Android端末のバックアップの作成、リストアの手順)

Tags: [Android開発], [Androidアプリ]




●非Rooted端末でアプリのデータ領域をバックアップ・リストアする方法

 adbコマンドで Android端末のバックアップの作成、リストアの手順


● Android 4.0以降から非Rooted端末でもアプリのデータ領域のバックアップが可能に

 Android 4.0以降から非Rooted端末でもアプリのデータ領域のバックアップ・リストアできる様になりました。

 準備として、
 1) Android端末を開発者モードの設定で USBデバッグを有効にする。
 2) USBケーブルでパソコンに繋ぐ
 3) パソコンに ADBドライバを組み込み
 4) DOSコマンドラインで adbコマンドを入力する
 となります。


●アプリを使う場合、Helium

 2019/04 Helium 1.1.4.6と、
 Xiaomi Mi 4c MIUI 10.1 Andoid 7.0
 Xiaomi Redmi Note 5A Prime MIUI 10.2 Andoid 7.1.2
 Xiaomi Redmi 6A MIUI 10.2 Andoid 8.1
 Xiaomi Mi Play MIUI 10.2 Andoid 8.1
 で動作しました。

 上記の操作が面倒な場合は ClockworkModの作者が作った Helium - App Sync and Backupをインストールします。
 Androidアプリ
Helium - App Sync and Backup

 パソコン側アプリ(Windows、Mac、Linuxに対応)
Helium Desktop
[GitHub] Helium Desktop Installer and Android App

 platform-tools(ADBコマンド等が入っています)
platform-tools-latest-darwin.zip Mac
platform-tools-latest-linux.zip Linux
platform-tools-latest-windows.zip Windows

 ADB Drivers for Windows
ADB Drivers for Windows

 2016/10 追記 Heliumすげー楽だわ!(ちなみにパソコン版のインストールも必要で、バックアップ実行中は USBケーブルで接続する必要が有ります。)
 Android本体側で Helium Serverをオンにして、表示される URLをパソコンのブラウザでアクセスすれば簡単にパソコンにバックアップファイルを保存できます。超便利。
 (最初はパソコンにアプリをインストールするのに抵抗があったから使わなかったが、使ってみてビックリ!もの凄く便利!)


● Heliumでパソコン側アプリ Helium Desktopをインストールせずに使用する方法

 Linux版の中身を見たら単なるシェルスクリプトで APKのパスを CLASSPATHに設定して、ShellRunner2を実行しているだけでした。

run.sh
BASE=$(dirname $0)
pkg=$($BASE/adb shell pm path com.koushikdutta.backup)
# apparently pm path appends a carriage return which screws
# up the class name in dalvikvm invocation
pkg=$(echo $pkg | cut -d : -f 2 | sed s/\\r//g)
echo $pkg
$BASE/adb shell << EOF
CLASSPATH=$pkg app_process /system/bin com.koushikdutta.shellproxy.ShellRunner2 $@ &
exit
EOF

 同じ事を Windowsでも行なえればパソコン側のアプリの Helium Desktopのインストールが不要になります。

> adb shell pm path com.koushikdutta.backup
package:/data/app/com.koushikdutta.backup-1/base.apk
 (Android 5.1の場合の結果)

echo $pkg | cut -d : -f 2 | sed s/\\r//g
 は、上記の文字列から package:の後を取り出す。
/data/app/com.koushikdutta.backup-1/base.apk
 その後、
adb shell
 を実行して、shellの中で
CLASSPATH=/data/app/com.koushikdutta.backup-1/base.apk app_process /system/bin com.koushikdutta.shellproxy.ShellRunner2 $@ &
 を実行する。

 Linux版の run.shと同じ事をする Windowsのコマンドライン(adbはあらかじめインストールしておく)
 バッチリ使う事ができました。

●コマンドラインでコピペで流し込む場合

 2017/12 Helium 1.1.4.6と、
 Xiaomi Mi 4c MIUI 10.1 Andoid 7.0
 Xiaomi Redmi Note 5A Prime MIUI 10.2 Andoid 7.1.2
 で動作しました。

 2018/11 Helium 1.1.4.6と、
 Xiaomi Redmi Note 5A Prime MIUI 10.2 Andoid 7.1.2
 Xiaomi Redmi 6A MIUI 10.2 Andoid 8.1
 で動作しました。

 2019/04 Helium 1.1.4.6と、
 Xiaomi Redmi 6A MIUI 10.2 Andoid 8.1
 Xiaomi Mi Play MIUI 10.2 Andoid 8.1
 で動作しました。

rem コマンドラインでコピペで流し込む場合
set ADB_CMD=adb shell pm path com.koushikdutta.backup
for /f "DELIMS=:, TOKENS=2" %A in ('%ADB_CMD%') do set PKG=%A
echo %PKG%

rem ここで 5秒待つ
timeout /T 5 /NOBREAK

set ADB_SHELL_CMD=CLASSPATH=%PKG% app_process /system/bin com.koushikdutta.shellproxy.ShellRunner2 $@ &
echo %ADB_SHELL_CMD%
adb shell %ADB_SHELL_CMD%

●バッチファイルで実行する場合(FOR文の %Aが %%Aになる)
Helium.bat
rem バッチファイルで実行する場合
set ADB_CMD=adb shell pm path com.koushikdutta.backup
for /f "DELIMS=:, TOKENS=2" %%A in ('%ADB_CMD%') do set PKG=%%A
echo %PKG%

rem ここで 5秒待つ
timeout /T 5 /NOBREAK

set ADB_SHELL_CMD=CLASSPATH=%PKG% app_process /system/bin com.koushikdutta.shellproxy.ShellRunner2 $@ &
echo %ADB_SHELL_CMD%
adb shell %ADB_SHELL_CMD%


●禁断の HeliumHackアプリ化

 上記のコマンドラインの手順を Androidアプリ化してアプリで行なわせる様にしたら、アンドロイド端末単体で Heliumを活性化する事ができました。(嘘)
 アプリ(APKファイル)は危険なので非公開とします。

 ※ と思いきやアプリ活性化方式では PCダウンロードモードで正常に動きませんでした。 上記のコマンドラインでの adb接続方式なら大丈夫です。

 コマンドラインのパッケージ指定は面倒なので固定文字列にしています。
 下記の要領で、一部は伏字にしています。

import java.io.DataOutputStream;

    Process _process = Runtime.getRuntime().exec("sh");
    DataOutputStream _outputStream = new DataOutputStream(_process.getOutputStream());

    String command = "CLASSPATH=/data/app/com.k0ush1kdutt@.backup-1/base.apk app_process /system/bin com.k0ush1kdutt@.shellproxy.ShellRunner2 $@\n";

    _outputStream.writeBytes(command);
    _outputStream.flush();



●アプリを使う場合、Holo Backup

 旧名 Simple ADB Backup

[Tool][Windows/Linux][4.0+] Holo Backup - Full backup without root!
[GitHub] omegavesko/HoloBackup
master.zip これを解凍して使う

 2016/10 追記 使い物にならない。


● Android adb backup restoreコマンドの使い方

 私の場合は、上記アプリをインストールするのが嫌なのでコマンドラインでポチポチ操作します。
 → 上記のアプリ不要方式を開発したので Heliumを使用する様になりました。

adb backup [-f <file>] [-apk|-noapk] [-shared|-noshared]
             [-all] [-system|-nosystem] [<packages...>]
   - write an archive of the device's data to <file>.
         If no -f option is supplied then the data is written
          to "backup.ab" in the current directory.
         (-apk|-noapk enable/disable backup of the .apks themselves
            in the archive; the default is noapk.)
         (-shared|-noshared enable/disable backup of the device's
            shared storage / SD card contents; the default is noshared.)
         (-all means to back up all installed applications)
         (-system|-nosystem toggles whether -all automatically includes
            system applications; the default is to include system apps)
         (<packages...> is the list of applications to be backed up.
            If the -all or -shared flags are passed, then the package
            list is optional.  Applications explicitly given on the
            command line will be included even if -nosystem would
            ordinarily cause them to be omitted.)

adb restore <file>
   - restore device contents from the <file> backup archive

 簡単な英語なので見れば分かると思いますが、、、

 例:全部のインストール済みアプリのデータとアプリ本体をバックアップ
adb backup -f all_app_and_data.bd -apk -noshared -nosystem -all

 例:全部のインストール済みアプリのデータとアプリ本体をバックアップ(SDカード領域を含む)
adb backup -f all_app_and_data.bd -apk -shared -nosystem -all

 例:上記のバックアップをリストア
adb restore all_app_and_data.bd

● adb shell pm list packagesコマンドでアプリ一覧を取得する方法

 システムアプリを含むアプリの一覧を取得(パッケージ名一覧)
adb shell pm list packages

 システムアプリのみの一覧を取得(パッケージ名一覧)
adb shell pm list packages -s

 インストール済みアプリの一覧を取得(パッケージ名一覧)
adb shell pm list packages -3

 アンインストールしたアプリの一覧を取得(パッケージ名一覧)
adb shell pm list packages -u

●パッケージ名を指定してアプリ単位でバックアップする場合

 例:「2ちゃんねるビュアー 多機能版 つぼろいど改」をバックアップする場合
adb backup -f tubokai.bd -apk -noshared jp.ne.neko.freewing.TuboroidoKai

 上記のバックアップデータをリストアする場合
adb restore tubokai.bd


● ストレージや SD cardにデータが有るかを調べる方法

 adb shell ls -l /mnt/sdcard/Android/data
 adb shell ls -l /mnt/sdcard2/Android/data
 でアプリのパッケージ名が出てくるかを調べる。


●(参考)バックアップ用バッチファイル

backup.bat
@echo off
echo バックアップします。
pause
rem for /f %i in ('adb shell pm list packages -3') do call adb_backup.bat %i
for /f %%i in ('adb shell pm list packages -3') do call :adb_backup %%i
exit /b

:adb_backup
set pkgtmp=%1
set pkg=%pkgtmp:~8%
echo %pkg%
rem adb shell input tap 530 950
adb backup -f %pkg%.bd -apk -noshared -nosystem %pkg%
pause
exit /b


●俺メモ

● run-asコマンドは Debugビルドだけ可能。
adb shell

run-as jp.ne.neko.freewing.TuboroidoKai
# run-as: package not debuggable: jp.ne.neko.freewing.TuboroidoKai

cp /data/data/jp.ne.neko.freewing.TuboroidoKai/

● adb backupコマンド、Android 12でも使える
adb backup {パッケージ名}

adb backup -noapk jp.ne.neko.freewing.TuboroidoKai

> adb restore backup.db
WARNING: adb restore is deprecated and may be removed in a future release
adb: unable to open file backup.db: No such file or directory

> dir
2023/01/14  16:08        29,455,589 backup.ab

> adb restore backup.ab
WARNING: adb restore is deprecated and may be removed in a future release
Now unlock your device and confirm the restore operation.



Tags: [Android開発], [Androidアプリ]



[HOME] | [BACK]
リンクフリー(連絡不要、ただしトップページ以外は Web構成の変更で移動する場合があります)
Copyright (c) 2015-2023 FREE WING,Y.Sakamoto
Powered by 猫屋敷工房 & HTML Generator

http://www.neko.ne.jp/~freewing/android/android_backup_restore/