在舊版的 Android 中,系統會掃遍 測量磁碟用量這項手動評估可能需要幾分鐘的時間 ,然後在「設定」向使用者顯示結果前進行運算。
此外,內部演算法只會清除 修正所有應用程式的修正時間這讓惡意應用程式 將日後修改的時間設為不公平,藉此調整整體使用者體驗 比其他應用程式更受歡迎
為了改善這些使用體驗,Android 8.0 提供了利用 ext4 檔案系統的 「配額」支援,可立即傳回磁碟使用統計資料。這項配額 也藉此防止單一應用程式 超過 90% 的磁碟空間或 50% 的電網
實作
配額功能是 installd
預設實作方式的一部分。
以下項目啟用後,installd
會自動使用配額功能
以及特定檔案系統系統會自動且公開透明地重新啟用
在配額功能未啟用或不支援
封鎖裝置
如何啟用特定區塊裝置的配額支援:
- 啟用
CONFIG_QUOTA
、CONFIG_QFMT_V2
和CONFIG_QUOTACTL
核心選項。 - 將
quota
選項新增至 fstab 中的使用者資料分區 檔案:/dev/block/platform/soc/624000.ufshc/by-name/userdata /data ext4 noatime,nosuid,nodev,barrier=1,noauto_da_alloc latemount,wait,check,formattable,fileencryption=ice,quota
fstab
選項可以安全啟用或停用
裝置。變更 fstab
選項後,首次啟動期間,
fsmgr
會強制 fsck
票證更新所有配額資料
所以可能導致首次啟動所需時間稍長隨後
不會影響開機程序。
配額支援只能在 ext4 和 Linux 3.18 或以上版本中經過測試。如果啟用 或者在舊版核心版本中,裝置製造商 。
不需要特殊硬體支援。
驗證
StorageHostTest
下有 CTS 測試,開放大眾練習
用於測量磁碟用量的 API。這些 API 應傳回正確的值
無論啟用或停用多少配額支援
偵錯
測試應用程式會以不重複的質數編號,謹慎分配磁碟空間區域
不同大小對這些測試進行偵錯時,請使用此功能來判定
的資料差異。舉例來說,如果測試失敗,差異值為 11 MB,請檢查
Utils.useSpace()
方法,查看 11MB blob 已儲存在
getExternalCacheDir()
。
偵錯時也有一些內部測試或許能派上用場 可能需要停用安全檢查,才能通過:
runtest -x frameworks/base/services/tests/servicestests/ \ src/com/android/server/pm/InstallerTest.java
adb shell /data/nativetest64/installd_utils_test/installd_utils_test
adb shell /data/nativetest64/installd_cache_test/installd_cache_test
adb shell /data/nativetest64/installd_service_test/installd_service_test