日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

Android Device Monitor 文件管理的常见问题 - z

發(fā)布時(shí)間:2025/3/21 Android 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android Device Monitor 文件管理的常见问题 - z 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Android Device Monitor 是 Android Studio 中用于監(jiān)測(cè)模擬器或真機(jī)運(yùn)行狀態(tài)的一款開發(fā)者工具。但開發(fā)者在使用它的過程中往往會(huì)遇到很多問題,尤其對(duì)于新手。本文分析了實(shí)際學(xué)習(xí)中遇到的問題,包括:1. File Explorer 不顯示文件;2. 無(wú)權(quán)訪問 data 等文件; 3. 無(wú)權(quán)下載文件等,涉及到 Monitor 的基本操作以及 adb shell 和命令行的操作等。

背景

最近在看《第一行代碼》(第二版)中關(guān)于數(shù)據(jù)存儲(chǔ)方案的介紹。數(shù)據(jù)的狀態(tài)分為兩種:瞬時(shí)狀態(tài)和持久狀態(tài),一般保存在內(nèi)存中的數(shù)據(jù)隨著活動(dòng)的關(guān)閉,數(shù)據(jù)也就銷毀了,如果我們想保存這些數(shù)據(jù),該怎么辦呢?書中介紹了三種實(shí)現(xiàn)數(shù)據(jù)持久化的方法,分別是:文件存儲(chǔ),SharedPreference 存儲(chǔ)以及數(shù)據(jù)庫(kù)存儲(chǔ)。

在學(xué)習(xí)第一種數(shù)據(jù)持久化方法文件存儲(chǔ)的時(shí)候,我們通過 Context 類中的 openFileOutput() 方法創(chuàng)建一個(gè)指定了保存路徑的 FileOutputStream 對(duì)象 out,然后用這個(gè) out 對(duì)象去創(chuàng)建一個(gè) OutputStreamWriter 對(duì)象,之后再用這個(gè) OutputStreamWriter 對(duì)象創(chuàng)建一個(gè) BufferedWriter 對(duì)象 writer,我們就是通過這個(gè) writer 的 write() 方法向文件輸出流寫入我們想要保存的數(shù)據(jù)的。文件寫入數(shù)據(jù)之后默認(rèn)保存在 /data/data/(package name)/files 目錄下。我們可以通過 Android Studio 中的 Android Device Monitor 去查看,Android Device Monitor 的打開方法如下所示。


打開 Android Device Monitor

問題1:設(shè)備 Offline, File Explorer 空空如也

打開 Android Device Monitor 之后,發(fā)現(xiàn)里面什么都沒有,左邊的面板上顯示了一臺(tái)模擬器,但出于 offline 狀態(tài),不對(duì)呀,我的模擬器命名開著的呀,它正在運(yùn)行我剛剛寫的 app 呢,怎么這里會(huì)顯示離線狀態(tài)呢?于是我試著 Google 去找解決方案。


File Explorer 不顯示文件

在 StackOverflow 上我發(fā)現(xiàn)了有人和我一樣也碰到了這個(gè)問題,不過底下的回答寥寥無(wú)幾,我找到了一個(gè)最高贊的答案(其實(shí)也就一個(gè)贊....),如下圖所示,他的意思是他也不明白其中的具體原理,但是他發(fā)現(xiàn)如果先打開 Android Device Monitor,然后再運(yùn)行模擬器,就可以解決這個(gè)問題。


解決 File Explorer 不顯示文件(from SO)

于是我按照這個(gè)方法嘗試,先打開 Android Device Monitor,里面什么也沒有,然后打開模擬器,隨著模擬器的啟動(dòng),Monitor 左側(cè)面板出現(xiàn)了 offline 的模擬器,然后再相繼啟動(dòng)很多服務(wù),最后就顯示為 online 了,如下圖所示,這樣我們就可以通過 Monitor 中的 File Explorer 標(biāo)簽訪問模擬器中的文件了。


解決 File Explorer 不顯示文件

問題2:File Explorer 中的文件無(wú)法訪問

還記得剛剛說(shuō)的嗎,openFileOutput() 方法生成的文件存放在一個(gè)默認(rèn)路徑,即 /data/data/(package name)/files 下。由于我的包名是 com.knightaoko.filepersistencetest,所以在下文的敘述中,大家看到這個(gè)陌生的字符串不要驚訝,實(shí)際操作下替換成你自己的包名即可。(這期間還碰到個(gè)問題,好像 Android Device Monitor 不能和 Instant Run 同時(shí)運(yùn)行,所以在此需要把 Instant Run 功能關(guān)閉,怎么關(guān)閉大家自行 Google,很簡(jiǎn)單的。)于是,下一步當(dāng)然是打開這個(gè)路徑了,找到 data,點(diǎn)擊,沒反應(yīng),再點(diǎn)擊,還是沒反應(yīng)。又遇到問題了,我無(wú)法訪問 data 目錄,通過 Google 搜索,我知道了 File Explorer 中的每個(gè)文件和文件夾都是有訪問權(quán)限的,如下圖紅框中標(biāo)識(shí)的就是 data 文件夾的訪問權(quán)限。


無(wú)權(quán)訪問

訪問權(quán)限是 drwxrwx--x,這玩意是什么意思呢?我相信,學(xué)過 Linux 的同學(xué)肯定一眼就知道這是什么意思。不知道也沒關(guān)系,聽我慢慢道來(lái),這一個(gè)字符串一共有 10 個(gè)字符,第一個(gè)字符表示是文件夾還是目錄,如果第 1 個(gè)字符是 d,則表示是文件夾。后面 9 個(gè)字符可以分為三組,第一組 rwx 表示所有者(user)對(duì)文件的訪問權(quán)限,r 表示可讀(read),w 表示可寫(write),x 表示可被執(zhí)行,- 表示沒有該權(quán)限;第二組 rwx 表示組群(group)對(duì)文件的訪問權(quán)限;第三組 --x 表示其他人(other)對(duì)文件的訪問權(quán)限,可以看到,沒有 r 和 w,說(shuō)明 data 對(duì)其他人來(lái)說(shuō)是不可讀不可寫的,怪不得我們不能打開它呢,那怎么辦呢?于是我又網(wǎng)上搜啊搜,發(fā)現(xiàn)可以通過一定的方法修改文件的訪問權(quán)限的,對(duì),這個(gè)方法就是 adb shell。

adb shell 是 Android SDK 中的一個(gè)工具,你可以在你的 Android SDK 目錄下的 platform-tools 找到它,下圖就是我電腦上的該目錄:


adb 所在目錄

我們需要將這個(gè)目錄添加到環(huán)境變量,為的是后面在命令行直接調(diào)用 adb 中的命令。比如在此我將 D:\AndroidSDK\platform-tools 添加到環(huán)境變量(具體怎么添加應(yīng)該不用手把手教學(xué)了吧)后,運(yùn)行 cmd 命令行,然后輸入下面的命令。


通過 adb shell 獲取文件訪問權(quán)限
  • adb shell 是打開 adb 外殼程序。
  • su 是獲取 root 權(quán)限,只有 root 權(quán)限才能修改文件的訪問權(quán)限。
  • 底下一堆 chmod 777 是把對(duì)應(yīng)的文件或文件夾的訪問權(quán)限的后 9 位設(shè)置成 rwxrwxrwx,777 就三個(gè)二進(jìn)制 111, 喝起來(lái)就是 111111111(9 個(gè) 1),即相當(dāng)于把后 9 位訪問權(quán)限都置 1,于是就成了 rwxrwxrwx,即所有用戶都具有該文件的全部訪問權(quán)限(媽媽再也不用擔(dān)心我打不開 data 了…)。我們來(lái)看看結(jié)果:

修改后的文件訪問權(quán)限

問題3:File Explorer 中的文件無(wú)法 pull(下載)

可以看到這些目錄都能訪問了,可以在包名目錄下看到生成的 data 文件了,下一步我們想把這個(gè)文件復(fù)制到我們的電腦里,怎么操作呢?選中該文件,點(diǎn)擊右上角的 pull 圖標(biāo)即可,如下圖所示:


文件下載按鈕

點(diǎn)擊之后,選好保存路徑。結(jié)果我們發(fā)現(xiàn)文件并沒有保存下來(lái),在 Console 窗口還提示了錯(cuò)誤:


文件下載出錯(cuò)

意思就是拉取文件失敗,因?yàn)槟銦o(wú)權(quán)進(jìn)行該操作。又是一臉懵逼,怎么辦?還能怎么辦,繼續(xù) Google 唄!這里我找了很久,終于發(fā)現(xiàn)了解決方案:adb root 。沒錯(cuò),在命令行輸入這條語(yǔ)句,完美解決!(注意是在 windows 下的命令行,而不是 adb shell 里,當(dāng)然前提是你添加了 adb 的目錄到你的環(huán)境變量里)


通過 adb root 獲取文件下載權(quán)限

然后我們?cè)賮?lái) pull 一下,臥槽,崩潰了,又發(fā)現(xiàn)問題了:Failed to pull selection。


文件下載再次出錯(cuò)

怎么辦?OK,繼續(xù) Google,在 StackOverflow 里找到了一個(gè)高贊的解決方法:


重新選擇模擬器(from SO)

什么意思?重新選擇一下 Android Device Monitor 左側(cè)面板的設(shè)備即可,沒錯(cuò)!就是把下圖紅框中國(guó)的玩意兒點(diǎn)一下。


重新選擇模擬器

好了,我們?cè)僬业絼倓偰莻€(gè)要拷貝的文件,pull 一下,臥槽!!成功了,真是踏破鐵鞋無(wú)覓處,得來(lái)全得靠姑姑(谷歌)。


文件下載成功

總結(jié)

總結(jié)一下吧,初次使用 Android Device Monitor,本來(lái)只是用來(lái)輔助學(xué)習(xí) SQLite,結(jié)果一上午碰到一大堆問題,總算都一一解決了,在此總結(jié)一下。

  • Android Device Monitor 要在模擬器運(yùn)行之前就打開,這樣才不會(huì)出現(xiàn)模擬器設(shè)備 offline 的問題。

  • Android Device Monitor 和 Instant Run 貌似有沖突,在用 Android Device Monitor 時(shí)關(guān)閉 Instant Run 功能。我相信還有更好的解決方法,不然打開一個(gè)大一點(diǎn)的 APP,不能同時(shí)用這兩個(gè)功能,那多影響效率啊。只是我目前還處于學(xué)習(xí)階段,上述方案能解決我當(dāng)前的問題,不影響我進(jìn)一步學(xué)習(xí),那它就是 OK 的。

  • 操作 Android Device Monitor 時(shí),應(yīng)該默認(rèn)把你當(dāng)做其他人(other)對(duì)待,所以你對(duì)文件的訪問權(quán)限很受限制。解決方法是在命令行中,通過在 adb shell 里獲取 root 權(quán)限,并更改相應(yīng)文件的訪問權(quán)限,當(dāng)然記得將 adb 所在目錄添加進(jìn)環(huán)境變量。

  • 能訪問了但是不能下載也是很麻煩的事,通過在命令行運(yùn)行 adb root 獲取文件的下載權(quán)限。

  • 通過上述操作之后,就能正常使用 Android Device Monitor 進(jìn)行文件管理了。但不幸的是,當(dāng)你重啟模擬器,或啟動(dòng)另一臺(tái)模擬器時(shí),這些配置又得重新來(lái)過,否則你還是無(wú)法訪問和下載模擬器中的文件。這個(gè)問題的根源在于權(quán)限二字,問題不是不能獲取權(quán)限(通過 adb shell 可以獲取 root 權(quán)限),而在于獲取權(quán)限太麻煩了,希望后續(xù)版本的 Android Studio 可以直接在 Android Device Monitor 的 GUI 中設(shè)置相應(yīng)獲取權(quán)限的命令,使得廣大 Android 開發(fā)者對(duì)模擬器中的文件操作更有效率。

  • Google 大法好。

  • 轉(zhuǎn)載于:https://www.cnblogs.com/EasyLive2006/p/7418612.html

    總結(jié)

    以上是生活随笔為你收集整理的Android Device Monitor 文件管理的常见问题 - z的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。