快轉到主要內容

Android手機將APP移動到SD卡,免Root

· 民國115年丙午年
·
切換繁體/簡體
分類 智慧型手機 Root與刷機
標籤 Android
目錄

現在還能將APP移動到SD卡嗎?可以,要看系統。

在Android 16,部分Android手機依然保有「將SD卡格式化為內部儲存空間」或稱「合併儲存空間」的功能。

它能夠用SD卡擴充手機現有的儲存空間,例如內部空間只有64G,插入一張64G SD卡,格式化合併,總計就有128G了。

我這麼做的原因主要是想解決舊機Sony Xperia XZ2c空間太小的問題。本來原廠Android 10系統不提供SD卡格式化為內部儲存空間的功能,刷機成LineageOS 23之後就有了。

1. Android SD卡存放APP的歷史
#

以前Android 2.3時代很多手機就是以SD卡做儲存空間的,當時很多APP也允許移動到SD卡。如果不行移動的,Root後安裝App2SD多半也能解決。

但是因為SD卡讀寫速度普遍不如eMMC和UFS(SD卡讀取速度撐死也就200 MB/s,而eMMC隨便都有250 MB/s),加上劣質品牌太多容易造成系統不穩定,在Android 4.4之後手機廠商遂禁止將SD卡存放APP了。變成SD卡只能單純用來放影片照片,或者頂多讓你放遊戲obb數據包而已。

現在手機幾乎都沒有SD卡槽了,這樣手機廠商也可以逼迫人們花錢買更多儲存空間。

Google在Android 6之後引入了將SD卡格式化為內部儲存空間(Formatting an SD Card as internal storage,又稱Adoptable Storage) 的功能,成為AOSP的一部分,但不是所有廠商都有開放。

直到Android 16,LineageOS依然保有這個功能。

2. 將SD卡格式化為內部儲存空間的限制
#

雖然說是SD卡,不過只要是Android能讀取的儲存媒介,透過ADB指令執行adb shell sm set-force-adoptable on之後,都可以格式化。因此你若是有一個固定連接的USB隨身碟,也是可以格式化為內部儲存空間的。

如果將SD卡格式化為內部儲存空間,在檔案管理器APP裡面就只會顯示SD卡的空間了。

格式化為內部儲存空間後,使用者應搬移資料,SD卡會掛載到/mnt/expand/,成為新的內部儲存空間,取代原本的/sdcard/。如果使用者選擇不搬移,則只有APP可以搬移到SD卡。

APP安裝後依然會優先安裝在儲存在內部空間,需要手動搬移。

如果抽出SD卡,手機安裝的APP不會直接消失,但部分資料可能就無法讀取了。

從這邊可以觀察到APK本身還是安裝在手機內部儲存空間,只是/sdcard/Android/data/sdcard遷移到了SD卡罷了。

在手機開機的情況下,抽出SD卡,手機內部儲存空間會變成不可用狀態。若APP資料本身儲存在/data,則抽出SD卡不影響APP運作,但若是放在/Android/data的就有問題了。例如瀏覽器會無法下載檔案。

若要真的把APP安裝到SD卡,需要在系統設定裡面手動將APP搬移過去。這樣APP資料和APK就會真的跑到SD卡。這樣抽掉SD卡,該APP就會暫時從桌面消失。

3. 如何將SD卡做為內部儲存空間
#

  1. 以LineageOS 23 (Android 16) 為例,這個功能是內建的,不需要Root權限。

  2. 開啟系統設定 → 儲存空間,選取SD卡

  3. 格式化為內部儲存空間,或者點選以其他方式格式化

  4. 然後搬移資料(你可以不搬移,則只有APP可以移動到SD卡)

4. 將APP搬移到SD卡
#

系統設定 → 應用程式,開啟APP設定,進入儲存空間,搬移到SD卡。

這樣APK和資料就會放到SD卡。

你可能還要到開發人員選項,開啟強制允許APP寫入外部儲存空間。

5. 調整SD卡分區資料大小
#

使用ADB指令可以調整SD卡分配為內部儲存空間的比例。這樣剩下的空間便可以挪做它用,例如純粹用來儲存資料。

以下指令雖然能用,但是範例多半是Android 6時代的了。似乎Android 16已經無效?

  1. 查看SD卡的ID,例如SD卡是private:179,1 mounted,那就是179,1private表示SD卡正作為內部儲存空間使用。public表示是可攜式儲存空間。
adb shell sm list-volumes all
  1. 設定為private,將SD卡格式化,全部分配給內部儲存空間使用(上面已經做過此步驟就無需再做)
adb shell sm partition disk:179,2 private
  1. 也可以在分配給內部儲存空間之後,設定mixed模式,指定80%分配給內部儲存空間,剩下的空間當作外接SD卡(在Android的檔案管理器便會出現兩個SD卡)。這會重新格式化。
adb shell sm partition disk:179,2 mixed 80
  1. 如果設定為public,就是將其恢復為外接SD卡
adb shell sm partition disk:179,2 public

6. 電腦可以讀取SD卡資料嗎
#

Android會在SD卡建立加密的f2fs或ext4檔案系統,加密金鑰會儲存在Android手機內部,只有Android系統能讀取SD卡。插到電腦會無法辨識。需要透過MTP或ADB才能解密。

(比較特殊的情況:若SD卡在電腦已經格式化一次又轉到Android作為內部儲存空間,則在電腦格式化的分區仍可見,但Android資料不可見。)

由此可見將SD卡格式化為手機內部儲存空間的危險性。手機壞了SD卡資料也無法手動取出。

7. 解除SD卡作為內部儲存空間
#

  1. 系統設定 → 應用程式,將APP移動回手機內部儲存空間(可以到系統設定 → 儲存空間,點選SD卡看哪些APP存在SD卡)

  2. 系統設定 → 儲存空間,遷移資料到內部儲存空間

  3. 將SD卡重新格式化為可攜式儲存空間

參考資料
#

相關文章


此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。

(留言板載入中)這是Giscus留言板,需要Github帳號才能留言。支援Markdown語法,若要上傳圖片請善用外部圖床。您的留言會在Github Discussions向所有人公開。

Click here to edit your comments.

(留言板載入中)這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用外部圖床網站。