diff --git a/tests/robotests/src/com/android/settings/development/MockLocationAppPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/MockLocationAppPreferenceControllerTest.java
index b0de024..73c0d8e 100644
--- a/tests/robotests/src/com/android/settings/development/MockLocationAppPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/MockLocationAppPreferenceControllerTest.java
@@ -74,7 +74,7 @@
         final AppOpsManager.PackageOps packageOps =
                 new AppOpsManager.PackageOps(appName, 0,
                         Collections.singletonList(createOpEntry(AppOpsManager.MODE_ALLOWED)));
-        when(mAppOpsManager.getPackagesForOps(any())).thenReturn(
+        when(mAppOpsManager.getPackagesForOps(any(int[].class))).thenReturn(
                 Collections.singletonList(packageOps));
 
         mController.updateState(mPreference);
@@ -84,7 +84,8 @@
 
     @Test
     public void updateState_noAppSelected_shouldSetSummaryToDefault() {
-        when(mAppOpsManager.getPackagesForOps(any())).thenReturn(Collections.emptyList());
+        when(mAppOpsManager.getPackagesForOps(any(int[].class)))
+                .thenReturn(Collections.emptyList());
 
         mController.updateState(mPreference);
 
@@ -101,7 +102,7 @@
         final AppOpsManager.PackageOps packageOps = new AppOpsManager.PackageOps(prevAppName, 0,
                 Collections.singletonList(createOpEntry(AppOpsManager.MODE_ALLOWED)));
 
-        when(mAppOpsManager.getPackagesForOps(any()))
+        when(mAppOpsManager.getPackagesForOps(any(int[].class)))
                 .thenReturn(Collections.singletonList(packageOps));
         when(mPackageManager.getApplicationInfo(anyString(),
                 eq(PackageManager.MATCH_DISABLED_COMPONENTS))).thenReturn(mApplicationInfo);
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/RestrictAppPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/RestrictAppPreferenceControllerTest.java
index 3746d64..368a93a 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/RestrictAppPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/RestrictAppPreferenceControllerTest.java
@@ -111,7 +111,7 @@
     @Test
     public void testUpdateState_oneApp_showCorrectSummary() {
         mPackageOpsList.add(mRestrictedPackageOps);
-        doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any());
+        doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any(int[].class));
 
         mRestrictAppPreferenceController.updateState(mPreference);
 
@@ -124,7 +124,7 @@
         mPackageOpsList.add(mRestrictedPackageOps);
         mPackageOpsList.add(mAllowedPackageOps);
         mPackageOpsList.add(mOtherUserPackageOps);
-        doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any());
+        doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any(int[].class));
 
         mRestrictAppPreferenceController.updateState(mPreference);
 
@@ -137,7 +137,7 @@
         // Two packageOps share same package name but different uid.
         mPackageOpsList.add(mRestrictedPackageOps);
         mPackageOpsList.add(mOtherUserPackageOps);
-        doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any());
+        doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any(int[].class));
 
         mRestrictAppPreferenceController.updateState(mPreference);
 
@@ -152,7 +152,7 @@
     @Test
     public void testUpdateState_zeroRestrictApp_inVisible() {
         mPackageOpsList.add(mAllowedPackageOps);
-        doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any());
+        doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any(int[].class));
 
         mRestrictAppPreferenceController.updateState(mPreference);
 
diff --git a/tests/unit/src/com/android/settings/vpn2/AppSettingsTest.java b/tests/unit/src/com/android/settings/vpn2/AppSettingsTest.java
index 1a9701d..014d8ea 100644
--- a/tests/unit/src/com/android/settings/vpn2/AppSettingsTest.java
+++ b/tests/unit/src/com/android/settings/vpn2/AppSettingsTest.java
@@ -57,23 +57,24 @@
         };
 
         // List with one package op
-        when(mAppOps.getOpsForPackage(eq(mockApp.uid), eq(mockApp.packageName), any()))
-                .thenReturn(Arrays.asList(new AppOpsManager.PackageOps[] {blankOps[0]}));
+        when(mAppOps.getOpsForPackage(eq(mockApp.uid), eq(mockApp.packageName),
+                any(int[].class))).thenReturn(Arrays.asList(
+                        new AppOpsManager.PackageOps[] {blankOps[0]}));
         assertTrue(appHasVpnPermission(mContext, mockApp));
 
         // List with more than one package op
-        when(mAppOps.getOpsForPackage(eq(mockApp.uid), eq(mockApp.packageName), any()))
-                .thenReturn(Arrays.asList(blankOps));
+        when(mAppOps.getOpsForPackage(eq(mockApp.uid), eq(mockApp.packageName),
+                any(int[].class))).thenReturn(Arrays.asList(blankOps));
         assertTrue(appHasVpnPermission(mContext, mockApp));
 
         // Empty list
-        when(mAppOps.getOpsForPackage(eq(mockApp.uid), eq(mockApp.packageName), any()))
-                .thenReturn(Collections.emptyList());
+        when(mAppOps.getOpsForPackage(eq(mockApp.uid), eq(mockApp.packageName),
+                any(int[].class))).thenReturn(Collections.emptyList());
         assertFalse(appHasVpnPermission(mContext, mockApp));
 
         // Null list (may be returned in place of an empty list)
-        when(mAppOps.getOpsForPackage(eq(mockApp.uid), eq(mockApp.packageName), any()))
-                .thenReturn(null);
+        when(mAppOps.getOpsForPackage(eq(mockApp.uid), eq(mockApp.packageName),
+                any(int[].class))).thenReturn(null);
         assertFalse(appHasVpnPermission(mContext, mockApp));
     }
 
