Android会保留.apk文件吗?如果是这样的话?

问题描述 投票:174回答:19

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

是否有标准位置Android将保留此类文件?

android packages apk installer
19个回答
116
投票

预安装的应用程序位于/system/app文件夹中。用户安装的应用程序位于/data/app中。我想你不能访问,除非你有一个root电话。我这里没有root手机,但试试这个代码:

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]);

        }
    }

它确实列出了我的root htc魔法和emu中的apks。


4
投票

如果您是root用户,请下载应用程序Root Explorer。 root用户的最佳文件管理器。无论如何,System / app具有手机附带的所有默认apks,而data / apk包含您已安装的应用程序的所有apks。只需长按你想要的apk(在Root Explorer中),转到你的/ sdcard文件夹然后粘贴。


3
投票

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

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

3
投票
  • 数据/应用
  • 系统/应用
  • systems / priv-app
  • mnt / asec(安装在SD卡中时)

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

adb pull / mnt / asec


2
投票

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


1
投票

如果您正在使用eclipse goto DDMS然后在那里存档资源管理器,您将看到System / Apps文件夹,而apks就在那里


0
投票

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

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

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


0
投票

在root设备上获取apks的另一种方法是使用rom工具箱。

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


0
投票

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


0
投票

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

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

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


-1
投票

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


109
投票

您可以使用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

91
投票

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

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

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


25
投票

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

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


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).


8
投票

如果您正在寻找特定应用程序的路径,快速而肮脏的解决方案就是grep the bugreport:

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

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


7
投票

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

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

请注意,您必须将手机设为root用户才能获取受版权保护的应用。


7
投票

从市场安装

市场的行为是否在安装后保留apk。安装后Google Play不会保留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

当然系统必须在某处存储所有apks。系统有三个位置可以保持apks基本不同类型的apks。

  1. 对于股票应用程序

这些通常是按制造商的设备发货,包括系统运行的核心应用程序和谷歌服务,你可以在目录/system/app/system/priv-app下找到它们。

  1. 用户安装的应用

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

  1. 在SD卡上的应用程序

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

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

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


4
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.