2011-02-23 46 views
2

我知道從模擬器下發展刪除一個應用程序的方法有兩種:在模擬器中刪除應用程序(.apk)?

  1. 使用模擬器GUI:設置> 應用程序>管理應用程序> 卸載
  2. 使用ADB:亞洲開發銀行卸載

我可能已經發現了第三種方式,使用 '亞行殼':

rm /data/app/<package>.apk 

然而,這似乎並不是一個真正的刪除應用程序的好方法,因爲可能存在與其相關的其他信息(註冊?)。

這是什麼信息,它在哪裏可以找到?

回答

4

這很有趣,你提到這一點。我跑了一個快速的自制測試來解釋你的問題。

通常,當您安裝.apk文件時,Android爲位於/ data/data/<啓動活動包名稱的位置創建一個內部存儲區。這主要用作不能被其他應用程序或電話用戶訪問的內部緩存區域。您可以在Androids數據存儲部分的Internal storage章節中詳細瞭解這些內容。這是您的應用專用的區域,您可以在那裏寫入私人數據。

從理論上卸載應用程序後,此內部存儲區域也會被刪除。您概述的前兩種方法確實如此:/ data/app /中的.apk文件以及/ data/data /中的內部存儲區被刪除。

但是,如果您使用adb shell並運行rm命令,則所有刪除的內容都是/ data/app /中的.apk文件。 in/data/data /中的內部存儲區不會被刪除。所以實質上你是正確的,應用程序的附加信息不一定被刪除。但另一方面,如果您在運行該命令後重新安裝應用程序,則現有內部存儲區將被覆蓋,因爲它正在安裝一個新的副本。

+0

很好的答案,但'rm/data/data/'不會卸載應用程序,因爲它仍然在設置的「管理應用程序」部分。我確信答案可以在AOSP源代碼中找到,我只是希望有人知道答案。 – 2011-03-15 15:49:07

+0

是的,我隱含地說,rm/data/data/不會卸載應用程序,應該在答案中更加明確! – 2011-03-15 19:11:18

1

我相信應用程序在SD卡上創建的任何文件都不會被刪除。

+0

謝謝,但我不認爲SD卡將包含註冊信息,即使在刪除.apk文件後,應用程序也會被列爲已安裝。必須有別的東西。第一次嘗試+1。 – 2011-02-28 15:47:02

2

我也有這個問題。我的手機上有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修復),使他們解決他們所發現。運行需要您自擔風險,並備份您的文件。如果此代碼以任何方式破壞任何內容,我不負責任。

如果有人想將這些腳本更新/合併在一起,那很好。這些只是爲了解決我的問題,他們這樣做,只是想我會分享他們。

2

adb uninstall com.example.test

com.example.test可能會有所不同acording到您的應用程序。