Merge "Set correct volume storage path for SDK sandbox" into tm-dev am: 0b28d29298 am: 29f8db1c9f

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17983856

Change-Id: I2f39770b145190a4afe3e487ba4390aba23cfa8b
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Sanjana Sunil
2022-05-18 20:55:45 +00:00
committed by Automerger Merge Worker
7 changed files with 65 additions and 23 deletions

View File

@@ -873,6 +873,7 @@ public final class ActivityThread extends ClientTransactionHandler
String processName;
@UnsupportedAppUsage
ApplicationInfo appInfo;
String sdkSandboxClientAppVolumeUuid;
String sdkSandboxClientAppPackage;
@UnsupportedAppUsage
List<ProviderInfo> providers;
@@ -1119,9 +1120,10 @@ public final class ActivityThread extends ClientTransactionHandler
@Override
public final void bindApplication(String processName, ApplicationInfo appInfo,
String sdkSandboxClientAppPackage, ProviderInfoList providerList,
ComponentName instrumentationName, ProfilerInfo profilerInfo,
Bundle instrumentationArgs, IInstrumentationWatcher instrumentationWatcher,
String sdkSandboxClientAppVolumeUuid, String sdkSandboxClientAppPackage,
ProviderInfoList providerList, ComponentName instrumentationName,
ProfilerInfo profilerInfo, Bundle instrumentationArgs,
IInstrumentationWatcher instrumentationWatcher,
IUiAutomationConnection instrumentationUiConnection, int debugMode,
boolean enableBinderTracking, boolean trackAllocation,
boolean isRestrictedBackupMode, boolean persistent, Configuration config,
@@ -1161,6 +1163,7 @@ public final class ActivityThread extends ClientTransactionHandler
AppBindData data = new AppBindData();
data.processName = processName;
data.appInfo = appInfo;
data.sdkSandboxClientAppVolumeUuid = sdkSandboxClientAppVolumeUuid;
data.sdkSandboxClientAppPackage = sdkSandboxClientAppPackage;
data.providers = providerList.getList();
data.instrumentationName = instrumentationName;
@@ -2561,6 +2564,11 @@ public final class ActivityThread extends ClientTransactionHandler
return getPackageInfo(ai, compatInfo, null, false, true, false);
}
private LoadedApk getPackageInfoNoCheck(ApplicationInfo ai, CompatibilityInfo compatInfo,
boolean isSdkSandbox) {
return getPackageInfo(ai, compatInfo, null, false, true, false, isSdkSandbox);
}
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
public final LoadedApk peekPackageInfo(String packageName, boolean includeCode) {
synchronized (mResourcesManager) {
@@ -2577,11 +2585,18 @@ public final class ActivityThread extends ClientTransactionHandler
private LoadedApk getPackageInfo(ApplicationInfo aInfo, CompatibilityInfo compatInfo,
ClassLoader baseLoader, boolean securityViolation, boolean includeCode,
boolean registerPackage) {
return getPackageInfo(aInfo, compatInfo, baseLoader, securityViolation, includeCode,
registerPackage, /*isSdkSandbox=*/false);
}
private LoadedApk getPackageInfo(ApplicationInfo aInfo, CompatibilityInfo compatInfo,
ClassLoader baseLoader, boolean securityViolation, boolean includeCode,
boolean registerPackage, boolean isSdkSandbox) {
final boolean differentUser = (UserHandle.myUserId() != UserHandle.getUserId(aInfo.uid));
synchronized (mResourcesManager) {
WeakReference<LoadedApk> ref;
if (differentUser) {
// Caching not supported across users
if (differentUser || isSdkSandbox) {
// Caching not supported across users and for sdk sandboxes
ref = null;
} else if (includeCode) {
ref = mPackages.get(aInfo.packageName);
@@ -2628,8 +2643,8 @@ public final class ActivityThread extends ClientTransactionHandler
getSystemContext().mPackageInfo.getClassLoader());
}
if (differentUser) {
// Caching not supported across users
if (differentUser || isSdkSandbox) {
// Caching not supported across users and for sdk sandboxes
} else if (includeCode) {
mPackages.put(aInfo.packageName,
new WeakReference<LoadedApk>(packageInfo));
@@ -6575,9 +6590,11 @@ public final class ActivityThread extends ClientTransactionHandler
mConfigurationController.applyCompatConfiguration();
}
data.info = getPackageInfoNoCheck(data.appInfo, data.compatInfo);
if (data.sdkSandboxClientAppPackage != null) {
data.info.setSdkSandboxStorage(data.sdkSandboxClientAppPackage);
final boolean isSdkSandbox = data.sdkSandboxClientAppPackage != null;
data.info = getPackageInfoNoCheck(data.appInfo, data.compatInfo, isSdkSandbox);
if (isSdkSandbox) {
data.info.setSdkSandboxStorage(data.sdkSandboxClientAppVolumeUuid,
data.sdkSandboxClientAppPackage);
}
if (agent != null) {

View File

@@ -72,7 +72,7 @@ oneway interface IApplicationThread {
@UnsupportedAppUsage
void scheduleStopService(IBinder token);
void bindApplication(in String packageName, in ApplicationInfo info,
in String sdkSandboxClientAppPackage,
in String sdkSandboxClientAppVolumeUuid, in String sdkSandboxClientAppPackage,
in ProviderInfoList providerList, in ComponentName testName,
in ProfilerInfo profilerInfo, in Bundle testArguments,
IInstrumentationWatcher testWatcher, IUiAutomationConnection uiAutomationConnection,

View File

@@ -400,7 +400,8 @@ public final class LoadedApk {
mLibDir = aInfo.nativeLibraryDir;
mDataDirFile = FileUtils.newFileOrNull(aInfo.dataDir);
mDeviceProtectedDataDirFile = FileUtils.newFileOrNull(aInfo.deviceProtectedDataDir);
mCredentialProtectedDataDirFile = FileUtils.newFileOrNull(aInfo.credentialProtectedDataDir);
mCredentialProtectedDataDirFile = FileUtils.newFileOrNull(
aInfo.credentialProtectedDataDir);
mSplitNames = aInfo.splitNames;
mSplitAppDirs = aInfo.splitSourceDirs;
@@ -412,14 +413,16 @@ public final class LoadedApk {
}
}
/** @hide */
void setSdkSandboxStorage(String sdkSandboxClientAppPackage) {
void setSdkSandboxStorage(@Nullable String sdkSandboxClientAppVolumeUuid,
String sdkSandboxClientAppPackage) {
int userId = UserHandle.myUserId();
mDeviceProtectedDataDirFile = Environment
.getDataMiscDeSharedSdkSandboxDirectory(userId, sdkSandboxClientAppPackage)
.getDataMiscDeSharedSdkSandboxDirectory(sdkSandboxClientAppVolumeUuid, userId,
sdkSandboxClientAppPackage)
.getAbsoluteFile();
mCredentialProtectedDataDirFile = Environment
.getDataMiscCeSharedSdkSandboxDirectory(userId, sdkSandboxClientAppPackage)
.getDataMiscCeSharedSdkSandboxDirectory(sdkSandboxClientAppVolumeUuid, userId,
sdkSandboxClientAppPackage)
.getAbsoluteFile();
if ((mApplicationInfo.privateFlags

View File

@@ -478,8 +478,15 @@ public class Environment {
}
/** {@hide} */
public static File getDataMiscCeSharedSdkSandboxDirectory(int userId, String packageName) {
return buildPath(getDataMiscCeDirectory(userId), "sdksandbox", packageName, "shared");
private static File getDataMiscCeDirectory(String volumeUuid, int userId) {
return buildPath(getDataDirectory(volumeUuid), "misc_ce", String.valueOf(userId));
}
/** {@hide} */
public static File getDataMiscCeSharedSdkSandboxDirectory(String volumeUuid, int userId,
String packageName) {
return buildPath(getDataMiscCeDirectory(volumeUuid, userId), "sdksandbox",
packageName, "shared");
}
/** {@hide} */
@@ -488,8 +495,15 @@ public class Environment {
}
/** {@hide} */
public static File getDataMiscDeSharedSdkSandboxDirectory(int userId, String packageName) {
return buildPath(getDataMiscDeDirectory(userId), "sdksandbox", packageName, "shared");
private static File getDataMiscDeDirectory(String volumeUuid, int userId) {
return buildPath(getDataDirectory(volumeUuid), "misc_de", String.valueOf(userId));
}
/** {@hide} */
public static File getDataMiscDeSharedSdkSandboxDirectory(String volumeUuid, int userId,
String packageName) {
return buildPath(getDataMiscDeDirectory(volumeUuid, userId), "sdksandbox",
packageName, "shared");
}
private static File getDataProfilesDeDirectory(int userId) {

View File

@@ -425,7 +425,7 @@ public class TransactionParcelTests {
@Override
public void bindApplication(String s, ApplicationInfo applicationInfo,
String sdkSandboxClientAppPackage,
String sdkSandboxClientAppVolumeUuid, String sdkSandboxClientAppPackage,
ProviderInfoList list, ComponentName componentName, ProfilerInfo profilerInfo,
Bundle bundle, IInstrumentationWatcher iInstrumentationWatcher,
IUiAutomationConnection iUiAutomationConnection, int i, boolean b, boolean b1,

View File

@@ -4859,7 +4859,8 @@ public class ActivityManagerService extends IActivityManager.Stub
thread.runIsolatedEntryPoint(
app.getIsolatedEntryPoint(), app.getIsolatedEntryPointArgs());
} else if (instr2 != null) {
thread.bindApplication(processName, appInfo, app.sdkSandboxClientAppPackage,
thread.bindApplication(processName, appInfo,
app.sdkSandboxClientAppVolumeUuid, app.sdkSandboxClientAppPackage,
providerList,
instr2.mClass,
profilerInfo, instr2.mArguments,
@@ -4874,7 +4875,8 @@ public class ActivityManagerService extends IActivityManager.Stub
app.getDisabledCompatChanges(), serializedSystemFontMap,
app.getStartElapsedTime(), app.getStartUptime());
} else {
thread.bindApplication(processName, appInfo, app.sdkSandboxClientAppPackage,
thread.bindApplication(processName, appInfo,
app.sdkSandboxClientAppVolumeUuid, app.sdkSandboxClientAppPackage,
providerList, null, profilerInfo, null, null, null, testMode,
mBinderTransactionTrackingEnabled, enableTrackAllocation,
isRestrictedBackupMode || !normalMode, app.isPersistent(),

View File

@@ -87,6 +87,7 @@ class ProcessRecord implements WindowProcessListener {
final String processName; // name of the process
final String sdkSandboxClientAppPackage; // if this is an sdk sandbox process, name of the
// app package for which it is running
final String sdkSandboxClientAppVolumeUuid; // uuid of the app for which the sandbox is running
/**
* Overall state of process's uid.
@@ -535,6 +536,11 @@ class ProcessRecord implements WindowProcessListener {
userId = UserHandle.getUserId(_uid);
processName = _processName;
sdkSandboxClientAppPackage = _sdkSandboxClientAppPackage;
if (isSdkSandbox) {
sdkSandboxClientAppVolumeUuid = getClientInfoForSdkSandbox().volumeUuid;
} else {
sdkSandboxClientAppVolumeUuid = null;
}
mPersistent = false;
mRemoved = false;
mProfile = new ProcessProfileRecord(this);