2010-03-24 33 views

回答

107

預安裝的應用程序位於/system/app文件夾中。用戶安裝的應用程序位於/data/app。我想你不能訪問,除非你有根深蒂固的手機。 我沒有根深蒂固的手機在這裏,但試試這個代碼了:

public class Testing extends Activity { 
    private static final String TAG = "TEST"; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     File appsDir = new File("/data/app"); 

     String[] files = appsDir.list(); 

     for (int i = 0 ; i < files.length ; i++) { 
      Log.d(TAG, "File: "+files[i]); 

     } 
    } 

它確實列出了我的根的HTC Magic和鴯鶓的的apk。

+0

這工作就像在摩托羅拉Droid魅力和Nexus One兩個都沒有根。 – Gubatron 2010-03-25 18:12:39

+0

好吧,你從來沒有說過你想要他們:) – Macarse 2010-03-26 01:11:35

+0

我希望能夠閱讀他們,並與他們做事。幸運的是它們是可讀的。 – Gubatron 2010-03-26 14:34:28

3

在/數據/應用程序,但複製保護我不認爲你可以訪問它。

+2

那麼,通過藍牙允許共享APK的應用程序究竟如何工作?他們是如何做到的呢? – 2014-09-27 08:19:03

7

您可以使用ADB提取應用程序。他們在/ data/App /中,我相信。

adb pull (location on device) (where to save) 

請注意,您必須根據您的手機拉動受複製保護的應用程序。

25

沒有標準位置,但是您可以使用PackageManager查找有關包的信息,並且您可以從中獲取的ApplicationInfo類具有有關特定包的各種信息:.apk路徑,其數據路徑目錄,僅資源.apk(用於轉發鎖定的應用程序)的路徑等。請注意,根據您與其他應用程序的關係,您可能有也可能沒有權限讀取這些目錄;但是,所有應用程序都能夠讀取資源.apk(這也是非前向鎖定應用程序的實際.apk)。

如果您只是在shell中探索,目前非向前鎖定的應用程序位於/data/app/.apk。 shell用戶可以讀取特定的.apk,但它不能列出目錄。在將來的版本中,命名約定會稍微改變,所以不要指望它保持不變,但是如果從包管理器中獲得.apk的路徑,則可以在shell中使用它。

+2

什麼是「前進鎖定應用程序」? – 2012-05-04 19:55:45

+1

這是一箇舊的複製保護機制,它安裝了帶有隻允許該應用程序讀取它的權限的.apk。 – hackbod 2012-05-13 16:35:39

0

當我安裝我的模擬器的應用程序,它顯示我的.apk文件中

數據/應用 然後我用 LS數據/應用//看看是否存在或不

安裝完應用程序後,只需使用ls命令vie shell並檢查所需的目錄,但這取決於您嘗試安裝的應用程序類型。我用這個方法去Install 如果有什麼事情是錯的話點。

+0

我也試圖找到apks,但我發現的是,你不能找到所有的apks因此我建議的生根方法。我無法獲得所有安裝的apks。因此,最好根植您的手機,並使用Titanium Backup獲取所有文件,並獲得對手機的更多控制權。 – 2011-10-28 12:46:27

4

如果您已經紮根,請下載應用程序Root Explorer。最佳文件管理器,用於有根用戶。 無論如何,系統/應用程序具有手機隨附的所有默認功能,而數據/ apk包含您已安裝的所有應用程序的所有功能。只需長按你想要的apk(在Root Explorer中),進入你的/ sdcard文件夾並粘貼即可。

17

預安裝的應用程序通常位於/ system/app中,用戶安裝的應用程序位於/ data/app中。

您可以使用「adb pull」,但您需要知道APK文件的完整路徑。在模擬器上,您可以使用「adb shell」+「ls」獲取目錄列表。但在Android設備上,由於安全原因,您無法在「/ data」文件夾中執行此操作。那麼如何找出APK文件的完整路徑?

通過編寫查詢PackageManager的程序,您可以獲得安裝的所有應用程序的完整列表。下面的短代碼片段:

PackageManager pm = getPackageManager(); 
List<PackageInfo> pkginfo_list = pm.getInstalledPackages(PackageManager.GET_ACTIVITIES); 
List<ApplicationInfo> appinfo_list = pm.getInstalledApplications(0); 
for (int x=0; x < pkginfo_list.size(); x++){    
    PackageInfo pkginfo = pkginfo_list.get(x); 
    pkg_path[x] = appinfo_list.get(x).publicSourceDir; //store package path in array 
} 

您還可以找到將提供此類信息的應用程序。有很多。 Try this one (AppSender).

1

,如果使用的是Eclipse轉到DDMS,然後資源管理器在那裏你會看到系統/應用程序文件夾和的APK有

85

如果你只是想了解你以前安裝的東西的APK文件,這樣做:

  1. 得到谷歌AirDroid播放
  2. 訪問使用AirDroid從您的電腦網絡瀏覽器手機
  3. 轉到應用和選擇安裝的應用程序
  4. 點擊「下載」按鈕,從您的手機

你並不需要Root權限的手機,使用adb,或寫什麼下載這個應用程序的APK版本。

+0

在osx上也很棒,謝謝! – jamescampbell 2017-10-14 20:16:35

+1

Downvoted,因爲這並沒有真正回答這個問題。如果OP想要使用ADB,那麼它可以在授權調試的設備上使用,但忘記密碼或屏幕破​​裂。 – Penn 2017-10-18 18:53:10

8

如果你正在尋找一個特定的應用程序的路徑,一個快速和骯髒的解決方法就是用grep的錯誤報告:

$ adb bugreport | grep 'dir=/data/app' 

我不知道,這將提供一個詳盡的清單,所以它可能有助於首先運行該應用程序。

3

使用此列出所有.apks在/ data/app中/

adb bugreport | grep 'package name="' | grep 'codePath="/data' | cut -d'"' -f4 
0

另一種方式來獲得apk是你無法找到,在紮根設備是ROM工具箱

使用應用程序管理器,然後去storage/emulated/appmanager和檢查或者系統的應用程序備份用戶的應用程序備份做一個備份。

0

要找到apk,請從Play商店下載並安裝藍牙應用程序發件人。安裝完成後,打開藍牙應用程序發件人。它將顯示安裝在您設備上的所有應用程序(.apk),然後您可以通過藍牙輕鬆將應用程序傳輸到您的PC。

68

您可以使用包管理器(pm)在adb shell列出包:

adb shell pm list packages 

,並顯示在.apk文件是:

adb shell pm path com.king.candycrushsaga 
package:/data/app/com.king.candycrushsaga-1/base.apk 

而且adb pull下載APK。

adb pull data/app/com.king.candycrushsaga-1/base.apk 
+8

這應該是被接受的答案。 – 2016-06-28 00:33:24

+3

很棒的回答。這是一種魅力。 – 2016-07-21 13:02:19

+2

應該被接受 – Penn 2017-10-18 18:53:29

0

就象反對的書面所選擇的答案,你並不需要root並且可以得到安裝的應用程序的APK的,這是多麼我已經做到了我的應用程序(here) 。例如:

List<PackageInfo> packages=getPackageManager().getInstalledPackages(0); 

然後,每個列表的項目,您可以訪問packageInfo.applicationInfo.sourceDir,這是安裝的應用程序的APK的完整路徑。

7

從市場

安裝這是市場是否保留APK安裝後的行爲。安裝後,Google Play不會保留apk。其他第三方市場可能有不同的行爲。

從開發/調試工具(ADB,日食,機器人工作室)安裝

當我們安裝從調試工具的APK,直接調用adb install或日食/ Android的工作室,在APK將被轉移(adb push )到公共的可讀寫目錄,通常爲/data/local/tmp/。之後,該工具將使用pm命令進行安裝,它將在安裝成功後刪除臨時apk /data/local/tmp/

我們可以從下面的調試輸出中獲得這些信息。

$ adb install bin/TestApplication.apk 
3155 KB/s (843375 bytes in 0.260s) 
    pkg: /data/local/tmp/TestApplication.apk 
Success 

系統如何保持APK

課程體系必須保存所有的apk地方。系統有三個地方可以讓apks在不同類型的apks上保持基本。

  1. 股票應用

這些通常是由製造運設備,包括系統運行和谷歌服務的核心應用程序,你可以在目錄/system/app/system/priv-app找到他們。

  • 用戶安裝的應用
  • 大多數的apk的屬於這一類。這些功能通常由用戶通過市場進行安裝,或者在沒有-s選項的情況下通過adb install進行安裝。您可以在目錄/data/app的根目錄設備下找到它們。

    上SD卡

    如果APK使其與在其清單android:installLocation="auto" SD卡安裝位置

  • 應用程序,該應用程序可以被移動從系統的應用程序管理器菜單到SD卡。這些apks通常位於sdcard /mnt/sdcard/asec的安全文件夾中。

    另一種強制安裝位置到SD卡的方法是使用命令adb install -s apk-to-install.apk

    請注意,預安裝應用程序的文件不再在單個.apk文件中。有一個文件夾包含目錄/system/app/system/priv-app中最新的android版本中每個預裝應用程序的文件。

  • 3
    • 數據/應用
    • 系統/應用
    • 系統/ PRIV應用內
    • MNT/ASEC(安裝在SD卡時)

    可以從任何的拉.apks他們:

    adb pull/mnt/asec

    +0

    從[AndroidAPKsGet](http://androidapksget.blogspot.com)下載android apk文件。 – NomanJaved 2017-11-04 23:42:58

    1

    .apk文件可以位於/ data/app /目錄下。使用ES文件瀏覽器我們可以訪問這些.APK文件。

    0

    嗯,我來到這篇文章,因爲我想重新安裝一些我很喜歡的應用程序。 如果這是您的情況,只需轉到Google Play,然後查找「我的應用程序」,選項卡全部,然後您將找到重新安裝您喜歡的某個應用程序的方法。我遇到了一個我無法通過搜索一個應用程序找到的問題,但它存在於我的應用程序中,因此我可以在我的新手機中重新安裝;)

    相關問題