[教學] adb備份第二彈:使用工具將ab備份檔解壓縮與重製

在網友提供連結下 我在xda上找到這篇
這個是教您如何解開從adb backup所備份出來的備分檔
經過了xda原作者scandiun的同意轉載後 替各位說明解法


這個過程將可以讓你解開ab檔案 並可以查看adb到底備份了那些APK和資料
並且可以抽取其中一些APK另外做檔 多少可以解決因程式問題造成還原失敗或不全的問題

但是在這邊我要先提醒:
由於這過程 無論是一開始的建立環境或是之後開始解壓
對於沒接觸過指令的使用者而言 可能會難以理解 因為這已經偏向開發者的範疇
我盡量會用較易懂的方式講解 但若還是不懂的話 建議就不要再做下去了

另外 這部分將會分為三樓做講解
第一樓我們要先建立能夠操作的環境
第二樓會講解怎麼使用批次檔
第三樓將會講解指令用法 ←--給不想用批次檔 想自己玩看看的人看的
=============================================================================

OK 那麼這邊我會先講解如何建立能夠運作的環境

我們將會使用到以下東西:
Java SE Development Kit(對於有學過Java的人應該不陌生)
(請注意:若Windows是32位元請下載x86 64位元請下載x64)
JCE Unlimited pack(設有密碼的備份檔必備)
Cygwin(這個是一個能夠在Windows底下跑Unix的模擬器 解開的元件需要在這底下使用)
(注意!若為自己另外下載的 請下載x86(32位元)版本)

請先下載這些東西 下載完後將會一步一步地來講解建立環境


Step 1:安裝Java及設定環境變數

ok 請先把Java安裝起來 安裝完畢後
For 7:電腦右鍵→內容→進階系統設定→進階→環境變數
For XP:我的電腦右鍵→內容→進階→環境變數

進去之後 請在系統變數那邊往下找 會有一個Path的變數
選取它 按下編輯按鈕 請先在最後面加上分號
然後打開資料夾 找到如圖下的路徑 將該路徑複製到分號後面
[教學] adb備份第二彈:使用工具將ab備份檔解壓縮與重製

完畢後 點選確定 然後再確定離開 這樣我們就完成了Java的環境設定

但資料夾視窗先不要關掉 我們還有東西需要複製
請解壓JCE Unlimited pack 裡面會有兩個檔案 local_policy.jar 和 US_export_policy.jar
請將這兩個檔案分別複製到以下路徑 並且做覆蓋動作

C:\Program Files\Java\jdk1.7.x_xx\jre\lib\security
C:\Program Files\Java\jre7\lib\security

這樣就完成了


Step 2:安裝Cygwin
首先下載安裝檔後 執行時 第一個會出現選項 請選擇 Install from Internet
[教學] adb備份第二彈:使用工具將ab備份檔解壓縮與重製

接著 選擇你要安裝的路徑 之後會有一個Local Package的路徑選擇
這邊我建議和Cygwin放在一起 比如Cygwin是安裝在D:\work\cygwin的話
就把Local Package設在D:\work就好

下一步 也是出現三個選項 選擇Direct Connection
[教學] adb備份第二彈:使用工具將ab備份檔解壓縮與重製

在來他會連上Cygwin的伺服器 之後會跑出一堆可以下載元件的網址列表
隨便選一個就好了 但接下來才是重點
選好後 會連上該伺服器 並且會出現一個很大的畫面 上面是元件列表


重點開始!
你會看到每一個元件旁邊都會出現一個Defauit的文字 這個可以不用去動它
請在最上面的搜尋欄 搜尋pax
就會看到出現一個Archive的目錄 點開就會出現一個元件
他預設是Skip 請把它點成日期格式的文字 並確定Bin的方塊有打X
[教學] adb備份第二彈:使用工具將ab備份檔解壓縮與重製

好了之後 請按下一步 就會開始安裝流程

之後安裝完畢 我們就完成了前置作業 請繼續看2F
使用Cygwin進行作業

若前置作業都完畢後 接下來我們就進入到正式的部分啦

請再下載兩樣東西:
Android Backup Extractor(由scandiun所製作的解壓工具)
個人寫的sh腳本(5/6更新)(和批次檔的作用一樣)
(註:此腳本為第三版)
批次檔更新內容:此次更新針對split.sh稍做修改 分離結束後不會刪除原始檔案


這兩樣東西都是得在Cygwin底下執行
第一個jar套件也可以直接在Windows底下執行 但由於壓縮程式的關係
只能做解包動作 不能做打包
若在Windows底下用7-zip做打包的話 是沒辦法還原的哦~ 還請注意


Step 1:將檔案COPY到Cygwin裡頭

先啟動Cygwin 程式會再home資料夾自動建立一個以你的使用者名稱為名的個人資料夾
接著 請將Android Backup Extractor壓縮檔解開 將裡面的abe.jar
連同sh腳本壓縮檔裡的4個檔案你的備份檔

複製到Cygwin資料夾裡的home\(使用者名稱)\ 底下(以下圖為例 AK74是我的使用者名稱)


========================================================================

Step 2:運行腳本

打開Cygwin Terminal 就會出現很像cmd的指令啦~
之所以在Step 1要把那些檔案放在我說的資料夾底下 是因為這個程式運行起來時
預設的資料夾路徑就在這

注意!若你的使用者名稱是中文 可能會有無法運行的狀況
請改成英文名稱後 將Cygwin移除重裝


OK 以下開始就會講解囉~

-----------------------

解包

解包過程會把備份檔的東西解出來 並會在你的資料夾底下
執行很簡單 請輸入
./unpack.sh (要注意 "點"是要打的)


接著就會開始運行腳本了
一開始會先要你輸入ab檔的檔名 只需要輸入檔名即可 不用輸入副檔名
但需要注意 檔名不得有空格或非英文字元
輸入後 若該ab檔本身有設密碼 請輸入密碼 若沒有就留空

接下來開始運行 過程會看到一大串數字和路徑
完成後就會像這樣


並且你會在資料夾底下看到一個名為apps的資料夾 以及一個和備份檔同檔名的.list檔案
點進去apps 就會看到你所備份出來的程式


至於裡面的東西是怎麼放的 這個我到後面會再介紹

-----------------------

打包(包含分離APP程序)

打包流程也很簡單 也是使用sh檔來執行
由於這個是接續在打包的後面 因此apps資料夾和.list檔都不得刪除 否則會無法運作

請輸入:
./split.sh


一開始一樣會要您輸入檔名 請輸入和備份檔一樣的名稱(也就是.list的名稱)

第二個會要你輸入你要打包的APP名稱
要注意的是 和adb備份單一APK一樣 要輸入物件名稱
這些除了在原先的文章有方法可以查到外 也可以直接開apps資料夾做查詢
比如我要打包LINE 那就是輸入jp.naver.line.android

最後會要你輸入新的備份檔的檔名 一樣不不得有空格或非英文字元
也無須輸入副檔名 接著會再問你是否要設密碼 如果不設就直接留空就好
其運行成功如下


以備份LINE為範例 我設的新檔名為line 完成就會看到資料夾底下出現了line.ab的檔案



------------------------

打包(不包含分離APP程序) (9/11新增)

和上面的打包一樣意思 只是沒有分離APP的程序
這是給要單獨把備份檔裡面的APP刪除或修改 然後打包用

若要使用 請輸入:
./pack.sh


這邊補充說明 若要刪掉APP 除了把你想要的程式從apps資料夾中移除之外
還要修改list檔案 把程式放置相關的路徑移除 否則pax在做打包時會出錯
如果只是覆蓋檔案是沒問題的 若是新增檔案進去APP 或是修改裡面的檔名
list檔裡面也要新增路徑或是修改檔名

list檔案本身是一個文件檔 因此可以用文件編輯相關的東西修改
但是!最好使用Notepad++來做修改 千萬不要使用記事本!
如果不想用Notepad++ 也可以使用不會影響到文件編碼的編輯器也可以
當然 Linux很強的人也可以直接開vi或是pico編輯

------------------------

整合版

所謂的整合版 就是把解包和打包兩個過程結合在一起
有人會問 為何我還要刻意做獨立的版本出來

是這樣的 因為整合板和打包一樣 一次也只能打包一個APP出來
而且整合板在全部流程做完後 會把apps list檔全數刪除 只留下原先的ab檔和新的ab檔
由於我還不是很了解sh的寫法 如果能做到多個APP打包那當然是最好了
這部分我會再研究看看


整合版請輸入:
./full.sh


至於流程和上面兩個是一樣的 因此我就不多做解釋啦~



------------------------

單純重新打包

如果是想單純重新打包 並嘗試看看這樣能否還原的話 也是可以的
(雖然我認為成功機率應該不高)

請輸入:
./srepack.sh





這個其實是蠻好用的一個方法 用來檢查備份檔是否備份完整
以及把單一APP另外做一個備份檔是相當方便的
可以用來排除一些在使用adb備份和還原時的問題
祝各位使用愉快~
指令介紹

OK 想要進階一點 或是本身對Unix/Linux很熟的人可以玩看看以下這些指令
這些指令都只能在Cygwin或是Unix/Linux底下操作 就連2f的sh檔也是
所以想用單純Windows的cmd是沒辦法的哦~

以下的指令有步驟性 因此輸入這些指令是有順序的 如果順序錯誤容易製作失敗


以下開始 (注意!指令有空格的地方就表示打的時候那邊要空格!)

----------------------------------------

java -jar abe.jar unpack [來源檔] [目標檔] [密碼]

這個是該jar檔主要使用的方式 特別的是 這個指令也是可以在Windows的cmd上跑的(也就是命令提示字元啦)
輸入檔名時和adb backup一樣 都要輸入副檔名
要注意的是 這個套件只能ab檔和tar檔互轉
因此在解包(unpack)時 來源和目標檔一定得是ab和tar
而若有密碼 就打在目標檔之後

另外 tar壓縮檔可以用7-zip或是WinRAR等其他軟體解壓縮 也可以用7-zip壓縮
但因為這類軟體在過程中會把一些備份資訊刪除 因此若直接壓縮的話
當你用adb嘗試還原時 馬上就會結束 且檔案完全沒有灌回手機

----------------------------------------

tar -xvf [檔名].tar
tar -tf [檔名].tar > [檔名].list

前者是將轉換完成的tar檔解壓縮在當前資料夾底下
後者則是為該tar檔建立一份檔案清單

要注意的是 檔案清單是相當重要的 因為裡頭有apps資料夾的檔案路徑清單
在壓縮時哪些檔案要壓縮全看這個list檔案
因此list檔一定要做出來 且最好不要更動它 並建議其list檔名和ab檔一致

----------------------------------------

cat [原檔名].list | grep [物件名稱] > [新檔名].list

這個指令是將原本的list檔中含有該字元的字句給複製出來 另外做一個list檔

比如 你想把某一個APP獨立做一個備份檔出來 必須要做一個該APP的檔案壓縮清單
因此在物件名稱的欄位 打上要另外製作的APP物件名稱
就會把該APP的檔案路徑從原先的list複製出來 另外再做一個list清單
新的清單就只會有該APP的的檔案路徑

----------------------------------------

cat [list檔名] | pax -wd > [新tar檔名]

這個指令是呼叫pax壓縮程式 用list裡的清單製作tar壓縮檔
pax就會根據該list檔裡的內容找檔案並打包成tar

----------------------------------------

java -jar abe.jar pack [來源檔] [目標檔] [密碼]

這是打包的指令 功能和unpack是一樣的
只是來源檔和目標檔的屬性是倒過來的 來源檔得是tar 目標檔得是ab
想要設密碼的話也是一樣的




大略是這樣 這些指令對於不熟或是沒碰過的人來說很難
對於有學過或碰過Unix/Linux來說應該相對簡單
就給各位一個參考囉~

==============================================================================

補充:備份檔的資料配置

如果解包了ab檔 並再做一次解壓縮
會解出一個apps的資料夾 裡面則有每一個APP為主的資料夾
不過這些APP資料夾裡面 還有一些資料夾和檔案 這邊我就來說明一下

a
這個是單純放APK的空間


db
裡面存放運行時的相關database


f
專門存放APP資訊的資料夾 如果是遊戲 包含遊戲的紀錄也會存放在此
但有些會將資料存放在SD卡(使用者空間)的APP 則一定得在/Android/data底下抓

sp
存放運行時的相關資訊 比如開啟這APP時的解析度 音量 等等
這些資訊都是以xml形式存檔

_manifest
紀錄APP屬性和校驗的檔案


實用的文章

先做個記號備用
AKSN74 wrote:
在網友提供連結下 我...(恕刪)
這篇寫得真的有點有久阿~

不過怎麼到現在還沒人呢XD

可能大部分人在備份還原上都很順利
先收藏起來XD

我覺得你寫的很詳細很清楚,但要操作這個備份模式略為攏長,
我想應該是這樣子才比較少人回應吧XD

以往刷機的教學大概只需要你這篇文章的1/3步驟就OK了,哈
剛剛看完第一篇之後就...有點累Q_Q
可能是因為沒接觸過程式的架構吧~~
聽說寫程式的人都要寫很長很長XD

總之,先備份一下XD 謝謝

AKSN74 wrote:
這篇寫得真的有點有久...(恕刪)
網路流氓的習性-多重標準+自私邏輯遮掩現實+加油添醋無限上綱+沒有品德,眼不見為淨。
感謝分享
這文章真的不錯 :)
來好好研究一下

AKSN74 wrote:
在網友提供連結下 我...(恕刪)


請問AK大:

我電腦原本已經有安裝 Cygwin 了,可以使用原本已經安裝的嗎?還是要重新另外安裝?

如果可以的話,要怎麼下載 pax 元件?

karyfu wrote:
請問AK大:我電腦原...(恕刪)

原本有裝很簡單 也是一樣執行setup
一樣的安裝過程 只是到元件選擇那邊的時候找pax就好了

AKSN74 wrote:
原本有裝很簡單 也是...(恕刪)


感謝解答,我試試看,只是我忘了哪個是主目錄!哪個是使用者目錄了!

我還是先另外安裝過,再把裡面的 pax 元件資料夾在複製到舊的

Cygwin 裡面。再次感謝詳細又實用的教學~~

關閉廣告
文章分享
評分
評分
複製連結
請輸入您要前往的頁數(1 ~ 13)

今日熱門文章 網友點擊推薦!