なーたのおぼえがき

なーたのおぼえがき

つくったものとか

Androidのアプリデータ移行

お久しぶりです。先日不注意というか、子供に激突され(向こうが突撃してきた)スマホ画面がバッキバキに。正確にはガラス部分だけなのでタッチパネルは効くし使えるんですが、大問題が一つ。ガラス、手に刺さるんですよ。
それによって買い替えというかまあスマホを変える必要が出てきまして、そこでKDDIと契約している関係上めっちゃ便利なシステム「故障紛失サポート」とよくわからん交換システムを利用して、まったく同じ機種のリフレッシュ品が届き、移行していっている最中です。
で、手順書曰くauのデータお預かり?みたいなやつを使えとのことなんですが、併せてGoogleさんのバックアップ&同期復元、galaxyクラウド(使用機種はSamsung galaxy s8です)を使用してデータ復元、よしこれで使えるね!となったはいいものの。
ええ、本当に残念なことに私が一番必要としているアプリケーションたち(日記、お小遣い帳など)のデータが一切保存対象に入っていないことに気が付きました。特に日記!!これほんと困る。ということでどうしても移行したいため、試行錯誤している経過を載せていきます(編集はリアルタイムでしていて、まとめ終わったら公開という形になっています)。
あ、お小遣い帳改め家計簿アプリはCSVin/exができたので解決済みです。いやあ便利便利。

いわゆる標準

先に挙げたauのデータお預かりサービスとGoogle先生のバックアップ、galaxyクラウドはだめだった、というかGoogle先生しかアプリ内容入ってなくてもうだめなので。
Google先生でデータ引継ぎができるアプリケーションはドライブのバックアップからアプリ選べばファイルという形で見られるので確認してね。
そしてこの三つはどう考えても検索で大量に引っかかってくるので割愛!
私の移行したいアプリはGoogle先生の引継ぎできるやつに入ってなかったんだよ!!泣きそう。

「JSバックアップ」というデータ移行アプリ

結論、だめ。
アプリインストール前にだめだということが分かったので試していません。
googleストアのレビューに対する回答で「アプリデータの引継ぎはできない。一括で入っていたアプリをダウンロードできるだけ」「ほかのアプリにデータに対してアクセスする権利がない」ということが明記されていました。そりゃそうだよね…なんとなくそうだろうなとは思ってた。
つまり、アプリケーションそのものであるAPKファイルのみバックアップ復元に対応してるってことになりますね。泣きたい。

ファイルを移そう

アプリだって所詮はファイルシステム上で走ってるプログラム。移行しようとすればファイル置き換えてどうにかなるんじゃないかな…?ということでアプリデータの保存場所に移動。
Androidでは内部ストレージのAndroid/data/[パッケージ名]というフォルダにアプリのデータは落ちていきます。SDカードに同名の階層ができてればそっちにも落ちるようにできたり。この辺まで書いてる時点ですでに半泣きです。
目的のフォルダを見つけ、中を確認すると…うーんこれは見事な空ファイル。こんなの移動したところでデータは動かない。だが物は試しもしかしたら隠しファイルとかであるかもしれん(死んだ目)
なかった。だよね!はーしんど…
ちなみに移行したいアプリは「無地日記」です。
ついでに言えばそのファイルなくても普通に動いたのでどう考えても無駄な行為です本当にありがとうございました。

そして行き詰る

アカウントを作るタイプじゃないし、どこかにデータが上がっているとは考えにくい…。正直どうしていいかわからなくなってきました。
ただそうなるとぱっと見で思いつくのはあとAPKにデータがある…?というものだけというわけでAPKを抽出する前にJSバックアップでできるのか(正確に言えば一覧を取得してきて新規で落としているのかどうかの確認)を検証。

というわけで「JSバックアップ」を一度検証する

さて、インストール終わってバックアップ作業をしているのですが。標準は基本的にもう移行終わっているのでアプリ一覧だけ取得して画像等、動画音声のバックアップをしているんですが、めっちゃ時間かかりそうなんですよね。ので私はイラっとしてもろもろを取りやめアプリ一覧だけに変更。すると瞬時に終わったので移行作業してみる。

結論。アプリ一覧からはだめでした。
一つだと手動で入れさせられたんですがそれもうバックアップっていう必要なくない??怒るよ???
まあ結論だけ言うと新しくAPKファイルを正規の場所から持ってくるだけでしたね。
しかもただのGoogle Storeへのリンク集。全部手動とかなめとんのか。

では次、APKバックアップというやつ。
これの面倒なところはアプリが多いとめっちゃ時間かかる挙句にキャンセル不可みたいで一度やっちゃうと地獄見るね、という感想でわかっていただけるかと。ちなみに私はいらないの消し忘れたまましてしまったので93個とかなってます。先が長い。
えーできました。やってみました。
結論から言うとできなかった。いえ、APKからのインストールはできました。
復元が成らなかったんです。うーん、どこにデータがあるんだ??

まずはデータの位置を探す

一応、という形でレビューを見ていったんですがみんな「バックアップがない」「広告やめい」しか言ってなくてほんとに草。標準仕様でバックアップはついていないようです。そりゃそう。そんなのあったらやってるわ。
ちなみにネットの海にも知見は漂っていませんでした。しょぼん。
で、APKのメタデータを見てみたのですが機種名とそのほかが載っている…?
サーバにありますかね、これ?データがサーバだと面倒というか…。
地獄のような手動コピーも若干視野に入れている状態になりましたね笑えん。

ということでこのメタデータを分析していきます。
簡単に手に入るけどさすがにさらしていいものか迷うな。
とりあえずぱっと見でわかることから
「無地日記」当然のごとくアプリ名ですね、はい次。
「jp.co.techmond.mujinikki」パッケージ名ですね、自明。はい次。
「40」突然の数字。不明ですね。次
「1.8.6」バージョンですね。次にわかるのは
「SCV36」えー、わかる人にはわかると思いますがauのGalaxyS8の商品コード?販売コード?みたいなやつですね。
この後ろにあるクッソながい英数字のやつが識別ID的な奴かなあと推測しているんですがどうなんだ。

というわけで、検証タイム。具体的に何をするのかというと新しいスマホのAPKを取得します。んで、メタデータを比較。
なんか開けるアプリが三種類あるなどうしよ。ということでまずはExcelで見てみます。
するとあら不思議ほかのデータは同じだというのに最後だけが違います。なーんでだ。answer:IDですなんてなったりしねえかな、というやつですね。しかもなんか二か所表示領域超えてるらしくオバーフローしてません?大丈夫?
スプレッドシート文字コード問題発生して文字化けしとる…。まあアプリ名だけなのでいいとしましょう。
Excelで見ると大丈夫だけど数らしきところがオーバーフロー、スプレッドシートで見ると文字化けするけど数はOK。
どうやら、数の二か所と最後の長ったらしいやつが違うっぽいですね
これ共通化したら私の日記、帰ってこない??というわけで思い立ったらやってみよう。怒られたら素直に謝ろう。というか私これ自分のとこからとったんですけどなんで変わるのこの鬼畜!!私のデータ返して!!

「APKファイル内のメタデータを置き換える」

ではまずAPKファイルを探します。今まで見てたのバックアップのやつだから探します。というか、まっさらな状態と比べて明らかにストレージ増えてんですよね…
せめて関係ファイルどれか分かるやつないかな?

という訳でやってみました。結果?聞かなくてもわかる気はするけどダメでした。
まずそもそもアクセス権がない(うちの子root化してないんですよ)
ということで別の手段を取るべく思考Time。

APKを解析してみよう

そもそもAndroidにかかわらずたいていのアプリケーションは大部分をAPKつまりインストールするアプリケーションファイル/フォルダに格納しています。つまりこれ見れたらたいていのことわかるよね?見れたら。
ということで、PC使えば普通に見れるやんって話(APKは署名付きZIPなので)なのですがぶっちゃけ本日これ書いてるのでいちいちPCで見たくないし何より環境整えるの面倒なんですよ。なぜなら三月頭にMBPが届くんですけど今のに入れたくないやつとかもろもろそっちに入れる予定なんです。よってこいつで環境整えたくねえ。
なのでそんなときの味方、スマホで簡単APK解析!Show Javaちゃん
play.google.com
はい、便利グッズ!
たまにしか使わないけど暇つぶしにはもってこい、Show Javaちゃんです。
現在インストール済みのアプリケーションのからも選択可能、SDカードからだって選択できちゃいます。便利便利。デコンパイルしてくれる子です。
えーっと今回は
f:id:Clairdeluna_eve:20190227223423j:plain
一番上。で、成功したんですけど。やっぱ見てもデータなさげなんですよね…。
ちなみに判断理由は、増えていたデータ量がおおよそ5MBだったのに対してそのサイズのデータが存在しなかったこと。もしちゃんとjava読めたらわかるのかもしれません。
一度だけ高校の時にアプリ作ってますけど、残念なことに自分の管轄のとこしか存じ上げないんで詳しいことは知りませんから正確にこうだ!とは言えませんけどね。
うーん、だめか。ということでどんどん手動引継ぎが近くなってきました…

パケット見てみよう

最後のあがき。もしこれでだめだったらもうあきらめるしかない。
でこれもPC使う?は?ないわーという個人事情によってスマフォーで完結することに。
そんなときの味k(ry
名前そのままPacket Captureちゃん!
play.google.com
入れてなんやかんやしたらアプリごとにキャプチャできるから便利よ!
というわけで見てみました。
そうしたらめっちゃ広告堕ちてきてるのはどうでもいいんだけど、私ネットワーク専門じゃないしよくわからんな!ということで広告と接続ok?とかその辺を除くと初回で落ちてくるらしい背景だの何だの。というか広告しか落ちてきてなくね???と思わなくもないんだけどそろそろ眠い。というか明らかに広告ばっかじゃん。

時間切れ…むりだったにゃん。次は殺す

じゃあどう考えても中にいるでしょ!どこよお前!ということがわかりました。収穫ですね。
ただ問題が一つ。めっちゃ重要な奴。これ、探しきるのにどのくらいかかるんでしょう?たぶんroot権限いりますよね?ユーザーじゃ移動できない参照権限のないファイルでしょうし。そうじゃなかったら全部見たしあるだろ。ということで今回制限時間があるんですよ。
なんせauに古い端末返却しなくてはいけませんから。
ということで地獄の手動コピー、はっじまっるよぉ★
送信方法は様々ですがもう二年間書いているので量がやばいし何がいいですかね。
今回はLINE引継ぎ前に終わらせたかったのでwifi Direct使って送信しました。
じっごくぅ

次引き継ぐときは意地でも探し出して楽に引き継ぎます。
もしくはこれ用に勝手に引継ぎツール作ってやります。