2010-03-24 91 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,然后查找“我的应用程序”,选项卡全部,然后您将找到重新安装您喜欢的某个应用程序的方法。我遇到了一个我无法通过搜索一个应用程序找到的问题,但它存在于我的应用程序中,因此我可以在我的新手机中重新安装;)

    相关问题