diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 5240a6faebe3c..92f5e21f3f33f 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -5258,7 +5258,7 @@ public final class ActivityThread { // code is loaded to prevent issues with instances of TLS objects being created before // the provider is installed. Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "NetworkSecurityConfigProvider.install"); - NetworkSecurityConfigProvider.install(appContext, data.appInfo); + NetworkSecurityConfigProvider.install(appContext); Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER); // Continue loading instrumentation. diff --git a/core/java/android/security/net/config/ManifestConfigSource.java b/core/java/android/security/net/config/ManifestConfigSource.java index d59b5e35ac3c2..92bddb7bbf472 100644 --- a/core/java/android/security/net/config/ManifestConfigSource.java +++ b/core/java/android/security/net/config/ManifestConfigSource.java @@ -29,13 +29,19 @@ public class ManifestConfigSource implements ConfigSource { private final Object mLock = new Object(); private final Context mContext; - private final ApplicationInfo mInfo; + private final int mApplicationInfoFlags; + private final int mTargetSdkVersion; + private final int mConfigResourceId; private ConfigSource mConfigSource; - public ManifestConfigSource(Context context, ApplicationInfo info) { + public ManifestConfigSource(Context context) { mContext = context; - mInfo = info; + // Cache values because ApplicationInfo is mutable and apps do modify it :( + ApplicationInfo info = context.getApplicationInfo(); + mApplicationInfoFlags = info.flags; + mTargetSdkVersion = info.targetSdkVersion; + mConfigResourceId = info.networkSecurityConfigRes; } @Override @@ -53,29 +59,24 @@ public class ManifestConfigSource implements ConfigSource { if (mConfigSource != null) { return mConfigSource; } - int targetSdkVersion = mInfo.targetSdkVersion; - int configResourceId = 0; - if (mInfo != null) { - configResourceId = mInfo.networkSecurityConfigRes; - } ConfigSource source; - if (configResourceId != 0) { - boolean debugBuild = (mInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0; + if (mConfigResourceId != 0) { + boolean debugBuild = (mApplicationInfoFlags & ApplicationInfo.FLAG_DEBUGGABLE) != 0; if (DBG) { Log.d(LOG_TAG, "Using Network Security Config from resource " - + mContext.getResources().getResourceEntryName(configResourceId) + + mContext.getResources().getResourceEntryName(mConfigResourceId) + " debugBuild: " + debugBuild); } - source = new XmlConfigSource(mContext, configResourceId, debugBuild, - targetSdkVersion); + source = new XmlConfigSource(mContext, mConfigResourceId, debugBuild, + mTargetSdkVersion); } else { if (DBG) { Log.d(LOG_TAG, "No Network Security Config specified, using platform default"); } boolean usesCleartextTraffic = - (mInfo.flags & ApplicationInfo.FLAG_USES_CLEARTEXT_TRAFFIC) != 0; - source = new DefaultConfigSource(usesCleartextTraffic, targetSdkVersion); + (mApplicationInfoFlags & ApplicationInfo.FLAG_USES_CLEARTEXT_TRAFFIC) != 0; + source = new DefaultConfigSource(usesCleartextTraffic, mTargetSdkVersion); } mConfigSource = source; return mConfigSource; diff --git a/core/java/android/security/net/config/NetworkSecurityConfigProvider.java b/core/java/android/security/net/config/NetworkSecurityConfigProvider.java index 4c51cc365a7ad..0f6687341395e 100644 --- a/core/java/android/security/net/config/NetworkSecurityConfigProvider.java +++ b/core/java/android/security/net/config/NetworkSecurityConfigProvider.java @@ -17,7 +17,6 @@ package android.security.net.config; import android.content.Context; -import android.content.pm.ApplicationInfo; import java.security.Security; import java.security.Provider; @@ -33,8 +32,8 @@ public final class NetworkSecurityConfigProvider extends Provider { put("Alg.Alias.TrustManagerFactory.X509", "PKIX"); } - public static void install(Context context, ApplicationInfo info) { - ApplicationConfig config = new ApplicationConfig(new ManifestConfigSource(context, info)); + public static void install(Context context) { + ApplicationConfig config = new ApplicationConfig(new ManifestConfigSource(context)); ApplicationConfig.setDefaultInstance(config); int pos = Security.insertProviderAt(new NetworkSecurityConfigProvider(), 1); if (pos != 1) {