Cts Shim Apex


A shim apex is an apex that doesn‘t provide any functionality as it’s sole purpose is to enable CTS testing of APEX-related APIs.

A cts shim apex has following restrictions:

  • Its name is equal to com.android.apex.cts.shim
  • It is signed with a throw-away key.
  • First version (i.e. com.android.apex.cts.shim.apex) should be pre-installed on the /system/partition.
  • apex_payload.img of the pre-installed shim apexcontains a single text file called hash.txt with a list of allowed SHA512 hashes of versions shim apex can be upgraded to.
  • apex_payload.img of all other versions contains SHA512 hash of /dev/null.

Building shim apexes

Modules to build shim apexes are defined in the system/apex/shim/build/Android.bp blueprint file.

To build shim apexes simply run

m com.android.apex.cts.shim.v3 \
  com.android.apex.cts.shim.v2 \
  com.android.apex.cts.shim.v2_additional_file \
  com.android.apex.cts.shim.v2_additional_folder \
  com.android.apex.cts.shim.v2_different_certificate \
  com.android.apex.cts.shim.v2_different_package_name \
  com.android.apex.cts.shim.v2_with_pre_install_hook \
  com.android.apex.cts.shim.v2_with_post_install_hook \
  com.android.apex.cts.shim.v2_wrong_sha \
  com.android.apex.cts.shim.v1 \
  com.android.apex.cts.shim_not_pre_installed \

Generated apexes will be located in the following folders.

  • out/target/product/${DEVICE}/obj/ETC/com.android.apex.cts.shim.v1_intermediates/com.android.apex.cts.shim.v1.apex
  • out/target/product/${DEVICE}/obj/ETC/com.android.apex.cts.shim.v2_intermediates/com.android.apex.cts.shim.v2.apex
  • out/target/product/${DEVICE}/obj/ETC/com.android.apex.cts.shim.v2_wrong_sha_intermediates/com.android.apex.cts.shim.v2_wrong_sha.apex
  • etc.

Updating shim apexes

Shim apex files should be built on a build server and then downloaded from it into following directories:

  • system/apex/shim
  • cts/hostsidetests/stagedinstall/testdata/apex