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

时间:2010-03-24 13:26:12

标签: android packages apk installer

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

Android是否会保留这些文件的标准位置?

19 个答案:

答案 0 :(得分:115)

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

答案 1 :(得分:104)

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

答案 2 :(得分:91)

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

  1. 从Google Play获取AirDroid
  2. 使用AirDroid从PC网络浏览器访问手机
  3. 转到应用并选择已安装的应用
  4. 点击“下载”按钮,从手机下载此应用的APK版本
  5. 您无需拔出手机,使用adb或撰写任何内容。

答案 3 :(得分:25)

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

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

答案 4 :(得分: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).

答案 5 :(得分:8)

如果您正在寻找特定应用的路径,那么快速而肮脏的解决方案就是只关注错误报告:

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

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

答案 6 :(得分:7)

您可以使用ADB提取应用。它们在/ data / App /中,我相信。

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

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

答案 7 :(得分:7)

从市场安装

市场的行为是否在安装后保留apk。安装后Google Play不会保留apk。其他第三方市场可能会有不同的行为。

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

当我们从调试工具安装apk时,直接调用hunterp$ file dinkle dinkle: Mach-O universal binary with 2 architectures dinkle (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64 dinkle (for architecture arm64): Mach-O 64-bit dynamically linked shared library 或从eclipse / android studio安装apk,apk将被转移(adb install)到公共可读写目录,通常是{{1 }}。之后,该工具将使用adb push命令进行安装,它将在成功安装后删除/data/local/tmp/中的临时apk。

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

pm

系统如何保留apk

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

  1. for stock app
  2. 这些通常由制造商提供,包括用于系统运行的核心应用和谷歌服务,您可以在目录/data/local/tmp/$ adb install bin/TestApplication.apk 3155 KB/s (843375 bytes in 0.260s) pkg: /data/local/tmp/TestApplication.apk Success 下找到它们。

    1. 用户安装的应用
    2. 大多数apks属于这一类。这些apks通常由用户在市场上安装,或者/system/app没有/system/priv-app选项安装。您可以在目录adb install下找到它们,以获取有根设备。

      1. app on sdcard
      2. 如果apk在其清单中的-s的sdcard中启用其安装位置,则可以将该应用从系统的应用程序管理器菜单移至sdcard。这些apk通常位于sdcard /data/app的安全文件夹中。

        强制安装位置到SD卡的另一种方法是使用命令android:installLocation="auto"

        请注意,预安装应用的文件不再位于单个/mnt/sdcard/asec文件中。对于最新的Android发行版,目录adb install -s apk-to-install.apk.apk中的每个预安装应用都有一个文件夹。

答案 8 :(得分:4)

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

答案 9 :(得分:3)

使用此列出/ data / app /

下的所有.apks
adb bugreport | grep 'package name="' | grep 'codePath="/data' | cut -d'"' -f4

答案 10 :(得分:3)

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

答案 11 :(得分:3)

  • 数据/应用
  • 系统/应用
  • 系统/ PRIV-应用
  • mnt / asec(安装在SD卡中时)

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

  

adb pull / mnt / asec

答案 12 :(得分:1)

如果您正在使用eclipse转到DDMS,然后在那里使用文件资源管理器,您将看到System / Apps文件夹并且apks在那里

答案 13 :(得分:1)

.apk文件可以位于/ data / app /目录下。使用 ES文件资源管理器,我们可以访问这些.APK文件。

答案 14 :(得分:0)

获取apk的另一种方法是在root设备上找不到 rom工具箱

使用应用管理器进行备份,然后转到storage/emulated/appmanager并选中系统应用备份用户应用备份

答案 15 :(得分:0)

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

答案 16 :(得分:0)

当我在模拟器上安装我的应用程序时,它在

中显示了我的.apk文件
  

数据/应用   然后我用了   ls data / app //查看它是否存在或   不

安装应用程序后,只需使用ls命令vie shell并检查所需的目录,但这取决于您尝试安装的应用程序类型。我用这种方法Install 指出任何事情是错的。

答案 17 :(得分:0)

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

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

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

答案 18 :(得分:0)

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