Use real `PackageDataSnapshot`.
Also:
- Remove `sdk_version: "system_server_current"` from `ArtServiceTests`
because `android_test` has no access to system server classes at
runtime.
- Add "services.core" as `static_libs` instead.
Bug: 177273468
Test: adb shell pm art get-optimization-status com.google.android.youtube
Test: (on master-art) art/tools/buildbot-build.sh
Ignore-AOSP-First: ART Services
Change-Id: I0ca759bc04498a963cab540b6e0b93990712aca2
diff --git a/libartservice/service/Android.bp b/libartservice/service/Android.bp
index 72e2002..7bd4c34 100644
--- a/libartservice/service/Android.bp
+++ b/libartservice/service/Android.bp
@@ -132,9 +132,12 @@
"artd-aidl-java",
"mockito-target-minus-junit4",
"service-art.impl",
+ // Statically link against system server to allow us to mock system
+ // server APIs. This won't work on master-art, but it's fine because we
+ // don't run this test on master-art.
+ "services.core",
],
- sdk_version: "system_server_current",
min_sdk_version: "31",
test_suites: ["general-tests"],
diff --git a/libartservice/service/java/com/android/server/art/ArtManagerLocal.java b/libartservice/service/java/com/android/server/art/ArtManagerLocal.java
index b78a401..03a1deb 100644
--- a/libartservice/service/java/com/android/server/art/ArtManagerLocal.java
+++ b/libartservice/service/java/com/android/server/art/ArtManagerLocal.java
@@ -36,9 +36,9 @@
import com.android.server.art.model.DeleteResult;
import com.android.server.art.model.OptimizationStatus;
import com.android.server.art.wrapper.AndroidPackageApi;
-import com.android.server.art.wrapper.PackageDataSnapshot;
import com.android.server.art.wrapper.PackageManagerLocal;
import com.android.server.art.wrapper.PackageState;
+import com.android.server.pm.snapshot.PackageDataSnapshot;
import java.util.ArrayList;
import java.util.List;
diff --git a/libartservice/service/java/com/android/server/art/ArtShellCommand.java b/libartservice/service/java/com/android/server/art/ArtShellCommand.java
index a094d6f..9a49aae 100644
--- a/libartservice/service/java/com/android/server/art/ArtShellCommand.java
+++ b/libartservice/service/java/com/android/server/art/ArtShellCommand.java
@@ -25,8 +25,8 @@
import com.android.server.art.model.ArtFlags;
import com.android.server.art.model.DeleteResult;
import com.android.server.art.model.OptimizationStatus;
-import com.android.server.art.wrapper.PackageDataSnapshot;
import com.android.server.art.wrapper.PackageManagerLocal;
+import com.android.server.pm.snapshot.PackageDataSnapshot;
import java.io.PrintWriter;
diff --git a/libartservice/service/java/com/android/server/art/wrapper/PackageDataSnapshot.java b/libartservice/service/java/com/android/server/art/wrapper/PackageDataSnapshot.java
deleted file mode 100644
index 4b39255..0000000
--- a/libartservice/service/java/com/android/server/art/wrapper/PackageDataSnapshot.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2022 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.art.wrapper;
-
-import android.annotation.NonNull;
-
-/** @hide */
-public class PackageDataSnapshot {
- private final Object mSnapshot;
-
- PackageDataSnapshot(@NonNull Object snapshot) {
- mSnapshot = snapshot;
- }
-
- @NonNull
- Object getRealInstance() {
- return mSnapshot;
- }
-}
diff --git a/libartservice/service/java/com/android/server/art/wrapper/PackageManagerLocal.java b/libartservice/service/java/com/android/server/art/wrapper/PackageManagerLocal.java
index 2d594bd..650d29c 100644
--- a/libartservice/service/java/com/android/server/art/wrapper/PackageManagerLocal.java
+++ b/libartservice/service/java/com/android/server/art/wrapper/PackageManagerLocal.java
@@ -20,6 +20,8 @@
import android.annotation.Nullable;
import android.os.UserHandle;
+import com.android.server.pm.snapshot.PackageDataSnapshot;
+
/** @hide */
public class PackageManagerLocal {
private final Object mPackageManagerInternal;
@@ -50,10 +52,9 @@
@NonNull
public PackageDataSnapshot snapshot() {
try {
- Object snapshot = mPackageManagerInternal.getClass()
- .getMethod("snapshot")
- .invoke(mPackageManagerInternal);
- return new PackageDataSnapshot(snapshot);
+ return (PackageDataSnapshot) mPackageManagerInternal.getClass()
+ .getMethod("snapshot")
+ .invoke(mPackageManagerInternal);
} catch (ReflectiveOperationException e) {
throw new RuntimeException(e);
}
@@ -66,11 +67,10 @@
int userId = (int) UserHandle.class.getMethod("getUserId", int.class)
.invoke(null, callingUid);
Class<?> computerClass = Class.forName("com.android.server.pm.Computer");
- Object packageState =
- computerClass
- .getMethod("getPackageStateForInstalledAndFiltered", String.class,
- int.class, int.class)
- .invoke(snapshot.getRealInstance(), packageName, callingUid, userId);
+ Object packageState = computerClass
+ .getMethod("getPackageStateForInstalledAndFiltered",
+ String.class, int.class, int.class)
+ .invoke(snapshot, packageName, callingUid, userId);
return packageState != null ? new PackageState(packageState) : null;
} catch (ReflectiveOperationException e) {
throw new RuntimeException(e);
diff --git a/libartservice/service/java/com/android/server/art/wrapper/README.md b/libartservice/service/java/com/android/server/art/wrapper/README.md
index ee66f5b..829fc1c 100644
--- a/libartservice/service/java/com/android/server/art/wrapper/README.md
+++ b/libartservice/service/java/com/android/server/art/wrapper/README.md
@@ -6,7 +6,6 @@
The mappings are:
- `AndroidPackageApi`: `com.android.server.pm.pkg.AndroidPackageApi`
-- `PackageDataSnapshot`: `com.android.server.pm.snapshot.PackageDataSnapshot`
- `PackageManagerLocal`: `com.android.server.pm.PackageManagerLocal`
- `PackageState`: `com.android.server.pm.pkg.PackageState`
- `SharedLibraryInfo`: `android.content.pm.SharedLibraryInfo`
diff --git a/libartservice/service/javatests/com/android/server/art/ArtManagerLocalTest.java b/libartservice/service/javatests/com/android/server/art/ArtManagerLocalTest.java
index 572ab06..0e958ba 100644
--- a/libartservice/service/javatests/com/android/server/art/ArtManagerLocalTest.java
+++ b/libartservice/service/javatests/com/android/server/art/ArtManagerLocalTest.java
@@ -37,9 +37,9 @@
import com.android.server.art.model.DeleteResult;
import com.android.server.art.model.OptimizationStatus;
import com.android.server.art.wrapper.AndroidPackageApi;
-import com.android.server.art.wrapper.PackageDataSnapshot;
import com.android.server.art.wrapper.PackageManagerLocal;
import com.android.server.art.wrapper.PackageState;
+import com.android.server.pm.snapshot.PackageDataSnapshot;
import org.junit.Before;
import org.junit.Rule;