如何在没有root访问权限的情况下获取已安装应用的APK?

pin*_*nas 184 android root apk

我正在尝试提取没有root权限的已安装Android应用的APK文件.

我认为这是不可能的,因为非系统应用程序的所有APK文件都位于/ data/app中,访问此文件夹需要root权限.然后我发现Google Play商店中有很多应用即使在非root设备上也可以访问APK文件.

有人能告诉我这是怎么回事吗?是否有备份应用程序备份没有root的APK文件?

mah*_*mah 354

无需root权限即可访问/ data/app; 该目录的权限是rwxrwx - x.对目录的执行权限意味着您可以访问它,但是缺少读取权限意味着您无法获取其内容的列表 - 因此,为了访问它,您必须知道将要访问的文件的名称.Android的包管理器将告诉您给定包的存储apk的名称.

要从命令行执行此操作,请使用adb shell pm list packages获取已安装软件包的列表并查找所需的软件包.

使用包名称,我们可以获取APK的实际文件名和位置adb shell pm path your-package-name.

并且知道完整目录,我们最终可以使用adb adb pull full/directory/of/the.apk

感谢@tarn指出在Lollipop下,apk路径将是 /data/app/your-package-name-1/base.apk

  • 要从命令行执行此操作,请使用`adb shell pm list packages`获取已安装软件包的列表,选择所需的软件包,将`-1.apk`附加到其中,然后从`/ data/app`中提取它.示例:如果包名是`org.mozilla.firefox`,请使用`adb pull/data/app/org.mozilla.firefox-1.apk`. (32认同)
  • 要获取APK的实际文件名,请使用adb shell pm path your-package-name.有关更详细的答案,请参阅此问题http://stackoverflow.com/questions/4032960/how-do-i-get-an-apk-file-from-an-android-device (10认同)
  • 对于棒棒糖,apk路径为/data/app/your-package-name-1/base.apk (2认同)

Yoj*_*mbo 50

Android会在程序包名称中附加序列号以生成最终的APK文件名(这可能会因Android OS的版本而异).以下命令序列适用于非root设备:

  1. 获取所需包的APK文件的完整路径名.

    adb shell pm path com.example.someapp
    
    Run Code Online (Sandbox Code Playgroud)

    这使输出为:package:/data/app/com.example.someapp-2.apk.

  2. 将APK文件从Android设备拉到开发框.

    adb pull /data/app/com.example.someapp-2.apk
    
    Run Code Online (Sandbox Code Playgroud)

  • 可以确认此解决方案在非root设备上工作,但在第一个命令之前需要知道包名称!使用'adb shell pm list packages'获取手机上所有包的列表,如果您不确定所需应用的包名称 (4认同)

Sag*_*are 20

您不需要ROOT权限即可获取已安装应用程序的列表.

你可以用android PackageManager来做.

下面是一个小代码段.

final PackageManager pm = getPackageManager();
//get a list of installed apps.
List<ApplicationInfo> packages =  pm.getInstalledApplications(PackageManager.GET_META_DATA);

for (ApplicationInfo packageInfo : packages) {
    Log.d(TAG, "Installed package :" + packageInfo.packageName);
    Log.d(TAG, "Apk file path:" + packageInfo.sourceDir);
}
Run Code Online (Sandbox Code Playgroud)


gol*_*021 7

  1. 检查已安装apk的列表(以下命令还列出了安装它的路径和包名称). adb shell pm list packages -f
  2. 使用adb pull/package_path/package name/path_in_pc (可以从上面的命令1获得的包路径和包名)


小智 6

当您安装Eclipse for Android开发时:

  • 将您的设备用作调试设备.在手机上:设置>应用程序>开发并启用USB调试,请参阅 http://developer.android.com/tools/device.html
  • 在Eclipse中,打开DDMS窗口:Window> Open Perspective> Other ...> DDMS,请参阅http://developer.android.com/tools/debugging/ddms.html
  • 如果您无法看到您的设备,请尝试(重新)为您的设备安装USB驱动程序
  • 在中间窗格中,选择"文件资源管理器"选项卡,然后转到系统>应用
  • 现在您可以选择一个或多个文件,然后单击顶部的"从设备中提取文件"图标(右侧的选项卡)
  • 选择目标文件夹 - tada!


小智 6

在Nougat(7.0)Android版本上运行adb shell pm list packages以列出设备上安装的软件包.然后运行adb shell pm path your-package-name以显示apk的路径.使用adb后将软件包复制到Downloads adb shell cp /data/app/com.test-1/base.apk /storage/emulated/0/Download.然后通过运行将apk从下载中拉到您的机器上adb pull /storage/emulated/0/Download/base.apk.


van*_*102 5

我有一个 does not exist error

这是我如何使它工作:

adb shell pm list packages -f | findstr zalo

package:/data/app/com.zing.zalo-1/base.apk=com.zing.zalo

adb shell

mido:/ $ cp /data/app/com.zing.zalo-1/base.apk /sdcard/zalo.apk
mido:/ $ exit


adb pull /sdcard/zalo.apk Desktop

/sdcard/zalo.apk: 1 file pulled. 7.7 MB/s (41895394 bytes in 5.200s)
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

170126 次

最近记录:

6 年,8 月 前