我知道從模擬器下發展刪除一個應用程序的方法有兩種:在模擬器中刪除應用程序(.apk)?
- 使用模擬器GUI:設置> 應用程序>管理應用程序> 卸載
- 使用ADB:亞洲開發銀行卸載
我可能已經發現了第三種方式,使用 '亞行殼':
rm /data/app/<package>.apk
然而,這似乎並不是一個真正的刪除應用程序的好方法,因爲可能存在與其相關的其他信息(註冊?)。
這是什麼信息,它在哪裏可以找到?
我知道從模擬器下發展刪除一個應用程序的方法有兩種:在模擬器中刪除應用程序(.apk)?
我可能已經發現了第三種方式,使用 '亞行殼':
rm /data/app/<package>.apk
然而,這似乎並不是一個真正的刪除應用程序的好方法,因爲可能存在與其相關的其他信息(註冊?)。
這是什麼信息,它在哪裏可以找到?
這很有趣,你提到這一點。我跑了一個快速的自制測試來解釋你的問題。
通常,當您安裝.apk文件時,Android爲位於/ data/data/<啓動活動包名稱的位置創建一個內部存儲區。這主要用作不能被其他應用程序或電話用戶訪問的內部緩存區域。您可以在Androids數據存儲部分的Internal storage章節中詳細瞭解這些內容。這是您的應用專用的區域,您可以在那裏寫入私人數據。
從理論上卸載應用程序後,此內部存儲區域也會被刪除。您概述的前兩種方法確實如此:/ data/app /中的.apk文件以及/ data/data /中的內部存儲區被刪除。
但是,如果您使用adb shell並運行rm命令,則所有刪除的內容都是/ data/app /中的.apk文件。 in/data/data /中的內部存儲區不會被刪除。所以實質上你是正確的,應用程序的附加信息不一定被刪除。但另一方面,如果您在運行該命令後重新安裝應用程序,則現有內部存儲區將被覆蓋,因爲它正在安裝一個新的副本。
我相信應用程序在SD卡上創建的任何文件都不會被刪除。
謝謝,但我不認爲SD卡將包含註冊信息,即使在刪除.apk文件後,應用程序也會被列爲已安裝。必須有別的東西。第一次嘗試+1。 – 2011-02-28 15:47:02
我也有這個問題。我的手機上有Link2SD,但SD卡上的ext4分區已損壞,因此我重新格式化了,但所有鏈接的文件仍在/ data/app文件夾中。所以我創建了一個腳本來刪除所有損壞的鏈接,並且遇到同樣的問題,應用程序管理員說他們仍然安裝!所以我做了另一個腳本來解決這個問題,在手機上使用pm程序。
繼承人我的代碼刪除從app文件夾損壞的鏈接:
fixln.sh
#!/system/bin/sh
#follow and fix symlinks
appfolder="/data/app/"
files=`ls ${appfolder}*`
fix=$1
badstring="No such file or directory"
for i in $files
do
if [ -h $i ]
then
if [ -a `readlink $i` ]
then
echo -e "\e[32m$i is good\033[0m";
else
if [ $fix == "fix" ]
then
`rm $i`
echo -e "\e[31m$i is bad, and was removed\033[0m";
else
echo -e "\e[31m$i is bad\033[0m";
if
fi
else
echo -e "\e[36m$i is not a symlink\033[0m";
fi
done
和我的繼承人代碼,以卸載沒有APK應用:
修復。SH
#!/system/bin/sh
#searches through a list of installed apps, and removes the ones that have no apk file
appfolder="/data/app/"
fix=$1
installed=`pm list packages -f -u`
for i in $installed
do
usefull=${i#*:}
filename=${usefull%=*}
package=${usefull#*=}
if [ -a $filename ]
then
echo -e "\e[32m$package ($filename) is good\033[0m"
else
if [ "$fix" == "fix" ]
then
uninstall=`pm uninstall $package`
if [ "$uninstall" == "Success" ]
then
echo -e "\e[31m$package ($filename) is bad, and was removed\033[0m"
else
echo -e "\e[31m$package ($filename) is bad, and COULD NOT BE REMOVED\033[0m"
fi
else
echo -e "\e[31m$package ($filename) is bad\033[0m"
fi
fi
done
複製這些文件到您的手機,並且不帶參數運行它們,看看它們查找,或添加修復程序到年底(fixmissing.sh修復),使他們解決他們所發現。運行需要您自擔風險,並備份您的文件。如果此代碼以任何方式破壞任何內容,我不負責任。
如果有人想將這些腳本更新/合併在一起,那很好。這些只是爲了解決我的問題,他們這樣做,只是想我會分享他們。
adb uninstall com.example.test
com.example.test可能會有所不同acording到您的應用程序。
很好的答案,但'rm/data/data/'不會卸載應用程序,因爲它仍然在設置的「管理應用程序」部分。我確信答案可以在AOSP源代碼中找到,我只是希望有人知道答案。 –
2011-03-15 15:49:07
是的,我隱含地說,rm/data/data/不會卸載應用程序,應該在答案中更加明確! –
2011-03-15 19:11:18