From d82a743002cacd9eb073b09929dab4930213e97d Mon Sep 17 00:00:00 2001 From: Mathew Inwood Date: Thu, 19 Apr 2018 14:42:58 +0100 Subject: [PATCH] StrictMode: fix non-SDK API usage detection. The warning dedupe logic in the runtime meant that only the first usage of each API was detected. Disable this logic when DETECT_VM_NON_SDK_API_USAGE is enabled. Test: m Test: $ atest android.os.cts.StrictModeTest#testNonSdkApiUsage Bug: 78268765 Change-Id: Iba1127b84180b9a5e5eb68abc4691ccad082b80e --- core/java/android/os/StrictMode.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/core/java/android/os/StrictMode.java b/core/java/android/os/StrictMode.java index 59380fd3d06b0..3eaecf9985ecb 100644 --- a/core/java/android/os/StrictMode.java +++ b/core/java/android/os/StrictMode.java @@ -811,6 +811,10 @@ public final class StrictMode { /** * Detect reflective usage of APIs that are not part of the public Android SDK. + * + *

Note that any non-SDK APIs that this processes accesses before this detection is + * enabled may not be detected. To ensure that all such API accesses are detected, + * you should apply this policy as early as possible after process creation. */ public Builder detectNonSdkApiUsage() { return enable(DETECT_VM_NON_SDK_API_USAGE); @@ -1885,8 +1889,10 @@ public final class StrictMode { if ((sVmPolicy.mask & DETECT_VM_NON_SDK_API_USAGE) != 0) { VMRuntime.setNonSdkApiUsageConsumer(sNonSdkApiUsageConsumer); + VMRuntime.setDedupeHiddenApiWarnings(false); } else { VMRuntime.setNonSdkApiUsageConsumer(null); + VMRuntime.setDedupeHiddenApiWarnings(true); } } }