如何在 Android 设备中获取文件 *.apk 位置
Posted
技术标签:
【中文标题】如何在 Android 设备中获取文件 *.apk 位置【英文标题】:How to get the file *.apk location in Android device 【发布时间】:2011-01-08 18:27:15 【问题描述】:需要通过以编程方式从 android 设备检索 *.apk 文件名来获得帮助吗?如果我只知道文件名的一部分,任何机构都可以提供一些 Android 方法,甚至可以在 Android 下运行 shell 命令来获取文件位置吗?
另外,如果有一种方法可以找出 *.apk 文件在从 Market 或外部下载后的去向?
提前谢谢你。
【问题讨论】:
为什么需要这些信息? 也许如果我们知道您要做什么,这将有助于回答问题(因为我们会更好地了解需要考虑的事项)。 试试这个..***.com/questions/7608173/… 【参考方案1】: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);
输出如下:
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
【讨论】:
sourceDir
和publicSourceDir
有什么区别?另外,您知道为什么有些 .apk 的名称中有“-1”或“-2”吗?
@Turbo 我认为原因是:第一次安装时为-1,未安装时为-2。如果您第一次安装一个应用程序 -1 出现如果是第二个,第三个,... -2 出现。如果您是第一次安装该应用程序并卸载它然后再次安装 -1 是否存在
我将@therefromhere 发布的代码放入small app 并为它构建和apk,以防有人想在不同的设备上重复使用它。【参考方案2】:
$ adb shell pm list packages -f
【讨论】:
这似乎更像是一种 Linux 方式而不是编程方式。 谢谢,这些帮助我检测到当前安装目录以备份我的 apk。【参考方案3】:这给了我 /data/app/xxx.apk 形式的路径:
https://developer.android.com/reference/android/content/Context.html#getPackageResourcePath%28%29
【讨论】:
【参考方案4】:您也可以adb bugreport
并查看输出。你会想要寻找<package name="com.app.package" codePath="path/to/the/app.apk"...
【讨论】:
【参考方案5】:您下载的应用程序会转到 /data/app
,因此使用 ls
您可以获得已下载的 apk 列表。
【讨论】:
谢谢 j3frea。这是 Android Market App 的默认位置。我看到如果我在外面(在我的情况下从我的服务器)下载应用程序的表单,应用程序会转到 sdcard/download 。我可以假设外部 apk 将始终转到 sdcard/download 吗?是每个 Android Market 应用程序的默认位置还是可以更改且不固定的路径?有没有办法将下载应用程序始终推送到一个位置?还有一种方法可以在整个设备中按名称查找文件吗? 文件目录 = new File("/data/app");文件[] 文件列表 = dir.listFiles(); if (fileList != null) for (int i = 0;isdcard/download
这样的假设都会在某个时候被打破。如果有的话,请使用 API 返回的目录,不要使用硬编码路径。请记住,Android Market 并不是下载应用的唯一方式。
嗨 EboMike。我不想做任何假设,但我需要一个解决方案来解决我的问题,我很惊讶我找不到任何 API 来帮助我。是否有任何 API 可以从整个设备中获取 *.apk 文件名?甚至可以存储它们的路径,与操作系统一起构建?谢谢。
我认为我们需要知道您想要做什么才能帮助解决您的问题。以上是关于如何在 Android 设备中获取文件 *.apk 位置的主要内容,如果未能解决你的问题,请参考以下文章
如何获取 .apk 文件详细信息(如:名称、id、vercode ..etc)存储在 android 设备的外部存储中
为啥 Kivy apk 在 android 设备上启动 apk 后立即崩溃