为什么System.getProperty("user.dir")返回"/"?

3

我正在尝试获取我的当前运行的安卓apk的路径。 我使用System.getProperty("user.dir")。 但是它输出"/",这是安卓系统的根目录。 我是否遗漏了什么?


1
你期望它是什么? - Konstantin Yovkov
1
@kocko 我更期望是 "/user/apk/myapkname" 这样的东西...类似这样。 - henryyao
4个回答

4
文档所述,user.dir属性是用户工作目录,不一定与apk所在的目录相同。
无论如何,List<ApplicationInfo> PackageManager.getInstalledApplications()将给出安装的应用程序列表,并且ApplicationInfo.sourceDir.apk文件的路径。
以下是一些示例代码:
PackageManager pm = getPackageManager();

for (ApplicationInfo app : pm.getInstalledApplications(0)) {
  System.out.println("SourceDir: " + app.sourceDir);
}

以下内容将为您提供所有已安装apk的源路径。
该示例取自此处

1

当您将应用程序安装到内部存储器后,您的apk文件位于/data/app/<your_package_name>。这个路径在Android系统中是一致的,您不需要使用System来获取它。


1

请查看Context类。你需要的函数有:

  • getDir() -- 返回例如 "/data/data/com.example.myapp/app_foo"
  • getFilesDir() -- 返回例如 "/data/data/com.example.myapp/files"
  • getCacheDir() -- 返回例如 "/data/data/com.example.myapp/cache"
  • getExternalFilesDir() -- 返回例如 "/sdcard/Android/data/com.example.myapp/files/Pictures"
  • getExternalCacheDir() -- 返回例如 "/sdcard/Android/data/com.example.myapp/cache"

等等。


0

ApplicationInfo类是你的答案:

PackageManager pm = getPackageManager();

for (ApplicationInfo app : pm.getInstalledApplications(0)) {
  if (app.packageName.equals(appPackage) { Log.i( app.sourceDir); }
}

希望这能解决你的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接