[Debug] 07-查看 APP 檔案儲存位置及 SharePreference 內容

情境

有些情境,需要把某些資料儲存在手機本地,寫過存取檔案或 SharePreference,但他實際儲存在哪裡?可以查看檔案內容嗎?

Device Explore 介紹

開啟開發人員模式,就能用 Device Explore 存取手機裡面的檔案。例如,直接從手機抓出截圖、將檔案直接放到手機的資料夾。

而 SharePreference 的背後其實也是寫檔,今天就一併介紹檔案儲存位置了。

使用步驟

  1. 在 Android Studio 側邊工具列中選擇 Device Explorer
  2. 找到 /data/data/[APP Package Name],這就是 APP 的資料夾。需要特別注意的是,APP 需要是 debuggable。
  3. 展開後,可以看到這個 APP 的所有檔案
    Device Explore Demo 1
    Device Explore Demo 2

查看 SharePreference 檔案

完整 Demo 專案 Github: https://github.com/dreambo4/Restful-Api-Demo-Todo-Project

首先我們先測試寫入 SharePreference

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class MainActivity : BaseActivity<ActivityMainBinding>() {
// SharePreference 物件
private val sharedPreferences: SharedPreferences by lazy {
getSharedPreferences("app_prefs", Context.MODE_PRIVATE)
}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val defaultBaseUrl = "http://192.168.0.12:8080/"

// 取得已儲存的 SharePreference
var newBaseUrl = sharedPreferences.getString("base_url", defaultBaseUrl) ?: defaultBaseUrl

sharedPreferences.edit().putString("base_url", newBaseUrl).apply()

binding.apply {
etBaseUrl.setText(newBaseUrl)
etBaseUrl.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(s: Editable?) {
newBaseUrl = s.toString()
// 使用者編輯過的話,就儲存 SharePreference
sharedPreferences.edit().putString("base_url", newBaseUrl).apply()
}

override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}

override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
})
}
}
}

SharePreference 內容

可以發現 SharePreference 的檔名,就是先前寫在 getSharedPreferences("app_prefs", Context.MODE_PRIVATE) 的名稱。並且也能用 key 存取 value 內容。

1
2
3
sharedPreferences.edit().putString("base_url", newBaseUrl)

sharedPreferences.getString("base_url", defaultBaseUrl)

工具優缺

  • 優點
    • 可以方便查看手機內檔案內容
  • 缺點
    • APP 需要是 Debuggable

參考資料