注意:因為會動到系統檔案,無法保證手機安全,若要嘗試,請自行負責
準備工具:
- 已root的Android手機(因為需要進入系統資料夾並操作檔案,需最高使用者權限)
- SdCard
- 模擬終端app
- 電腦上的adb程式(非必要,可以用手機的模擬終端app打指令,在電腦上打指令和debug較方便就是了)
- 先將SdCard插入電腦將裡面的資料備份出來,接下來用硬碟分割工具(ex:PartitionManager)將SdCard format 成fat32 再分割出第二個空間並將此空間格式化為ext2(此空間之後將會放置app資料,可以盡量分多一點空間)
- SdCard準備完後插入手機,先開啟模擬終端輸入
mount -o remount,rw / 將 /設定為read-write,接下來才能在底下創建連結
cd dev/block/vold 找到該SdCard的ext2分割區並記下來,如這裡是179:10
mkdir /mnt/sd_ext2
mount -t ext2 -w 179:10 /mnt/sd_ext2 把此分割區掛載到手機的文件系統上(-t代表文件系
統格式 -w代表可以read-write)
cd /data/data 並查看哪些app資料占最多記憶體,優先把它列為需移出至SdCard的對象
(注意:盡量不要動到敏感資料像是系統app等等的資料夾)
cp -r -p com.xxx /mnt/sd_ext2/com.xxx 將com.xxx資料夾包含底下裡面的資料複製出到
SdCard的ext2分割區
mv com.xxx com_bk.xxx 先將他更名
ln -s /mnt/sd_ext2/com.xxx com.xxx android 上ln用法: ln [-s] <target> <name>
此行是在/data/data下面建立一個軟連結可以連接到 /mnt/sd_ext2/com.xxx的資料夾,而
最後面的參數是此連結的名稱
- 完成後,可以開始測試是否可以開啟那個 xxx app,看看是否可以使用,測試ok後,手機重開機後,會發現那個app會不見,原因是重開機時,原本掛載好的掛載點會消失,故要再重掛載一次,解決方法有兩種,手動或是自動(用script跑)
開啟模擬終端輸入
su
mount -o remount,rw /
mkdir /mnt/sd_ext2
mount -t ext2 -w 179:10 /mnt/sd_ext2
kill zygote 注意:這裡是要把user interface行程刪掉,迫使他restart(看起來很像重開機),
因為已經手動掛載好了,所以他restart時,便會找到掛載點下面的資料,消失的app就會
出現
自動的方法:
開啟模擬終端輸入
su
cd /system/etc 查詢是否有一個檔案名叫install-recovery.sh,如果沒有可以自行創建,此
檔案會在boot階段執行,若要確認,可以查看 /init.rc,裡面會有一行會呼叫到此檔案
以root權限編輯此檔案,如果是自行新增檔案,可以直接在檔案中輸入
#!/system/bin/sh
sleep 4
mount -o remount,rw /
mkdir /mnt/sd_ext2
mount -t ext2 -w 179:10 /mnt/sd_ext2
編輯完後儲存
- 這樣子即可正常使用掛載的app
- 假設如果有很多系統上的data要轉移到sdcard,建議可以再寫一個script,在手機上最熟悉的資料夾開一個檔案,叫做link.sh,編輯內容如下:
filename=$1
mnt=/mnt/sd_ext2
cp -r -p $filename $mnt$filename
mv $filename $filename"bk"
ln -s $mnt$filename $filename
rm -r $filename"bk"
注意:這裡有 rm -r $filename"bk",會把系統內原來的data刪掉
- 使用link.sh方法:
su
cd 到link.sh所在的資料夾內
sh /link.sh /data/data/com.xxx 即可,後面第一個參數,意思是說要轉移的資料夾路徑
沒有留言:
張貼留言