android_packages_modules_Vi.../microdroid/payload
Jooyung Han 5dc421758b virtualizationservice: "prefer_staged" for apexes
App can tell virtualizationservice to use "staged" apexes for its
payload.

  // vm_config.json
  {
    ..
    "perfer_staged": true
  }

Bug: 199146189
Test: MicrodroidHostTestCases
Test: adb install --staged new-adbd.apex
      vm run-app with prefer_staged: true, started with staged adbd apex
Change-Id: I6320247362e07519e120aed19b290618270e1335
2021-10-05 20:03:12 +09:00
..
config virtualizationservice: "prefer_staged" for apexes 2021-10-05 20:03:12 +09:00
include/microdroid Rename "signature" to "metadata" 2021-06-09 10:53:54 +09:00
metadata Rename payload metadata partition 2021-07-06 20:48:38 +09:00
Android.bp Clean up READMEs and remove unused target. 2021-08-16 12:19:16 +00:00
README.md Clean up READMEs and remove unused target. 2021-08-16 12:19:16 +00:00
metadata.cc Rename "signature" to "metadata" 2021-06-09 10:53:54 +09:00
metadata.proto Store/Pass root digests of APEX payload 2021-09-13 18:32:21 +09:00
mk_payload.cc mk_payload is a host tool 2021-08-05 11:30:01 +09:00

README.md

Microdroid Payload

Payload disk is a composite disk image referencing host APEXes and an APK so that microdroid mounts/activates APK/APEXes and executes a binary within the APK.

Payload disk is created by VirtualizationService Service when starting a VM.

Partitions

Payload disk has 1 + N(number of APEX/APK payloads) partitions.

The first partition is a "payload-metadata" partition which describes other partitions. And APEXes and an APK are following as separate partitions.

For now, the order of partitions are important.

  • partition 1: Metadata partition
  • partition 2 ~ n: APEX payloads
  • partition n+1, n+2: APK payload and its idsig

It's subject to change in the future, though.

Metadata partition

Metadata partition provides description of the other partitions and the location for VM payload configuration.

The partition is a protobuf message prefixed with the size of the message.

offset size description
0 4 Header. unsigned int32: body length(L) in big endian
4 L Body. A protobuf message. schema

Payload partitions

Each payload partition presents APEX or APK passed from the host.

The size of a payload partition must be a multiple of 4096 bytes.

mk_payload

mk_payload is a small utility to create a payload disk image. It is used by ARCVM.

$ cat payload_config.json
{
  "apexes": [
    {
      "name": "com.my.hello",
      "path": "hello.apex",
    }
  ],
  "apk": {
    "name": "com.my.world",
    "path": "/path/to/world.apk",
    "idsigPath": "/path/to/world.apk.idsig",
  }
}
$ m mk_payload
$ mk_payload payload_config.json payload.img
$ ls
payload.img
payload-footer.img
payload-header.img
payload-metadata.img
payload-filler-0.img
payload-filler-1.img
...