diff --git a/compos/aidl/com/android/compos/ICompOsService.aidl b/compos/aidl/com/android/compos/ICompOsService.aidl
index db746fd..7af2ada 100644
--- a/compos/aidl/com/android/compos/ICompOsService.aidl
+++ b/compos/aidl/com/android/compos/ICompOsService.aidl
@@ -42,6 +42,19 @@
             String bootClasspath, String dex2oatBootClasspath, String systemServerClassPath);
 
     /**
+     * Run odrefresh in the VM context.
+     *
+     * The execution is based on the VM's APEX mounts, files on Android's /system (by accessing
+     * through systemDirFd over AuthFS), and *CLASSPATH derived in the VM, to generate the same
+     * odrefresh output aritfacts to the output directory (through outputDirFd).
+     *
+     * The caller/Android is allowed to specify the zygote arch (ro.zygote).
+     *
+     * @return a CompilationResult
+     */
+    CompilationResult odrefresh(int systemDirFd, int outputDirFd, String zygoteArch);
+
+    /**
      * Run dex2oat command with provided args, in a context that may be specified in FdAnnotation,
      * e.g. with file descriptors pre-opened. The service is responsible to decide what executables
      * it may run.
diff --git a/compos/src/compilation.rs b/compos/src/compilation.rs
index 72dca14..b726a1e 100644
--- a/compos/src/compilation.rs
+++ b/compos/src/compilation.rs
@@ -17,14 +17,17 @@
 use anyhow::{anyhow, bail, Context, Result};
 use log::error;
 use minijail::{self, Minijail};
-use std::fs::File;
+use std::env;
+use std::fs::{create_dir, File};
 use std::os::unix::io::{AsRawFd, RawFd};
-use std::path::Path;
+use std::path::{Path, PathBuf};
 
 use crate::fsverity;
 use authfs_aidl_interface::aidl::com::android::virt::fs::{
     AuthFsConfig::{
-        AuthFsConfig, InputFdAnnotation::InputFdAnnotation, OutputFdAnnotation::OutputFdAnnotation,
+        AuthFsConfig, InputDirFdAnnotation::InputDirFdAnnotation,
+        InputFdAnnotation::InputFdAnnotation, OutputDirFdAnnotation::OutputDirFdAnnotation,
+        OutputFdAnnotation::OutputFdAnnotation,
     },
     IAuthFs::IAuthFs,
     IAuthFsService::IAuthFsService,
@@ -32,6 +35,8 @@
 use authfs_aidl_interface::binder::{ParcelFileDescriptor, Strong};
 use compos_aidl_interface::aidl::com::android::compos::FdAnnotation::FdAnnotation;
 
+const FD_SERVER_PORT: i32 = 3264; // TODO: support dynamic port
+
 /// The number that represents the file descriptor number expecting by the task. The number may be
 /// meaningless in the current process.
 pub type PseudoRawFd = i32;
@@ -53,6 +58,60 @@
     image: ParcelFileDescriptor,
 }
 
+pub fn odrefresh(
+    odrefresh_path: &Path,
+    system_dir_fd: i32,
+    output_dir_fd: i32,
+    zygote_arch: &str,
+    authfs_service: Strong<dyn IAuthFsService>,
+) -> Result<CompilerOutput> {
+    // Mount authfs (via authfs_service). The authfs instance unmounts once the `authfs` variable
+    // is out of scope.
+    let authfs_config = AuthFsConfig {
+        port: FD_SERVER_PORT,
+        inputDirFdAnnotations: vec![InputDirFdAnnotation {
+            fd: system_dir_fd,
+            // TODO(206869687): Replace /dev/null with the real path when possible.
+            manifestPath: "/dev/null".to_string(),
+            prefix: "/system".to_string(),
+        }],
+        outputDirFdAnnotations: vec![OutputDirFdAnnotation { fd: output_dir_fd }],
+        ..Default::default()
+    };
+    let authfs = authfs_service.mount(&authfs_config)?;
+    let mountpoint = PathBuf::from(authfs.getMountPoint()?);
+
+    let mut android_root = mountpoint.clone();
+    android_root.push(system_dir_fd.to_string());
+    android_root.push("system");
+    env::set_var("ANDROID_ROOT", &android_root);
+
+    let mut staging_dir = mountpoint;
+    staging_dir.push(output_dir_fd.to_string());
+    staging_dir.push("staging");
+    create_dir(&staging_dir).context("Create staging directory")?;
+
+    let args = vec![
+        "odrefresh".to_string(),
+        format!("--zygote-arch={}", zygote_arch),
+        format!("--staging-dir={}", staging_dir.display()),
+        "--force-compile".to_string(),
+    ];
+    let jail = spawn_jailed_task(odrefresh_path, &args, Vec::new() /* fd_mapping */)
+        .context("Spawn odrefresh")?;
+    match jail.wait() {
+        // TODO(161471326): On success, sign all files in the output directory.
+        Ok(()) => Ok(CompilerOutput::ExitCode(0)),
+        Err(minijail::Error::ReturnCode(exit_code)) => {
+            error!("dex2oat failed with exit code {}", exit_code);
+            Ok(CompilerOutput::ExitCode(exit_code as i8))
+        }
+        Err(e) => {
+            bail!("Unexpected minijail error: {}", e)
+        }
+    }
+}
+
 /// Runs the compiler with given flags with file descriptors described in `fd_annotation` retrieved
 /// via `authfs_service`. Returns exit code of the compiler process.
 pub fn compile_cmd(
@@ -140,7 +199,7 @@
 
 fn build_authfs_config(fd_annotation: &FdAnnotation) -> AuthFsConfig {
     AuthFsConfig {
-        port: 3264, // TODO: support dynamic port
+        port: FD_SERVER_PORT,
         inputFdAnnotations: fd_annotation
             .input_fds
             .iter()
@@ -151,8 +210,7 @@
             .iter()
             .map(|fd| OutputFdAnnotation { fd: *fd })
             .collect(),
-        inputDirFdAnnotations: vec![],
-        outputDirFdAnnotations: vec![],
+        ..Default::default()
     }
 }
 
diff --git a/compos/src/compsvc.rs b/compos/src/compsvc.rs
index 9d2f1dc..0a15876 100644
--- a/compos/src/compsvc.rs
+++ b/compos/src/compsvc.rs
@@ -26,7 +26,7 @@
 use std::path::PathBuf;
 use std::sync::{Arc, RwLock};
 
-use crate::compilation::{compile_cmd, CompilerOutput};
+use crate::compilation::{compile_cmd, odrefresh, CompilerOutput};
 use crate::compos_key_service::CompOsKeyService;
 use crate::fsverity;
 use authfs_aidl_interface::aidl::com::android::virt::fs::IAuthFsService::IAuthFsService;
@@ -42,11 +42,13 @@
 
 const AUTHFS_SERVICE_NAME: &str = "authfs_service";
 const DEX2OAT_PATH: &str = "/apex/com.android.art/bin/dex2oat64";
+const ODREFRESH_PATH: &str = "/apex/com.android.art/bin/odrefresh";
 
 /// Constructs a binder object that implements ICompOsService.
 pub fn new_binder() -> Result<Strong<dyn ICompOsService>> {
     let service = CompOsService {
         dex2oat_path: PathBuf::from(DEX2OAT_PATH),
+        odrefresh_path: PathBuf::from(ODREFRESH_PATH),
         key_service: CompOsKeyService::new()?,
         key_blob: Arc::new(RwLock::new(Vec::new())),
     };
@@ -55,6 +57,7 @@
 
 struct CompOsService {
     dex2oat_path: PathBuf,
+    odrefresh_path: PathBuf,
     key_service: CompOsKeyService,
     key_blob: Arc<RwLock<Vec<u8>>>,
 }
@@ -99,6 +102,48 @@
         Ok(())
     }
 
+    fn odrefresh(
+        &self,
+        system_dir_fd: i32,
+        output_dir_fd: i32,
+        zygote_arch: &str,
+    ) -> BinderResult<CompilationResult> {
+        if system_dir_fd < 0 || output_dir_fd < 0 {
+            return Err(new_binder_exception(
+                ExceptionCode::ILLEGAL_ARGUMENT,
+                "The remote FDs are expected to be non-negative",
+            ));
+        }
+        if zygote_arch != "zygote64" && zygote_arch != "zygote64_32" {
+            return Err(new_binder_exception(
+                ExceptionCode::ILLEGAL_ARGUMENT,
+                "Invalid zygote arch",
+            ));
+        }
+
+        let authfs_service = get_authfs_service()?;
+        let output = odrefresh(
+            &self.odrefresh_path,
+            system_dir_fd,
+            output_dir_fd,
+            zygote_arch,
+            authfs_service,
+        )
+        .map_err(|e| {
+            warn!("odrefresh failed: {}", e);
+            new_binder_exception(
+                ExceptionCode::SERVICE_SPECIFIC,
+                format!("odrefresh failed: {}", e),
+            )
+        })?;
+        match output {
+            CompilerOutput::ExitCode(exit_code) => {
+                Ok(CompilationResult { exitCode: exit_code, ..Default::default() })
+            }
+            _ => Err(new_binder_exception(ExceptionCode::SERVICE_SPECIFIC, "odrefresh failed")),
+        }
+    }
+
     fn compile_cmd(
         &self,
         args: &[String],
