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

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

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


当前回答

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

其他回答

在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拉到你的机器。

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

Android将一个序列号附加到包名以产生最终的APK文件名(这可能与Android OS版本不同)。在非root设备上执行以下命令:

获取所需包的APK文件的完整路径名。 Adb shell PM路径com.example.someapp 这将输出为:package:/data/app/com.example.someapp-2.apk。 将APK文件从Android设备拉到开发框中。 Adb pull /data/app/com.example.someapp-2.apk

成功拉出APK后,APK的位置将在你pc/笔记本电脑上的../sdk/platform-tools/base.apk。

我找到了一种在非根设备中获取APK包名的方法。 虽然不是很优雅,但是一直都很好用。

第一步:在您的设备上,打开目标APK

第二步:在PC的cmd窗口,输入以下命令:

 adb shell dumpsys activity a > dump.txt

因为这个命令的输出很多,所以建议重定向到一个文件。

步骤3:用任何编辑器打开这个dump.txt文件。

Android 4.4之前的设备: 文件的开头是这样的:

ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities)  
  Main stack:  
  * TaskRecord{41aa9ed0 #4 A com.tencent.mm U 0}  
    numActivities=1 rootWasReset=true userId=0  
    affinity=com.tencent.mm  
    intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10600000 cmp=com.tencent.mm/.ui.LauncherUI}  
    realActivity=com.tencent.mm/.ui.LauncherUI  
    askedCompatMode=false  
    lastThumbnail=null lastDescription=null  
    lastActiveTime=19915965 (inactive for 10s)  
    * Hist #9: ActivityRecord{41ba1a30 u0 com.tencent.mm/.ui.LauncherUI}  
        packageName=com.tencent.mm processName=com.tencent.mm 

包名在第三行,本例中为com.tencent.mm。

Android 4.4及以上版本: dumpsys的输出发生了一些变化。 尝试搜索“Stack #1”,包名会在它下面很近的地方。

另外,搜索“baseDir”,你会找到apk文件的完整路径!

检查已安装的apk的列表(下面的命令还列出了安装的路径和包名)。 Adb shell PM列表包 使用adb拉/package_path/包名/path_in_pc (包路径和包名可以从上面的命令1中获取。)