summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Kyeongkab.Nam <Kyeongkab.Nam@sony.com> 2019-04-09 12:07:37 +0900
committer Kyeongkab.Nam <Kyeongkab.Nam@sony.com> 2019-07-09 11:21:57 +0900
commitbcc56339bb74737b235376c338efd21db843d796 (patch)
tree2d348f875229d10188b0cb9da4a03171f2609d44
parentcacfab67281eaffdf108adc84acb72416aef0244 (diff)
Add a new API applyPayloadFd() of UpdateEngine
Due to the restriction of Treble, update_engine cannot access to OTA packages located on non-core domain area. (e.g. /data/vendor/upgrade/xxx.zip) To solve such problem, update_engine needs to accept a file descriptor (FD) of OTA package file instead of its URI. Accordingly, UpdateEngine also needs to add a new interface of applyPayload which accepts FD. Test: Manual update Bug: 130209137 Change-Id: Ic924445c4abf27fd7dc111c74b972ac7ff9ffa6b
-rw-r--r--api/system-current.txt1
-rw-r--r--core/java/android/os/UpdateEngine.java18
2 files changed, 19 insertions, 0 deletions
diff --git a/api/system-current.txt b/api/system-current.txt
index cf55fbef1ff5..466ecd1e7891 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -4268,6 +4268,7 @@ package android.os {
public class UpdateEngine {
ctor public UpdateEngine();
method public void applyPayload(String, long, long, String[]);
+ method public void applyPayload(java.io.FileDescriptor, long, long, String[]);
method public boolean bind(android.os.UpdateEngineCallback, android.os.Handler);
method public boolean bind(android.os.UpdateEngineCallback);
method public void cancel();
diff --git a/core/java/android/os/UpdateEngine.java b/core/java/android/os/UpdateEngine.java
index 8f2826c16b63..69bdde35a967 100644
--- a/core/java/android/os/UpdateEngine.java
+++ b/core/java/android/os/UpdateEngine.java
@@ -21,6 +21,8 @@ import android.os.IUpdateEngine;
import android.os.IUpdateEngineCallback;
import android.os.RemoteException;
+import java.io.FileDescriptor;
+
/**
* UpdateEngine handles calls to the update engine which takes care of A/B OTA
* updates. It wraps up the update engine Binder APIs and exposes them as
@@ -187,6 +189,22 @@ public class UpdateEngine {
}
/**
+ * Applies the payload passed as file descriptor {@code fd} instead of
+ * using the {@code file://} scheme.
+ *
+ * <p>See {@link #applyPayload(String)} for {@code offset}, {@code size} and
+ * {@code headerKeyValuePairs} parameters.
+ */
+ public void applyPayload(FileDescriptor fd, long offset, long size,
+ String[] headerKeyValuePairs) {
+ try {
+ mUpdateEngine.applyPayloadFd(fd, offset, size, headerKeyValuePairs);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
* Permanently cancels an in-progress update.
*
* <p>See {@link #resetStatus} to undo a finshed update (only available