Signature streaming from local file, property to disable incremental.

+Tests

Test: atest PackageManagerShellCommandTest PackageManagerShellCommandIncrementalTest
Bug: b/136132412 b/133435829

Change-Id: I826900e120c72e7cdd0549c70da28d817982dcd3
diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
index 3909fdf..c267cea 100644
--- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
+++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
@@ -88,6 +88,7 @@
 import android.os.SystemProperties;
 import android.os.UserHandle;
 import android.os.UserManager;
+import android.os.incremental.V4Signature;
 import android.os.storage.StorageManager;
 import android.permission.IPermissionManager;
 import android.system.ErrnoException;
@@ -3024,9 +3025,15 @@
                 final File file = new File(inPath);
                 final String name = file.getName();
                 final long size = file.length();
-                byte[] metadata = inPath.getBytes(StandardCharsets.UTF_8);
+                final byte[] metadata = inPath.getBytes(StandardCharsets.UTF_8);
 
-                session.addFile(LOCATION_DATA_APP, name, size, metadata, null);
+                // Try to load a v4 signature for the APK.
+                final V4Signature v4signature = V4Signature.readFrom(
+                        new File(inPath + V4Signature.EXT));
+                final byte[] v4signatureBytes =
+                        (v4signature != null) ? v4signature.toByteArray() : null;
+
+                session.addFile(LOCATION_DATA_APP, name, size, metadata, v4signatureBytes);
             }
             return 0;
         } finally {