简体   繁体   中英

Why does System.getProperty(“user.dir”) return “/”

I'm trying to get the path of my current running apk on android. I'm using System.getProperty("user.dir"). But it gives out a "/", which is the root directory of the Android system. Am i missing something?

As the documentation says, the user.dir property is the user working directory, which is not necessarily the same as the directory where your apk is placed.

Anyway, the List<ApplicationInfo> PackageManager.getInstalledApplications() will give you a list of the installed applications, and ApplicationInfo.sourceDir is the path to the .apk file.

Here's some sample code:

PackageManager pm = getPackageManager();

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

The above will give you the sourcepath for all the installed apks.

The example is taken from here .

Your apk is located at /data/app/<your_package_name> after installation on the internal memory. This path is consistent across Android, and you don't need to use System .

Check the Context class. The functions you want are:

  • getDir() -- returns eg "/data/data/com.example.myapp/app_foo"
  • getFilesDir() -- returns eg "/data/data/com.example.myapp/files"
  • getCacheDir() -- returns eg "/data/data/com.example.myapp/cache"
  • getExternalFilesDir() -- returns eg "/sdcard/Android/data/com.example.myapp/files/Pictures"
  • getExternalCacheDir() -- returns eg "/sdcard/Android/data/com.example.myapp/cache"

and so forth.

The ApplicationInfo class is your answer:

PackageManager pm = getPackageManager();

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

Hope that sorts you.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM