Implement a tear-down phase in otapreopt_chroot.

Collect the list of APEX packages activated by `otapreopt_chroot` and
deactivate them after executing `otapreopt` (in its own process).

Also share android::installd::Exec between `otapreopt` and
`otapreopt_chroot`.

This tear-down phase ensures loop devices associated during by
`otapreopt_chroot` are detached before `otapreopt_chroot` exits.

Test: m otapreopt_chroot
Test: A/B OTA update test (asit/dexoptota/self_full).
Bug: 113373927
Bug: 120796514
Change-Id: I236ac49bb698fb672e7a4f9de9903229e535e9c6
diff --git a/cmds/installd/Android.bp b/cmds/installd/Android.bp
index 85652b3..95f5efb 100644
--- a/cmds/installd/Android.bp
+++ b/cmds/installd/Android.bp
@@ -136,7 +136,10 @@
     ],
     clang: true,
 
-    srcs: ["otapreopt_chroot.cpp"],
+    srcs: [
+        "otapreopt_chroot.cpp",
+        "otapreopt_utils.cpp",
+    ],
     shared_libs: [
         "libbase",
         "liblog",
@@ -197,6 +200,7 @@
         "dexopt.cpp",
         "globals.cpp",
         "otapreopt.cpp",
+        "otapreopt_utils.cpp",
         "utils.cpp",
     ],