我试图提取一个安装的Android应用程序的APK文件没有根权限。

我认为这是不可能的,因为所有非系统应用程序的APK文件都位于/data/app中,访问这个文件夹需要root权限。然后我发现谷歌Play商店中有许多应用程序似乎可以在非根设备上访问APK文件。

谁能告诉我这是怎么回事?难道没有备份程序可以备份APK文件吗?


当前回答

或者你可以从谷歌Play中获得“蓝牙文件传输”,并将主文件夹设置为/system/。然后你甚至可以去/。

其他回答

访问/data/app不需要root权限;该目录的权限为rwxrwx—x。对一个目录的执行权限意味着你可以访问它,但是缺乏读权限意味着你不能获得它的内容列表——所以为了访问它,你必须知道你要访问的文件的名称。Android的包管理器会告诉你一个给定包的apk的名称。

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

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

知道了完整的目录,我们最终可以使用adb拉/the.apk的完整/directory/来拉adb。APK文件存储在运行控制台的目录中。

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

当你安装了Eclipse for Android开发时:

Use your device as debugging device. On your phone: Settings > Applications > Development and enable USB debugging, see http://developer.android.com/tools/device.html In Eclipse, open DDMS-window: Window > Open Perspective > Other... > DDMS, see http://developer.android.com/tools/debugging/ddms.html If you can't see your device try (re)installing USB-Driver for your device In middle pane select tab "File Explorer" and go to system > app Now you can select one or more files and then click the "Pull a file from the device" icon at the top (right to the tabs) Select target folder - tada!

打开ES资源管理器->按左上角的菜单按钮(三条横条)->在库部分选择应用程序。

因此,您将获得所有用户应用程序的列表。找到你的应用程序,并选择它长按它。然后按右下角的“更多”,选择“发送”。然后您可以使用不同的选项,例如,您可以选择“ES Save To”,以便将.apk文件保存到您的主目录或其他任何地方。

我得到了一个不存在的错误

以下是我如何做到的:

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)

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