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

Gub*_*ron 178 installer android packages apk

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

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

Mar*_*mro 125

您可以使用package manager(pm)adb shell来列出包:

adb shell pm list packages | sort
Run Code Online (Sandbox Code Playgroud)

并显示.apk文件的位置:

adb shell pm path com.king.candycrushsaga
package:/data/app/com.king.candycrushsaga-1/base.apk
Run Code Online (Sandbox Code Playgroud)

adb pull下载apk.

adb pull data/app/com.king.candycrushsaga-1/base.apk
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案.它的工作就像一个魅力. (6认同)
  • 每个应用程序都有一个名称与包名相同的文件夹,但最后是'-1'或'-2',任何想法为什么? (2认同)

Mac*_*rse 118

预安装的应用程序位于/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]);

        }
    }
Run Code Online (Sandbox Code Playgroud)

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

  • 好的是,不仅文件是"可列表"的,它们也是可读的,所以它们符合我的目的. (3认同)

小智 91

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

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

您无需使用手机,使用adb或编写任何内容.

  • Downvoted,因为这并没有真正回答这个问题.如果OP想要使用ADB,那么它可以在授权调试但忘记密码或屏幕损坏的设备上使用. (2认同)

hac*_*bod 25

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

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

  • 什么是"前进锁定的应用程序"? (2认同)

小智 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
}
Run Code Online (Sandbox Code Playgroud)

您还可以找到可提供此类信息的应用.它们很多. 试试这个(AppSender).


tom*_*ple 8

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

$ adb bugreport | grep 'dir=/data/app' 
Run Code Online (Sandbox Code Playgroud)

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


Bry*_*nny 7

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

adb pull (location on device) (where to save)
Run Code Online (Sandbox Code Playgroud)

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


ali*_*dro 7

从市场安装

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

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

当我们从调试工具安装apk,直接调用adb install或从eclipse/android studio安装apk时adb push,通常会将apk传送到公共可读和可写目录/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
Run Code Online (Sandbox Code Playgroud)

系统如何保持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中启用其安装位置,则可以从系统的应用程序管理器菜单将应用程序移动到SD卡.这些apks通常位于sdcard的安全文件夹中/mnt/sdcard/asec.

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

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


Rob*_*ond 5

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

  • 那么允许通过蓝牙共享 APK 的应用程序究竟是如何工作的呢?他们是怎么做到的呢? (2认同)

小智 5

如果您已 root,请下载应用程序 Root Explorer。根用户的最佳文件管理器。无论如何,系统/应用程序拥有手机附带的所有默认apk,而数据/应用程序拥有您已安装的应用程序的所有apk。只需长按您想要的 apk(在 Root Explorer 中),进入您的 /sdcard 文件夹并粘贴即可。


小智 5

  • 数据/应用程序
  • 系统/应用程序
  • 系统/私有应用程序
  • mnt/asec(安装在 SD 卡中时)

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

adb 拉 /mnt/asec