如何获取Android设备中的文件*.apk位置

ast*_*idg 18 android

从Android设备programmaticaly检索*.apk文件名需要一些帮助吗?如果我只知道文件名中的一部分,那么任何机构都可以提供一些Android方法,甚至可以在Android下运行shell命令来获取文件位置吗?

另外,如果有一种方法可以找到从市场或外部市场下载后*.apk文件的去向?

先感谢您.

Joh*_*ter 35

List<ApplicationInfo> PackageManager.getInstalledApplications()将为您提供已安装应用程序的列表,并且ApplicationInfo.sourceDir是.apk文件的路径.

PackageManager pm = getPackageManager();

for (ApplicationInfo app : pm.getInstalledApplications(0)) {
  Log.d("PackageList", "package: " + app.packageName + ", sourceDir: " + app.sourceDir);
}
Run Code Online (Sandbox Code Playgroud)

输出如下:

package: com.tmobile.themechooser, sourceDir: /system/app/ThemeChooser.apk
package: com.tmobile.thememanager, sourceDir: /system/app/ThemeManager.apk
package: com.touchtype.swiftkey, sourceDir: /data/app/com.touchtype.swiftkey-1.apk
package: com.twitter.android, sourceDir: /data/app/com.twitter.android-2.apk
package: fm.last.android, sourceDir: /data/app/fm.last.android-1.apk
Run Code Online (Sandbox Code Playgroud)

  • `sourceDir`和[`publicSourceDir`](http://developer.android.com/reference/android/content/pm/ApplicationInfo.html#publicSourceDir)有什么区别?另外,你知道为什么有些.apk的名字中有"-1"或"-2"吗? (3认同)

Joe*_*eer 17

$ adb shell pm list packages -f
Run Code Online (Sandbox Code Playgroud)


jcu*_*nod 0

您下载的应用程序将转到,/data/app因此ls您可以获取已下载的应用程序的列表。

  • 不要对 API 中未明确概述的目录做出任何假设。它们必然会发生变化,恕不另行通知。任何像“sdcard/download”这样的假设都肯定会在某个时刻被打破。如果有的话,请使用 API 返回的目录,不要使用硬编码路径。请记住,Android Market 并不是下载应用程序的唯一方式。 (3认同)