summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/os/Environment.java5
-rw-r--r--services/core/java/com/android/server/pm/PackageInstallerService.java3
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java6
3 files changed, 14 insertions, 0 deletions
diff --git a/core/java/android/os/Environment.java b/core/java/android/os/Environment.java
index 39f4d428a230..7cdb3cec5dbb 100644
--- a/core/java/android/os/Environment.java
+++ b/core/java/android/os/Environment.java
@@ -311,6 +311,11 @@ public class Environment {
}
/** {@hide} */
+ public static File getDataAppEphemeralDirectory(String volumeUuid) {
+ return new File(getDataDirectory(volumeUuid), "app-ephemeral");
+ }
+
+ /** {@hide} */
public static File getDataUserCeDirectory(String volumeUuid) {
return new File(getDataDirectory(volumeUuid), "user");
}
diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java
index 0df4570f87f2..eb42f809c0e8 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerService.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerService.java
@@ -787,6 +787,9 @@ public class PackageInstallerService extends IPackageInstaller.Stub {
}
private File buildStagingDir(String volumeUuid, boolean isEphemeral) {
+ if (isEphemeral) {
+ return Environment.getDataAppEphemeralDirectory(volumeUuid);
+ }
return Environment.getDataAppDirectory(volumeUuid);
}
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 814ba2176fd5..01db37c2d601 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -629,6 +629,7 @@ public class PackageManagerService extends IPackageManager.Stub {
/** Directory where installed third-party apps stored */
final File mAppInstallDir;
+ final File mEphemeralInstallDir;
/**
* Directory to which applications installed internally have their
@@ -2273,6 +2274,7 @@ public class PackageManagerService extends IPackageManager.Stub {
File dataDir = Environment.getDataDirectory();
mAppInstallDir = new File(dataDir, "app");
mAppLib32InstallDir = new File(dataDir, "app-lib");
+ mEphemeralInstallDir = new File(dataDir, "app-ephemeral");
mAsecInternalPath = new File(dataDir, "app-asec").getPath();
mDrmAppPrivateInstallDir = new File(dataDir, "app-private");
sUserManager = new UserManagerService(context, this,
@@ -2576,6 +2578,10 @@ public class PackageManagerService extends IPackageManager.Stub {
| PackageParser.PARSE_FORWARD_LOCK,
scanFlags | SCAN_REQUIRE_KNOWN, 0);
+ scanDirLI(mEphemeralInstallDir, mDefParseFlags
+ | PackageParser.PARSE_IS_EPHEMERAL,
+ scanFlags | SCAN_REQUIRE_KNOWN, 0);
+
/**
* Remove disable package settings for any updated system
* apps that were removed via an OTA. If they're not a