2015/12/1

在 Android 6.0 上免 Root 備份及還原 Line

這篇文章是「修正 Android 上免 Root 備份 Line 不正常的問題」的延續,這次是要從 Android 4.x 移到 Android 6.0 的手機上,以「免 Root 備份與還原 3.9.0v5」這個工具的命名模式,還原的標的手機用 B 為代碼,備份的來源手機就稱為 A。

在前一次操作時 A 與 B 手機都是 Android 4.x 的系統,除了 Line 的版本所造成的問題之外,並沒有遇到其他的情況。但完成了「1.A手機備份資料.bat」、「2.B手機還原資料.bat」的動作之後,要在 Anroid 6.0 的 B 手機上執行「3.B手機免root清除重登.bat」卻出現了問題!

B 手機上並沒有如預期地出現備份的畫面,同時電腦命令列視窗上也有以下的錯誤訊息:

abe unpack 錯誤
ab檔案 unpack tar錯誤

為了要解決問題,所以就著手研究了一下「3.B手機免root清除重登.bat」的執行細節,最後終於順利地把 Line 由 Android 4.x 備份並還原到 Android 6.0 上。由於會遇到的情況不只一個,以下分不同的小節按照備份序順說明解決的方式。

更新最新版本的 adb

「免 Root 備份與還原 3.9.0v5」所附的 adb.exe 應該不是最新的版本,由於「3.B手機免root清除重登.bat」和 「1.A手機備份資料.bat」一樣會執行 adb 的 backup 指令,但檢查「3.B手機免root清除重登.bat」的備份輸出檔 db.ab 卻發現檔案大小是 0。所以導致後續的動作出現錯誤,也由於 db.ab 的內容不正確,unpack 會出現錯誤是必然的情況。猜測應該是因為 adb.exe 與 Android 6.0 不相容,所以才沒有辦法在 Android 6.0 的手機上觸發備份的程序。

如果你的 A 手機已經是 Android 6.0,應該在「1.A手機備份資料.bat」時就會出現問題,最明顯的特徵就是 A 手機上沒有出現要求備份的畫面,而且備份很快就完成了,但檔案大小遠小於 14M。試著更新 adb.exe 到最新應該不會有錯,最少在我操作的環境是可行的。

不過更新的程序有點複雜,沒有辦法一鍵下載。首先要到 Android Developer Tool 網頁下載 SDK 工具,在執行安裝或解壓縮之後,進入 SDK 的根目錄中執行 SDK Manager.exe。SDK Manager 的畫面中,因為我們只是要 adb.exe 所以選擇清單中最上方的 Android SDK Platform-tools 並取消其他所有的勾選後,按下【Install 1 packages...】按鈕。官方網站中有相關的操作說明可供參考。

更新完成之後,可以在 SDK 的 platform-tools 目錄下找到 adb.exe,把檔案複製並覆蓋到「免 Root 備份與還原 3.9.0v5」所在的目錄。

請注意:如果你的 Line 已經更新到最新的版本,備份前,前一篇說明的降版程序還是要先執行。

在執行備份時,由於 Android 6.0 是預設全機加密,所以在手機上出現備份畫面時會要求要設定密碼,才能進行備份,這會和「免 Root 備份與還原 3.9.0v5」的說明有衝突。但也只能設定密碼,否則接下來的動作無法進行。密碼設定好了之後要記得,待會會用到。不過,所設定的密碼不用考慮強度的問題,隨便打一個字元也行。

當 A 手機是 Android 6.0 時,執行「1.A手機備份資料.bat」就會要在 A 手機上輸入備份的密碼。所以在 B 手機執行「2.B手機還原資料.bat」時就不能像「免 Root 備份與還原 3.9.0v5」的說明直接按還原,要把原本設定的備份密碼輸入之後才能成功地執行還原的程序。

完成備份之後最好檢查一下備份結果的檔案大小,如果小於 14M 接下來的步驟大概也不用試了,只能說你跟這個解決方案無緣了!

更新最新版本的 abe.jar

由於到了「3.B手機免root清除重登.bat」時還會再對 B 手機執行一次同機的備份與還原,所以一定會要在備與及還原時輸入密碼。但是在還原之前會需要做 unpack 的動作,批次檔中進行 unpack 的方法是使用 abe.jar,但「免 Root 備份與還原 3.9.0v5」的批次檔中並沒有指定密碼。

所以如果在備份時有設定密碼,「3.B手機免root清除重登.bat」在執行到這一步時會失敗。必須要修改「3.B手機免root清除重登.bat」的內容,在大約 51 行的指令最後加上備份時所設定的密碼字串。例如:在備份時使用的密碼是「0」,則修改的結果如下:


如果加了密碼還是會出現錯誤,有可能是 abe.jar 的版本還沒有支援使用密碼,可以到 SourceForge 下載最新的版本,並且覆蓋「免 Root 備份與還原 3.9.0v5」所提供的檔案即可。

下載 UnlimitedJCEPolicyJDK

如果已經做了以上的步驟,在 abe.jar 進行 unpack 的過程中還是有問題,可以試著下載 Java Cryptography Extension (JCE),依照你目前的 Java 版本,下載對應的壓縮檔,要確認 Java 的版本可以在命令列視窗執行以下的指令:


會看到命令列視窗中輸出「java version "1.x.x_x"」的字串,其中 1.x 的 x 代表的就是 JCE 要下載的對應版本,應該會是 6、7、8 其中一個。確定 Java 版本之後,可以到以下對應的網址下載:


下載後依照壓縮檔內的說明文件,把二個 jar 檔放到指定位置後再執行一次「3.B手機免root清除重登.bat」。JCE 通常放置的位置應該是在安裝 Java 路徑的 lib\security 目錄內。

假設過程一切正常,就可以開始在 Android 6.0 上繼續無接縫地使用 Line 了。如果還是不成功,那就麻煩大喊三聲「我支持拒用 Line」,因為我也愛莫能助了,請節哀!

至於前一篇提到的電話認證的疑問,這次有特別試了一下其實是可以用的,並不一定要使用 Facebook 認證,也許是電話認證的失敗率比較高,所以網路上的文章才比較不推電話認證的方式。





46 則留言:

  1. 我支持拒用 Line!
    最近也是遇到在android 5.1.1備份成功,但在還原到android 6.0時,執行3.B手機免root清除重登.bat就出現abe unpack錯誤的訊息了,試了很多方法還是沒法完成。
    希望大大早點公佈解決方法,謝謝!

    回覆刪除
  2. 我支持拒用 Line!
    請WZ大大能早點公佈解決的方式,感謝您。

    回覆刪除
  3. 我支持拒用 Line
    WZ一切靠您了
    現在很悲慘的帶兩支手機出門XD

    回覆刪除
  4. 我是原本寫這個備份,還原的批次檔作者,因為一些關係,我也沒在繼續維護了,謝謝你可以找出問題,繼續維護。

    現在在學寫iOS App,JB App和一些iOS Tweak...,不過現在有人繼續維護就好了。

    回覆刪除
    回覆
    1. 真榮幸!有原作者來留言。首先感謝您的貢獻讓我們被 Line 制約的生活能夠簡單一點!如果未來出新版有需要文章裡的資訊,請不要客氣,儘管拿去用,讓更多的人可以免於備份之苦。

      刪除
    2. adb backup是呼叫這支程式
      https://android.googlesource.com/platform/frameworks/base/+/master/cmds/bu/src/com/android/commands/bu/Backup.java

      我再root寫app時用過指令呼叫出adb backup,但意義不大,因為adb backup免root就可以用了

      看完上面文章,adb backup小於14MB是因為LINE 5.3.2禁用adb backup,所以唯一方法就是降版。

      1.先找到LINE 5.3.1以下官方版本(5.3.0比較安全),官方版本確保APK Sign一樣。

      2.之後把手機內LINE APK版本備份出來,也很多APP可以備份手機內的APK

      3.因為Android不能在手機內安裝降版APK,所以只能透過adb做 adb install -r -d xxx.apk(強制安裝降版的LINE APK,但一定要是LINE官方版本,簽名不同會降版失敗)

      4.降版成功後,不要開LINE,直接做免root備份和到另一隻手機還原,之後再做免root重登

      5.做完免root重登再把原本手機備份的LINE 5.3.1以上的版本到新機做升級,升級完後開LINE做免root登入看看對話紀錄是否都還在。

      簡單來說就是利用舊的LINE還可以做adb backup和restore,做這幾個指令,做完後記得要升級回原本備份的LINE版本再繼續登入。

      刪除
  5. 我支持拒用 Line!
    希望WZ大大能早點公布還原到Android 6.0的方法!
    不然用兩台手機真的很麻煩耶!

    回覆刪除
  6. 我支持拒用Line
    哈哈,感覺就像「什麼?我褲子都脫一半了居然給我看這個?!」
    我爸手機壞了換一台HTC A9
    明天上班要用,居然在這卡關了真頭疼
    希望大大趕快公布解決辦法!先在此感謝~

    回覆刪除
  7. 總算利用假日的時間整理完成,目前已是完整的內容,感謝有參與活動的各位朋友,你們的留言是我完成文章整理的動力!為了回饋願意陪我耍寶、有來參與活動留言的朋友,如果操作上有問題我會儘可能地看看有沒有能提供協助的地方。至於沒有來得及在文章完成前留言的朋友,照著文章程序操作還沒辦法成功的話,也只能說聲抱歉了!

    回覆刪除
  8. 降版那邊看不太懂
    而且我在網路上找 他說降版對話紀錄會不見耶

    回覆刪除
  9. WZ大,我從5.1備份,還原到6.0上時
    3.B手機免Root重登清除

    都會出現
    pax: Unable to access apps/jp.naver.line.android/db/naver_line-journal: No such file or directory
    pax: Unable to access apps/jp.naver.line.android/sp/jp.naver.line.android.settings.xml: No such file or directory
    我要怎麼修正,感恩

    回覆刪除
    回覆
    1. 可以先手動執行 abe.jar 的 unpack 確認資料庫有沒有正確的被取出來。如果有,這個情況跟文章中修正的步驟就沒有關係。

      我在執行這一個步驟的時候也有出現一連串的錯誤訊息,但我沒有記錄下來,所以不確定是不是和你的一樣。

      沒有理會錯誤訊息主要是因為最後有出現還原的畫面,而不是中斷批次檔,所以我就大膽地往下做,結果也很幸運地是好的。也許原作者可以提供 unpack 之後步驟的更進一步資訊,以上的經驗提供給你參考。

      刪除
    2. 因為有的版本登入資料會寫在那個settings.xml所以我必須去刪那個檔案,但是我沒寫判斷檔案存不存在所以那段錯誤可以略過

      刪除
  10. 作者已經移除這則留言。

    回覆刪除
  11. 作者已經移除這則留言。

    回覆刪除
  12. WZ大大
    我從4.3HTC蝴蝶備份到6.0HTC A9
    卡在2.B手機還原資料
    點進去一直出現
    adb重新啟動中...
    * daemon not running. starting it now on port 5037 *
    * daemon started successfully *
    error: could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037: Only one usage of each socket address (protocol/network address/port) is normally permitted. (10048)
    could not read ok from ADB Server
    * failed to start daemon *
    error: could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037: Only one usage of each socket address (protocol/network address/port) is normally permitted. (10048)
    could not read ok from ADB Server
    * failed to start daemon *
    error: could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037: Only one usage of each socket address (protocol/network address/port) is normally permitted. (10048)
    could not read ok from ADB Server
    * failed to start daemon *
    error: cannot connect to daemon
    error: could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037: Only one usage of each socket address (protocol/network address/port) is normally permitted. (10048)
    could not read ok from ADB Server
    * failed to start daemon *
    error: could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037: Only one usage of each socket address (protocol/network address/port) is normally permitted. (10048)
    could not read ok from ADB Server
    * failed to start daemon *
    error: cannot connect to daemon
    已偵測到手機...
    手機型號: HTC adb server is out of date. killing...
    Android 版本:adb
    ======================================
    正在還原請觸控螢幕還原
    adb server is out of date. killing...

    回覆刪除
    回覆
    1. 該怎麼修正??
      謝謝:)

      刪除
    2. 應該是你執行程式的電腦環境有問題,建議把錯誤訊息拿去 Google 一下也許有排除的方法,如果還是不行就只能看週邊有沒有其他人的電腦可以借一下。

      刪除
  13. BF2轉A9已成功~~~感謝大大

    回覆刪除
    回覆
    1. 請問您如何轉到6.0的A9呢?
      因為我不是寫程式的人
      對於大大說的有點不太懂
      可以用簡單的方法教一下嗎?

      目前我只有轉到note4 5.0.1上成功
      但不知道怎麼轉到6.0的系統~~~
      感謝~~~

      刪除
  14. WZ大大 非常謝謝您的教學
    但目前遇到一個問題
    備份及還原都成功
    進入應用程式看line資料大小也有幾十MB
    可是登入line後聊天紀錄是全部消失的
    backup.ab目前還留著
    請問我還有什麼可以嘗試的嗎?
    謝謝!

    回覆刪除
    回覆
    1. 我能想到的大概只有三點:
      1. 有人在我另一篇文章中留言說消失的聊天記錄二十分鐘後會再自動回復,看要不要等看看。
      2. 原作者有更新程式了,文章中要修正的問題應該都被更正了,用新的程式執行步驟三試試。
      3. 把過去放下,並祈禱下次換機時已經沒有親朋好友在使用 Line 了。

      刪除
    2. WZ大~感謝您
      目前已經解決了
      很認同第3點把過去放下
      我自己的手機也做到了(當然也是無法備份只好放棄)
      但像您另一篇文章提到的,這次是幫別人備份
      在這個"別人"的稱謂是媽媽的情況下只能努力不讓她失望了
      以下大概說明我解決的方法

      發現:
      第3步驟"db.ab中的naver_line"與第1步驟"backup.ab中的naver_line"檔案大小不一致
      解決方法:
      在第3步驟解開db.ab後,將"backup.ab中的naver_line"複蓋掉解開的檔案,再讓程式繼續執行sqlite3的刪除與後續打包、還原等動作
      結果:
      登入line後聊天紀錄都存在

      謝謝您這兩篇文章的教學讓我了解基本的adb使用方法
      也才有機會讓這次的還原可以成功

      刪除
    3. WZ大,有原作者的更新連結嗎?感謝

      刪除
    4. 更新的連結是在這篇文章 (https://www.kocpc.com.tw/archives/4209) 中看到,順便提一下,文章裡有一個贊助作者的連結,可以給原作者的貢獻有更實際的感謝。

      刪除
    5. Isagetrain1 Li 大,很有用的資訊,感謝!我記得 unpack 出來的檔案好像不少,真虧你可以找出不一樣,應該是花了不少時間比對吧,辛苦了!我可以理解幫長輩備份的無形壓力,雖然口頭上都會說沒關係,但就像你說的,不想讓長輩失望,會一個勁的想要找到出口,所以恭禧你有順利地解決了。

      刪除
  15. 你好,我的理解力有點不足
    『首先要到 Android Developer Tool 網頁下載 SDK 工具』從這就看不懂
    我下載後,執行,『找不到SDK 的根目錄中執行 SDK Manager.exe』
    官方網站中有相關的操作說明.....是英文看不懂
    所以我沒有辦法解決
    麻煩高手指導,謝謝

    回覆刪除
    回覆
    1. 原作者有更新程式了,不考慮使用新版的程式嗎?

      刪除
  16. 更新ADB後就還原成功了!
    本來還在煩惱不成功的話紀錄就都不見了
    現在解決了,謝謝~

    回覆刪除
  17. 您好,我是要從HTC one 801e 轉到 HTC10(Adroid6.01)
    在第二個步驟 完整還原的畫面,手機無法點選"還原我的資料"
    不知道是哪裡出了問題
    謝謝回答~

    回覆刪除
    回覆
    1. 你是用原作者最新版的程式嗎?

      刪除
  18. 您好:
    請問我從蝴蝶2轉移到E9+
    所有步驟都完成,訊息也都在,
    但是部分好友卻無法傳訊息,有些是正常的
    之前在做轉移時就遇過這個問題,
    但苦苦爬文好像沒有其他人有遇到過這個問題
    請問這是否有解呢?
    PS無法傳訊息的好友,接收是正常的

    回覆刪除
    回覆
    1. 沒辦法又將備份檔還原回原手機
      一切傳訊都是正常的
      表示備份檔案是正常的
      蝴蝶2是6.0.1
      E9+是5.0.2
      也許是android的問題
      PC是Win7 x64

      刪除
    2. 這個問題我也有遇到,但找不出原因,有嘗試把聊天室、沒辦法傳訊的好友都刪除,再加回來也還是不行!到目前為止,暫時的解決方案是用群組聊天室,提供給你參考。

      刪除
    3. 謝謝WZ,我也試過這些方式耶,真的是鬼打牆!目前只能先帶兩隻手機出門,如果有突破再來回報囉

      刪除
    4. 把line的加密功能關掉就可以傳了!!

      刪除
  19. 作者已經移除這則留言。

    回覆刪除
  20. 作者已經移除這則留言。

    回覆刪除
  21. 終於成功了…Padfone S(Android 5)轉移到Zenfone3(Android 6.01);一直做到最後,JCE下載了新的2個jar檔丟入覆蓋才成功,感謝大大~

    回覆刪除
  22. 備份成功,也可以正常使用,可是大概過3小時候就出現問題
    每次點開LINE,都會跳出顯示應用程式已停止,可是別人LINE我還是會跳提醒,我還可以點進去回復,一回到LINE首頁就又跳出停止應用程式

    回覆刪除
  23. 你好,備份成功後,更新完LINE進入發現訊息紀錄都回來了,但是隔天要進入LINE都一直當機,只能看到朋友新發的訊息,請問這要如何解決?

    回覆刪除
  24. 您好,爬了很多篇文跟多次嘗試後
    了解了整套運行方式

    但小弟卡在降版本的部分無法成功
    會顯示:[Failure [INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE]

    手機資訊為:
    Asus Zenfone 2 Laser
    Android版本 6.0.1
    Line版本 7.0.1

    是在一次晚上突然就無法打開,跟HTC M8低電量關機不同狀況
    但一樣顯示:很抱歉,LINE已停止運作
    LINE完全無法打開,重開機等都無效
    但資料又還想保留,所以想嘗試這套方法

    但無奈降版本一直失敗,想請問是否是因為LINE版本太新了
    看別人成功的經驗,似乎都不是7.0.1版的LINE

    期待您或其他高手們相救,萬分感謝。

    回覆刪除
    回覆
    1. 補充:小弟使用的工具包是-[Backup_and_Restore-without-root-5.2.5v1]

      刪除
    2. http://ts.cat2.me/?p=708
      我看這個網站說,Android 6 搭配 Line 7 以上就無法降級了...
      不知道有沒有人知道怎麼解?

      刪除
  25. 有關降版失敗的問題,提供備份、還原程式的原作者都這麼說了 (http://ts.cat2.me/?p=708),只能請各位朋友節哀了!雖然這次降版的問題主因不是 Line 造成的,但終究還是由於其忽視使用者需求、備份功能陽春所衍生出來的,唯一的解法就是趁這次化危機為轉機、能不用就別用了,省得下次換機又要再絕望一次。

    回覆刪除
  26. https://www.asus.com/zentalk/tw/thread-164392-9-1.html

    在Asus論壇有看到有人提供idea (shakalaca), 利用
    => adb shell pm uninstall -k jp.naver.line.android
    做解除安裝, 保留資料的動作.

    然後再使用adb install安裝舊版本的Line

    這不知道有沒有用, 而且還要另外開個Line帳號做測試才比較安全...


    回覆刪除