# Cts Shim Apex ## Overview 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 whitelist of 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_with_pre_install_hook \ com.android.apex.cts.shim.v2_with_post_install_hook \ com.android.apex.cts.shim.v1 \ com.android.apex.cts.shim.v2_wrong_sha \ 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