Remove exception from OverlayConfig zygote method

The AssetManager constructor is marked UnsupportedAppUsage and the
recent changes to OverlayConfig caused an exception to be thrown when
the function is not called from the root process.

Previously a warning message would be logged indicating that no static
overlays would be loaded. Removing the uid check will restore the
previous behavior.

Also remove the system uid checks for initializeSystemInstance so PMS
service can also be constructed during testing.

Bug: 149806146
Test: invoke new AssetManager() from non-root thread
Change-Id: I55af2cddeba4df7a99c281c93e0181b9e2139139
This commit is contained in:
Ryan Mitchell
2020-02-20 09:21:51 -08:00
parent b9a93c13ba
commit 857ce7ace1

View File

@@ -186,13 +186,6 @@ public class OverlayConfig {
*/
@NonNull
public static OverlayConfig getZygoteInstance() {
if (Process.myUid() != Process.ROOT_UID) {
// Scan the overlays in the zygote process to generate configuration settings for
// overlays on the system image. Do not cache this instance so OverlayConfig will not
// be present in applications by default.
throw new IllegalStateException("Can only be invoked in the root process");
}
Trace.traceBegin(Trace.TRACE_TAG_RRO, "OverlayConfig#getZygoteInstance");
try {
return new OverlayConfig(null /* rootDirectory */, OverlayScanner::new,
@@ -209,13 +202,12 @@ public class OverlayConfig {
*/
@NonNull
public static OverlayConfig initializeSystemInstance(PackageProvider packageProvider) {
if (Process.myUid() != Process.SYSTEM_UID) {
throw new IllegalStateException("Can only be invoked in the system process");
}
Trace.traceBegin(Trace.TRACE_TAG_RRO, "OverlayConfig#initializeSystemInstance");
sInstance = new OverlayConfig(null, null, packageProvider);
Trace.traceEnd(Trace.TRACE_TAG_RRO);
try {
sInstance = new OverlayConfig(null, null, packageProvider);
} finally {
Trace.traceEnd(Trace.TRACE_TAG_RRO);
}
return sInstance;
}
@@ -373,10 +365,6 @@ public class OverlayConfig {
*/
@NonNull
public String[] createImmutableFrameworkIdmapsInZygote() {
if (Process.myUid() != Process.ROOT_UID) {
throw new IllegalStateException("This method can only be called from the root process");
}
final String targetPath = "/system/framework/framework-res.apk";
final ArrayList<String> idmapPaths = new ArrayList<>();
final ArrayList<IdmapInvocation> idmapInvocations =