Android, 時々Web

Androidアプリを作ったり、Webサービスを作ったりする中で困ったことや詰まったことを解決したときの備忘録です。備忘録なので、正しい答えが書いてあるとは限りません。

Android版LINEでトーク履歴のインポートに失敗した時の対処法

こんにちは。

 

スマホをリフレッシュ品に交換したので、もろもろデータを移行し、もちろんLINEのトーク履歴もバックアップをしておいたので、スムーズにトーク履歴をインポートして・・いたのですが、

一人だけ「トーク履歴のインポートに失敗しました」と表示されてインポートできない!!!一番大事なデータなのに!!!なんてこった!!!

 

こんな時はGoogle先生だ、と早速検索しても、あんまり情報が出てこない。。

 

唯一、

【LINE】「トーク履歴のインポートに失敗しました」が表示されるパターン | LINEの仕組み

がそれらしいことを書いてましたが、

バックアップファイルは、暗号化(と思われるもの)が施されており、バックアップファイルを開いて解読することもできません

なので、端末の再起動2.4万PV再インストール40.3万PVあたりが対策の候補となりますが、できることはあまりありません。

以前からこのエラーは原因不明90.2万PVなので、復元には失敗する可能性がある前提でバックアップしなければなりません。この履歴に関しては、LINEの運営も救済してくれません。

本当に消えたら困る場合は、別途テキストバックアップやスクリーンショットを保険として残しておくべきです

とのことで、要は諦めろとのこと。

 

いやいや、諦められません。

他のトークルームのトーク履歴はちゃんとインポートできたので、エクスポートとインポートの手順が間違ってるとか、そういうことではないはずです。

また、ZIPファイルもちゃんとあるので、この中にデータが入ってるはずです。

 

ですが、先程の引用サイトを参照すると、暗号化(と思われるもの)が施されていて解読できないと・・・。 

どれだけggっても同じようなことしか書いてないので、人に頼るのはやめて、自分で調べてみました。

 

原因

いろいろと触っていて気づいたのは、インポートできないバックアップファイルは相対的にファイルサイズが大きいということです。

今回私が読み込めなかったものは640MBありました。

それだけトークをしたり、画像を送ったりしていたということですね。

 

(ちなみに、400MBくらいのものはちゃんとインポートできました。)

 

バックアップファイルの構造

バックアップファイルである「LINE_Android-backup-chat-XXXXXXXXXXXX.zip」を普通に解凍すると、「linebackup」というディレクトリが出現します。

この中にバックアップファイルが入っているということです。

そのさらに中には、「chat」と「image」というディレクトリがあります。これらがトークと画像たちに違いありません。

 

結論からいうと、「chat」ディレクトリにある「chat-XXXXXXXXXXXX」というファイルと「chat-XXXXXXXXXXXX.extra」というファイルはどちらもバイナリファイルになっており、解析は諦めました。ちょっとバイナリエディタで開いてみたのですが、知識がなさすぎるので解析できそうにありません。

 

では「image」ディレクトリはどうんなんだというと、これがすごく簡単で、「image」ディレクトリ下のファイルは全てそのまま画像や動画の暗号化されていないバイナリファイルです。

数字だけで拡張子がないものがダウンロード済みの画像ファイルで、「*.thumb」となっているのがサムネイル用の画像ファイルだと思われます。あとは「*.mp4」なんてのもあったので、動画もここにあるのでしょう。

 

これらのバイナリファイルは暗号化されていないので、拡張子を「.jpg」に変更するだけで、読み込み可能になります。

ファイルの命名規則は詳しくはわかりませんが、「XX」と「XX.thumb」というファイルは、サムネイルとその本体の対応になっているようです。

(例:「70」という画像のサムネイルが「70.thumb」)

thumbしか存在しないものは、送られてきたものの開かなかったファイルだと思われます(LINEで「保存期間が終了しました」とか出る状態のアレです)。

 

さて、バックアップファイルの構造と、読み込めない原因がわかりました。

これらを解決してトーク履歴をインポートできるようにしましょう!

 

解決法

トーク履歴がインポートできない原因は、どうもファイルサイズが原因のようでした。

また、バックアップファイルに含まれる画像郡はそのままバイナリファイルでした。

 

そうです、画像を圧縮してバックアップファイルのサイズを小さくすれば、トーク履歴のインポートができるようになるのです!!

(もし、画像なんかいらねえトークだけで十分だ!!という方がいらっしゃれば、「image」ディレクトリを削除すればいいだけでもいけます。画像を圧縮する代わりに「image」ディレクトリを削除してください。)

 

画像を圧縮するのはなんでもいいのですが、今回は「Caesium」を使いました。

 

それでは、実際にインポートに失敗するバックアップファイルを修復する手順を以下に示します。

 

修復手順

  1. 「LINE_Android-backup-chat-XXXXXXXXXXXX.zip」を展開します。
  2. 展開したディレクトリ直下に「linebackup」というディレクトリがあるので開きます。
  3. linebackupの直下に「image」というディレクトリがあるので、これを開きます。
  4. 「image」ディレクトリ以下の全ての「XX」と「XX.thumb」の後ろに「.jpg」を付与します。
  5. なんらかの画像圧縮ソフトで「XX.jpg」と「XX.thumb.jpg」を圧縮したりリサイズしたりします。(お好みの画質やサイズでいいですが、最終的に全てのファイルが400MBくらいに収まるようにしましょう)
  6. 圧縮した「XX.jpg」と「XX.thumb.jpg」の全てから「.jpg」を削除して名前を元に戻します。
  7. linebackupディレクトリをzip圧縮します。7-zipで圧縮しましたが、たぶんなんでもいいです。
  8. linebackup.zipができるので、それを最初の「LINE_Android-backup-chat-XXXXXXXXXXXX.zip」にリネームします。
  9. 完成した圧縮版のバックアップファイルを、端末のLINE_Backupディレクトリにコピーします。このディレクトリはLINEアプリからトークをバックアップした時にバックアップファイルが作成されるディレクトリです。(端末の内蔵ストレージの「/storage/emulated/0/LINE_Backup」にあるはずです)
  10. LINEアプリから「トーク履歴のインポート」を実行します。
  11. インポートできたら成功です!!

 

失敗する場合

この手順に従っても、うまくいかない場合があるかもしれません。

私の場合、うまくいったということに過ぎません。

失敗した場合は、次の点をもう一度確認してください。

  • 圧縮後の「LINE_Android-backup-chat-XXXXXXXXXXXX.zip」は400MB程度以下になっているか。
  • ディレクトリ構成は次のようになっているか
    LINE_Android-backup-chat-XXXXXXXXXXXX.zip
      +-- linebackup
             +--chat
             +-- image
  • もともとあったファイル以外に変なファイルが混入していないか

また、失敗した場合は「履歴削除」でトークルームを真っ白にしてからやりなおすといいかもしれません。(その場合、前回のバックアップタイミング以降のトーク履歴は永遠に失われることになります。。)

 

それでは、皆様の幸運をお祈りします。

 

※コメントして頂いたら分かる範囲で答えるかも知れません。