202

android 从 Marketplace 安装应用程序后,是否保留 .apk 文件?

Android 是否有一个标准的位置来保存这些文件?

4

19 回答 19

157

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

adb shell pm list packages | sort

并显示.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
于 2015-03-15T11:53:16.750 回答
130

预装的应用程序位于/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 魔法和 emu 中的 apk。

于 2010-03-24T13:48:37.273 回答
100

如果您只想获取之前安装的 APK 文件,请执行以下操作:

  1. 从 Google Play 获取 AirDroid
  2. 从您的 PC 网络浏览器使用 AirDroid 访问您的手机
  3. 转到应用程序并选择已安装的应用程序
  4. 单击“下载”按钮从您的手机下载此应用的 APK 版本

你不需要root你的手机,使用adb,或写任何东西。

于 2012-08-10T19:47:22.007 回答
26

没有标准位置,但是您可以使用 PackageManager 来查找有关包的信息,并且您可以从那里获得的 ApplicationInfo 类包含有关特定包的各种信息:其 .apk 的路径、其数据目录的路径、路径到仅资源的 .apk(用于前向锁定的应用程序)等。请注意,您可能有权也可能没有权限读取这些目录,具体取决于您与其他应用程序的关系;但是,所有应用程序都能够读取资源 .apk(对于非前向锁定应用程序来说,这也是真正的 .apk)。

如果您只是在 shell 中闲逛,当前非前向锁定的应用程序位于 /data/app/.apk 中。shell 用户可以读取特定的.apk,但它不能列出目录。在未来的版本中,命名约定会稍微改变,所以不要指望它保持不变,但是如果你从包管理器中获得 .apk 的路径,那么你可以在 shell 中使用它。

于 2010-03-24T17:11:14.263 回答
18

预装应用程序通常位于 /system/app 中,用户安装的应用程序位于 /data/app 中。

您可以使用“adb pull”,但您需要知道 APK 文件的完整路径。在模拟器上,您可以使用“adb shell”+“ls”获取目录列表。但在安卓设备上,由于安全原因,您将无法在“/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
}

您还可以找到提供此类信息的应用程序。他们有很多。 试试这个(AppSender)。

于 2011-05-24T14:42:37.477 回答
11

从市场安装

安装后是否保留apk是市场的行为。安装后谷歌播放不保留apk。其他第三方市场可能有不同的行为。

从开发/调试工具(adb、eclipse、android studio)安装

当我们从调试工具安装apk时,直接调用adb install或者从eclipse/android studio,apk会被传输(adb push)到一个公共的可读写目录,通常是/data/local/tmp/. 之后,该工具将使用pm命令安装,安装/data/local/tmp/成功后会删除临时apk。

我们可以从调试输出中获取这些信息,如下所示。

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

系统如何保存apk

当然,系统必须将所有 apk 存储在某个地方。系统根据 apk 的不同类型将 apk 保存在三个地方:

  1. 股票应用

    这些通常由制造商在设备中发货,包括用于系统运行的核心应用程序和谷歌服务,您可以在目录/system/app/system/priv-app.

  2. 用户安装的应用

    大多数apk都属于这一类。这些 apk 通常由用户从市场安装或adb install不带-s选项安装。/data/app您可以在根设备的目录下找到它们。

  3. SD卡上的应用

    android:installLocation="auto"如果 apk在其清单中启用其在 sdcard 中的安装位置,则可以将应用程序从系统的应用程序管理器菜单移动到 sdcard。这些 apk 通常位于 sdcard 的安全文件夹中/mnt/sdcard/asec

    强制安装位置到 sdcard 的另一种方法是使用命令adb install -s apk-to-install.apk

请注意,预安装应用程序的.apk文件不再位于单个文件中。有一个文件夹,其中包含目录中每个预安装应用程序/system/app/system/priv-app最新 android 版本的文件。

于 2015-05-08T07:18:05.497 回答
9

如果您正在寻找特定应用程序的路径,一个快速而肮脏的解决方案就是 grep 错误报告:

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

我不知道这会提供详尽的列表,因此它可能有助于首先运行该应用程序。

于 2012-08-15T17:44:02.283 回答
8

您可以使用 ADB 拉取应用程序。我相信它们在 /data/App/ 中。

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

请注意,您必须 root 手机才能提取受版权保护的应用程序。

于 2010-03-24T13:34:00.690 回答
5

在 /data/app 但出于复制保护,我认为您无法访问它。

于 2010-03-24T13:32:15.093 回答
5

如果您是 Root 用户,请下载应用程序 Root Explorer。根用户的最佳文件管理器。无论如何,System/app 拥有手机自带的所有默认 apk,data/apk 拥有你已安装应用的所有 apk。只需长按您想要的 apk(在根资源管理器中),进入您的 /sdcard 文件夹并粘贴。

于 2011-03-01T01:49:41.537 回答
4

使用它来列出 /data/app/ 下的所有 .apks

adb bugreport | grep 'package name="' | grep 'codePath="/data' | cut -d'"' -f4
于 2013-01-31T09:48:58.157 回答
4
  • 数据/应用
  • 系统/应用
  • 系统/隐私应用
  • mnt/asec(安装在 sdcard 中时)

您可以从其中任何一个中提取 .apks:

adb 拉 /mnt/asec

于 2015-07-16T17:24:23.887 回答
3

.apk 文件可以位于 /data/app/ 目录下。使用ES File Explorer,我们可以访问这些 .APK 文件。

于 2015-08-31T13:18:17.123 回答
2

如果你使用 eclipse goto DDMS 然后文件资源管理器在那里你会看到 System/Apps 文件夹和 apk 在那里

于 2011-10-28T12:30:42.500 回答
0

当我在模拟器上安装我的应用程序时,它显示了我的 .apk 文件

data/app 然后我用 ls data/app //查看是否存在

安装应用程序后,只需使用 ls 命令 vie shell 并检查所需目录,但这取决于您尝试安装的应用程序类型。 如果有任何问题,我使用此方法安装点。

于 2010-06-10T21:11:52.450 回答
0

apk在有根设备上获取找不到的 s 的另一种方法是使用rom tool box

使用应用程序管理器进行备份,然后转到storage/emulated/appmanager并检查系统应用程序备份用户应用程序备份

于 2014-04-26T04:21:53.833 回答
0

要查找apk,请从 Play 商店下载并安装蓝牙 App Sender。安装完成后,打开蓝牙 App Sender。它将显示(.apk)您设备中安装的所有应用程序,然后您可以通过蓝牙轻松地将应用程序传输到您的 PC。

于 2014-07-25T12:10:54.017 回答
0

与所选答案上所写的相反,您不需要 root,并且可以获得已安装应用程序的 APK,这就是我在我的应用程序上完成的方式(此处)。例子:

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

然后,对于列表中的每一项,您都可以访问packageInfo.applicationInfo.sourceDir,这是已安装应用的 APK 的完整路径。

于 2015-05-05T18:20:25.963 回答
-1

好吧,我来这篇文章是因为我想重新安装一些我非常喜欢的应用程序。如果是这种情况,只需转到 Google Play,然后查找“我的应用程序”、“全部”选项卡,您就会找到一种方法来重新安装您喜欢的某些应用程序。我遇到了一个通过搜索一个应用程序找不到的问题,但它在我的应用程序中,所以我可以在我的新手机中重新安装;)

于 2016-07-26T03:08:25.270 回答