・2015/07/16
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/