當前位置: 首頁>>技術問答>>正文


獲取安裝的應用程序的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/zh-tw/article/3719.html,未經允許,請勿轉載。