我正在尋找一種方法來解壓安裝的Android應用程序的APK文件,而無需root權限。
第一感覺是沒有root權限的情況下,這是不可能的,因為非係統APP的所有APK文件都位於/data/app中,並且訪問此文件夾需要root權限。但是,我發現Google Play中有很多應用程序,即使在non-rooted設備上也可以訪問APK文件。
有人能告訴我這是否可能的嗎?在沒有root的情況下,難道沒有備份應用程序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權限的設備上工作:
-
獲取所需軟件包的APK文件的完整路徑名稱。
adb shell pm path com.example.someapp
這將輸出為:
package:/data/app/com.example.someapp-2.apk
。 -
將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);
}