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:
@@ -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) {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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(),
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user