【发布时间】:2010-02-12 18:12:27
【问题描述】:
我的应用程序可以在android上安装和运行,
在两个不同的地方:
"/data/MyApplication"
和
"/system/MyApplication".
我需要知道我的应用程序现在安装在哪里,
如果它在“/data/”中,或者如果它在“/system”中。
有人可以帮忙吗?
非常感谢
【问题讨论】:
我的应用程序可以在android上安装和运行,
在两个不同的地方:
"/data/MyApplication"
和
"/system/MyApplication".
我需要知道我的应用程序现在安装在哪里,
如果它在“/data/”中,或者如果它在“/system”中。
有人可以帮忙吗?
非常感谢
【问题讨论】:
获取您的应用程序的安装位置
getPackageManager().getApplicationInfo(getPackageName(), 0).sourceDir
但是,这对您的应用程序应该不重要。 为什么需要它?
【讨论】:
请不要对目录路径进行硬编码检查。
您可以通过 ApplicationInfo.FLAG_SYSTEM 找出您的应用是内置系统映像的一部分。但正如另一张海报所说,应该没有什么理由需要这样做......并且请注意,如果您的应用程序的较新版本是从市场安装在捆绑了它的设备上,则仍然会设置 FLAG_SYSTEM 因为它是仍然是一个系统应用。
【讨论】:
您可以使用 adb 来查找:
$ adb shell ls /data
或
$ adb shell ls /system
或者您是否希望在运行时从您的应用程序中进行此项检查。在这种情况下,您可以使用
System.getProperty("user.dir")
在您的 Java 代码中。
【讨论】:
请使用以下硬代码在 /data 或 /system 中找到用户安装的应用程序路径的位置:
PackageInfo paramPackageInfo = null;
try {
paramPackageInfo = getPackageManager().getPackageInfo(
getPackageName(), 0);
} catch (NameNotFoundException e) {
e.printStackTrace();
}
ApplicationInfo localApplicationInfo = paramPackageInfo.applicationInfo;
找到包名:localApplicationInfo.packageName
找到的应用程序路径:localApplicationInfo.sourceDir
【讨论】:
我建议为此使用包管理器工具。 adb shell pm path your.package.name
使用示例:
#List all installed packages
$ adb shell pm list packages
package:com.android.soundrecorder
....
package:com.android.email # <-- System app
....
package:course.labs.intentslab.test # <-- Custom app
#Path for system app:
$ adb shell pm path com.android.email
package:/system/app/Email.apk
#Path for regular app:
$ adb shell pm path course.labs.intentslab.test
package:/data/app/course.labs.intentslab.test-1.apk
来自文档:
path PACKAGE 打印给定 PACKAGE 的 APK 的路径
【讨论】: