当前位置: 首页>>技术问答>>正文


获取安装的应用程序的APK

我正在寻找一种方法来解压安装的Android应用程序的APK文件,而无需root权限。

第一感觉是没有root权限的情况下,这是不可能的,因为非系统APP的所有APK文件都位于/data/app中,并且访问此文件夹需要root权限。但是,我发现Google Play中有很多应用程序,即使在non-rooted设备上也可以访问APK文件。

有人能告诉我这是否可能的吗?在没有root的情况下,难道没有备份应用程序APK的备份文件夹吗?

Android_APK

最佳解决方法

没有根权限, 访问/data/app是可能的;该目录上的权限是rwxrwx--x。对目录有执行权限意味着你可以访问它,但是缺少读取权限意味着你无法获得其内容的列表 – 所以为了访问它,你必须知道你将要访问的文件的名称。 Android的包管理器会告诉你给定包的存储apk的名字。

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

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

而且知道完整的目录,我们就可以使用adb pull full/directory/of/the.apk

在Lollipop下,apk路径将是/data/app/your-package-name-1/base.apk

次佳解决方法

Android会在程序包名称后附加一个序列号以产生最终的APK文件名(这可能会因Android OS的版本而异)。以下命令序列可在没有root权限的设备上工作:

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

    adb shell pm path com.example.someapp
    

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

  2. 将APK文件从Android设备拖到开发框中。

    adb pull /data/app/com.example.someapp-2.apk
    

第三种解决方法

Google Play商店中有一个名为”Apk extracter”的应用程序。通过这个应用程序,你可以得到安装应用程序的.apk文件。

第四种方法

不需要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);
}

Android-APK-2

参考文献

本文由《纯净天空》出品。文章地址: https://vimsky.com/article/3719.html,未经允许,请勿转载。