2

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?

Edward Falk
  • 9,685
  • 9
  • 73
  • 108
henryyao
  • 1,658
  • 6
  • 22
  • 36

4 Answers4

4

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.

Community
  • 1
  • 1
Konstantin Yovkov
  • 60,548
  • 8
  • 97
  • 143
1

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.

Raghav Sood
  • 80,914
  • 21
  • 183
  • 190
1

Check the Context class. The functions you want are:

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

and so forth.

Edward Falk
  • 9,685
  • 9
  • 73
  • 108
0

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.

hd1
  • 32,598
  • 5
  • 75
  • 87