Merge "Rename target MicroroidDeviceTestHelper to MicrodroidDeviceTestHelper"
diff --git a/apkdmverity/Android.bp b/apkdmverity/Android.bp
index 06d4500..97a6174 100644
--- a/apkdmverity/Android.bp
+++ b/apkdmverity/Android.bp
@@ -6,7 +6,7 @@
     name: "apkdmverity.defaults",
     crate_name: "apkdmverity",
     srcs: ["src/main.rs"],
-    edition: "2018",
+    edition: "2021",
     prefer_rlib: true,
     rustlibs: [
         "libanyhow",
diff --git a/authfs/Android.bp b/authfs/Android.bp
index 4c5b70e..7788702 100644
--- a/authfs/Android.bp
+++ b/authfs/Android.bp
@@ -8,7 +8,7 @@
     srcs: [
         "src/main.rs",
     ],
-    edition: "2018",
+    edition: "2021",
     rustlibs: [
         "authfs_aidl_interface-rust",
         "libandroid_logger",
diff --git a/authfs/service/Android.bp b/authfs/service/Android.bp
index 943db35..e9eec1e 100644
--- a/authfs/service/Android.bp
+++ b/authfs/service/Android.bp
@@ -7,7 +7,7 @@
     srcs: [
         "src/main.rs",
     ],
-    edition: "2018",
+    edition: "2021",
     rustlibs: [
         "authfs_aidl_interface-rust",
         "libandroid_logger",
diff --git a/authfs/src/fsverity/metadata/Android.bp b/authfs/src/fsverity/metadata/Android.bp
index c988884..3df7519 100644
--- a/authfs/src/fsverity/metadata/Android.bp
+++ b/authfs/src/fsverity/metadata/Android.bp
@@ -20,6 +20,6 @@
         "libauthfs_fsverity_metadata_bindgen",
         "libopenssl",
     ],
-    edition: "2018",
+    edition: "2021",
     apex_available: ["com.android.virt"],
 }
diff --git a/authfs/tests/Android.bp b/authfs/tests/Android.bp
index 990daf3..72685ad 100644
--- a/authfs/tests/Android.bp
+++ b/authfs/tests/Android.bp
@@ -27,7 +27,7 @@
     name: "open_then_run",
     crate_name: "open_then_run",
     srcs: ["open_then_run.rs"],
-    edition: "2018",
+    edition: "2021",
     rustlibs: [
         "libandroid_logger",
         "libanyhow",
diff --git a/compos/Android.bp b/compos/Android.bp
index ec2d737..6aa9d3d 100644
--- a/compos/Android.bp
+++ b/compos/Android.bp
@@ -4,6 +4,7 @@
 
 rust_defaults {
     name: "compsvc_defaults",
+    edition: "2021",
     srcs: ["src/compsvc_main.rs"],
     rustlibs: [
         "android.system.virtualmachineservice-rust",
diff --git a/compos/common/Android.bp b/compos/common/Android.bp
index 23a1eb9..7a7042e 100644
--- a/compos/common/Android.bp
+++ b/compos/common/Android.bp
@@ -6,7 +6,7 @@
     name: "libcompos_common",
     crate_name: "compos_common",
     srcs: ["lib.rs"],
-    edition: "2018",
+    edition: "2021",
     rustlibs: [
         "android.system.virtualizationservice-rust",
         "compos_aidl_interface-rust",
diff --git a/compos/composd/Android.bp b/compos/composd/Android.bp
index 937aa1a..07a9be3 100644
--- a/compos/composd/Android.bp
+++ b/compos/composd/Android.bp
@@ -5,7 +5,7 @@
 rust_binary {
     name: "composd",
     srcs: ["src/composd_main.rs"],
-    edition: "2018",
+    edition: "2021",
     prefer_rlib: true,
     rustlibs: [
         "android.system.composd-rust",
diff --git a/compos/composd_cmd/Android.bp b/compos/composd_cmd/Android.bp
index c230e13..61df328 100644
--- a/compos/composd_cmd/Android.bp
+++ b/compos/composd_cmd/Android.bp
@@ -5,7 +5,7 @@
 rust_binary {
     name: "composd_cmd",
     srcs: ["composd_cmd.rs"],
-    edition: "2018",
+    edition: "2021",
     rustlibs: [
         "android.system.composd-rust",
         "libanyhow",
diff --git a/compos/tests/Android.bp b/compos/tests/Android.bp
index 72da97f..41958ca 100644
--- a/compos/tests/Android.bp
+++ b/compos/tests/Android.bp
@@ -10,11 +10,18 @@
         "compatibility-tradefed",
         "compatibility-host-util",
     ],
-    data_native_bins: ["bcc_validator"],
     static_libs: [
         "MicrodroidHostTestHelper",
     ],
     test_suites: [
         "general-tests",
     ],
+    // java_test_host doesn't have data_native_libs but jni_libs can be used to put
+    // native modules under ./lib directory.
+    // This works because host tools have rpath (../lib and ./lib).
+    data_native_bins: ["bcc_validator"],
+    jni_libs: [
+        "libcrypto",
+        "libc++",
+    ],
 }
diff --git a/compos/verify/Android.bp b/compos/verify/Android.bp
index 5c74e4f..f68cc1b 100644
--- a/compos/verify/Android.bp
+++ b/compos/verify/Android.bp
@@ -5,7 +5,7 @@
 rust_binary {
     name: "compos_verify",
     srcs: ["verify.rs"],
-    edition: "2018",
+    edition: "2021",
     rustlibs: [
         "compos_aidl_interface-rust",
         "libandroid_logger",
diff --git a/libs/apexutil/Android.bp b/libs/apexutil/Android.bp
index 5b55e1c..3bdfc5f 100644
--- a/libs/apexutil/Android.bp
+++ b/libs/apexutil/Android.bp
@@ -7,7 +7,7 @@
     crate_name: "apexutil",
     host_supported: true,
     srcs: ["src/lib.rs"],
-    edition: "2018",
+    edition: "2021",
     rustlibs: [
         "liblog_rust",
         "libthiserror",
diff --git a/libs/apkverify/Android.bp b/libs/apkverify/Android.bp
index 2d58bb0..ab9265d 100644
--- a/libs/apkverify/Android.bp
+++ b/libs/apkverify/Android.bp
@@ -7,7 +7,7 @@
     crate_name: "apkverify",
     srcs: ["src/lib.rs"],
     prefer_rlib: true,
-    edition: "2018",
+    edition: "2021",
     rustlibs: [
         "libanyhow",
         "libbyteorder",
@@ -37,7 +37,7 @@
     crate_name: "apkverify_test",
     srcs: ["tests/*_test.rs"],
     prefer_rlib: true,
-    edition: "2018",
+    edition: "2021",
     test_suites: ["general-tests"],
     rustlibs: [
         "libapkverify",
diff --git a/libs/avb_bindgen/Android.bp b/libs/avb_bindgen/Android.bp
index 6dc16e8..80b96a6 100644
--- a/libs/avb_bindgen/Android.bp
+++ b/libs/avb_bindgen/Android.bp
@@ -7,6 +7,7 @@
     host_supported: true,
     wrapper_src: "bindgen/avb.h",
     crate_name: "avb_bindgen",
+    edition: "2021",
     visibility: ["//packages/modules/Virtualization:__subpackages__"],
     source_stem: "bindings",
     bindgen_flags: [
@@ -26,6 +27,7 @@
     name: "libavb_bindgen_test",
     srcs: [":libavb_bindgen"],
     crate_name: "avb_bindgen_test",
+    edition: "2021",
     test_suites: ["general-tests"],
     auto_gen_config: true,
     clippy_lints: "none",
diff --git a/libs/idsig/Android.bp b/libs/idsig/Android.bp
index 25eeae4..9f7d377 100644
--- a/libs/idsig/Android.bp
+++ b/libs/idsig/Android.bp
@@ -6,7 +6,7 @@
     name: "libidsig.defaults",
     crate_name: "idsig",
     srcs: ["src/lib.rs"],
-    edition: "2018",
+    edition: "2021",
     prefer_rlib: true,
     rustlibs: [
         "libanyhow",
diff --git a/libs/nested_virt/Android.bp b/libs/nested_virt/Android.bp
index e364a2d..72393ea 100644
--- a/libs/nested_virt/Android.bp
+++ b/libs/nested_virt/Android.bp
@@ -6,7 +6,7 @@
     name: "libnested_virt",
     crate_name: "nested_virt",
     srcs: ["src/lib.rs"],
-    edition: "2018",
+    edition: "2021",
     rustlibs: [
         "libanyhow",
         "librustutils",
diff --git a/libs/statslog_virtualization/Android.bp b/libs/statslog_virtualization/Android.bp
index 51a51a3..a702ea1 100644
--- a/libs/statslog_virtualization/Android.bp
+++ b/libs/statslog_virtualization/Android.bp
@@ -27,21 +27,28 @@
     ],
 }
 
+rust_defaults {
+    name: "libstatslog_virtualization_rust_defaults",
+    edition: "2021",
+    rustlibs: [
+        "libstatspull_bindgen",
+    ],
+    apex_available: [
+        "com.android.virt",
+    ],
+}
+
 rust_library {
     name: "libstatslog_virtualization_rust_header",
+    defaults: ["libstatslog_virtualization_rust_defaults"],
     crate_name: "statslog_virtualization_rust_header",
     srcs: [
         "statslog_header_wrapper.rs",
         ":statslog_virtualization_header.rs",
     ],
     rustlibs: [
-        "libstatspull_bindgen",
         "libthiserror",
     ],
-    apex_available: [
-        "com.android.virt",
-    ],
-
 }
 
 genrule {
@@ -55,6 +62,7 @@
 
 rust_library {
     name: "libstatslog_virtualization_rust",
+    defaults: ["libstatslog_virtualization_rust_defaults"],
     crate_name: "statslog_virtualization_rust",
     srcs: [
         "statslog_wrapper.rs",
@@ -62,10 +70,5 @@
     ],
     rustlibs: [
         "libstatslog_virtualization_rust_header",
-        "libstatspull_bindgen",
     ],
-    apex_available: [
-        "com.android.virt",
-    ],
-
 }
diff --git a/libs/vbmeta/Android.bp b/libs/vbmeta/Android.bp
index 84dde11..c5078c2 100644
--- a/libs/vbmeta/Android.bp
+++ b/libs/vbmeta/Android.bp
@@ -7,7 +7,7 @@
     crate_name: "vbmeta",
     host_supported: true,
     srcs: ["src/lib.rs"],
-    edition: "2018",
+    edition: "2021",
     rustlibs: [
         "libavb_bindgen",
         "libthiserror",
diff --git a/libs/vmconfig/Android.bp b/libs/vmconfig/Android.bp
index 1aee1ce..fe541d3 100644
--- a/libs/vmconfig/Android.bp
+++ b/libs/vmconfig/Android.bp
@@ -6,7 +6,7 @@
     name: "libvmconfig",
     crate_name: "vmconfig",
     srcs: ["src/lib.rs"],
-    edition: "2018",
+    edition: "2021",
     rustlibs: [
         "android.system.virtualizationservice-rust",
         "libanyhow",
diff --git a/microdroid/payload/config/Android.bp b/microdroid/payload/config/Android.bp
index 827f6e3..7e60cd4 100644
--- a/microdroid/payload/config/Android.bp
+++ b/microdroid/payload/config/Android.bp
@@ -8,7 +8,7 @@
     crate_name: "microdroid_payload_config",
     srcs: ["src/lib.rs"],
     prefer_rlib: true,
-    edition: "2018",
+    edition: "2021",
     rustlibs: [
         "libserde_json",
         "libserde",
diff --git a/microdroid/payload/metadata/Android.bp b/microdroid/payload/metadata/Android.bp
index e4c7692..cd182fc 100644
--- a/microdroid/payload/metadata/Android.bp
+++ b/microdroid/payload/metadata/Android.bp
@@ -8,7 +8,7 @@
     crate_name: "microdroid_metadata",
     srcs: ["src/lib.rs"],
     prefer_rlib: true,
-    edition: "2018",
+    edition: "2021",
     rustlibs: [
         "libanyhow",
         "libmicrodroid_metadata_proto_rust",
diff --git a/microdroid_manager/Android.bp b/microdroid_manager/Android.bp
index da63434..cfb851b 100644
--- a/microdroid_manager/Android.bp
+++ b/microdroid_manager/Android.bp
@@ -6,7 +6,7 @@
     name: "microdroid_manager_defaults",
     crate_name: "microdroid_manager",
     srcs: ["src/main.rs"],
-    edition: "2018",
+    edition: "2021",
     prefer_rlib: true,
     rustlibs: [
         "android.hardware.security.dice-V1-rust",
diff --git a/tests/benchmark/src/java/com/android/microdroid/benchmark/BenchmarkVmListener.java b/tests/benchmark/src/java/com/android/microdroid/benchmark/BenchmarkVmListener.java
new file mode 100644
index 0000000..eb45a71
--- /dev/null
+++ b/tests/benchmark/src/java/com/android/microdroid/benchmark/BenchmarkVmListener.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.microdroid.benchmark;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.os.RemoteException;
+import android.system.virtualmachine.VirtualMachine;
+import android.util.Log;
+
+import com.android.microdroid.test.MicrodroidDeviceTestBase.VmEventListener;
+import com.android.microdroid.testservice.IBenchmarkService;
+
+/**
+ * This VM listener is used in {@link MicrodroidBenchmark} tests to facilitate the communication
+ * between the host and VM via {@link IBenchmarkService}.
+ */
+class BenchmarkVmListener extends VmEventListener {
+    private static final String TAG = "BenchmarkVm";
+
+    interface InnerListener {
+        /** This is invoked when both the payload and {@link IBenchmarkService} are ready. */
+        void onPayloadReady(VirtualMachine vm, IBenchmarkService benchmarkService)
+                throws RemoteException;
+    }
+
+    private final InnerListener mListener;
+
+    private BenchmarkVmListener(InnerListener listener) {
+        mListener = listener;
+    }
+
+    @Override
+    public final void onPayloadReady(VirtualMachine vm) {
+        try {
+            IBenchmarkService benchmarkService =
+                    IBenchmarkService.Stub.asInterface(
+                            vm.connectToVsockServer(IBenchmarkService.SERVICE_PORT).get());
+            assertThat(benchmarkService).isNotNull();
+
+            mListener.onPayloadReady(vm, benchmarkService);
+        } catch (Exception e) {
+            Log.e(TAG, "Error inside onPayloadReady():" + e);
+            throw new RuntimeException(e);
+        }
+        forceStop(vm);
+    }
+
+    static BenchmarkVmListener create(InnerListener listener) {
+        return new BenchmarkVmListener(listener);
+    }
+}
diff --git a/tests/benchmark/src/java/com/android/microdroid/benchmark/MicrodroidBenchmarks.java b/tests/benchmark/src/java/com/android/microdroid/benchmark/MicrodroidBenchmarks.java
index e19c72a..200b7bf 100644
--- a/tests/benchmark/src/java/com/android/microdroid/benchmark/MicrodroidBenchmarks.java
+++ b/tests/benchmark/src/java/com/android/microdroid/benchmark/MicrodroidBenchmarks.java
@@ -24,6 +24,7 @@
 import android.app.Instrumentation;
 import android.os.Bundle;
 import android.os.ParcelFileDescriptor;
+import android.os.RemoteException;
 import android.system.virtualmachine.VirtualMachine;
 import android.system.virtualmachine.VirtualMachineConfig;
 import android.system.virtualmachine.VirtualMachineConfig.DebugLevel;
@@ -193,8 +194,7 @@
             String vmName = "test_vm_io_" + i;
             mInner.forceCreateNewVirtualMachine(vmName, config);
             VirtualMachine vm = mInner.getVirtualMachineManager().get(vmName);
-            VsockVmEventListener listener = new VsockVmEventListener(transferRates, port);
-            listener.runToFinish(TAG, vm);
+            BenchmarkVmListener.create(new VsockListener(transferRates, port)).runToFinish(TAG, vm);
         }
         reportMetrics(transferRates, "vsock/transfer_host_to_vm_", "_mb_per_sec");
     }
@@ -226,8 +226,8 @@
             String vmName = "test_vm_io_" + i;
             mInner.forceCreateNewVirtualMachine(vmName, config);
             VirtualMachine vm = mInner.getVirtualMachineManager().get(vmName);
-            VirtioBlkVmEventListener listener = new VirtioBlkVmEventListener(readRates, isRand);
-            listener.runToFinish(TAG, vm);
+            BenchmarkVmListener.create(new VirtioBlkListener(readRates, isRand))
+                    .runToFinish(TAG, vm);
         }
         reportMetrics(
                 readRates,
@@ -260,14 +260,14 @@
         mInstrumentation.sendStatus(0, bundle);
     }
 
-    private static class VirtioBlkVmEventListener extends VmEventListener {
+    private static class VirtioBlkListener implements BenchmarkVmListener.InnerListener {
         private static final String FILENAME = APEX_ETC_FS + "microdroid_super.img";
 
         private final long mFileSizeBytes;
         private final List<Double> mReadRates;
         private final boolean mIsRand;
 
-        VirtioBlkVmEventListener(List<Double> readRates, boolean isRand) {
+        VirtioBlkListener(List<Double> readRates, boolean isRand) {
             File file = new File(FILENAME);
             try {
                 mFileSizeBytes = Files.size(file.toPath());
@@ -280,32 +280,26 @@
         }
 
         @Override
-        public void onPayloadReady(VirtualMachine vm) {
-            try {
-                IBenchmarkService benchmarkService =
-                        IBenchmarkService.Stub.asInterface(
-                                vm.connectToVsockServer(IBenchmarkService.SERVICE_PORT).get());
-                double elapsedSeconds =
-                        benchmarkService.readFile(FILENAME, mFileSizeBytes, mIsRand);
-                double fileSizeMb = mFileSizeBytes / SIZE_MB;
-                mReadRates.add(fileSizeMb / elapsedSeconds);
-            } catch (Exception e) {
-                throw new RuntimeException(e);
-            }
-            forceStop(vm);
+        public void onPayloadReady(VirtualMachine vm, IBenchmarkService benchmarkService)
+                throws RemoteException {
+            double elapsedSeconds = benchmarkService.readFile(FILENAME, mFileSizeBytes, mIsRand);
+            double fileSizeMb = mFileSizeBytes / SIZE_MB;
+            mReadRates.add(fileSizeMb / elapsedSeconds);
         }
     }
 
     @Test
     public void testMemoryUsage() throws Exception {
         final String vmName = "test_vm_mem_usage";
-        VirtualMachineConfig.Builder builder = mInner.newVmConfigBuilder(
-                "assets/vm_config_io.json");
-        VirtualMachineConfig config = builder.debugLevel(DebugLevel.NONE).memoryMib(256).build();
+        VirtualMachineConfig config =
+                mInner.newVmConfigBuilder("assets/vm_config_io.json")
+                        .debugLevel(DebugLevel.NONE)
+                        .memoryMib(256)
+                        .build();
         mInner.forceCreateNewVirtualMachine(vmName, config);
         VirtualMachine vm = mInner.getVirtualMachineManager().get(vmName);
         MemoryUsageListener listener = new MemoryUsageListener();
-        listener.runToFinish(TAG, vm);
+        BenchmarkVmListener.create(listener).runToFinish(TAG, vm);
 
         double mem_overall = 256.0;
         double mem_total = (double) listener.mMemTotal / 1024.0;
@@ -329,7 +323,7 @@
         mInstrumentation.sendStatus(0, bundle);
     }
 
-    private static class MemoryUsageListener extends VmEventListener {
+    private static class MemoryUsageListener implements BenchmarkVmListener.InnerListener {
         public long mMemTotal;
         public long mMemFree;
         public long mMemAvailable;
@@ -338,55 +332,38 @@
         public long mSlab;
 
         @Override
-        public void onPayloadReady(VirtualMachine vm) {
-            try {
-                IBenchmarkService service =
-                        IBenchmarkService.Stub.asInterface(
-                                vm.connectToVsockServer(IBenchmarkService.SERVICE_PORT).get());
-
-                mMemTotal = service.getMemInfoEntry("MemTotal");
-                mMemFree = service.getMemInfoEntry("MemFree");
-                mMemAvailable = service.getMemInfoEntry("MemAvailable");
-                mBuffers = service.getMemInfoEntry("Buffers");
-                mCached = service.getMemInfoEntry("Cached");
-                mSlab = service.getMemInfoEntry("Slab");
-            } catch (Exception e) {
-                throw new RuntimeException(e);
-            }
-            forceStop(vm);
+        public void onPayloadReady(VirtualMachine vm, IBenchmarkService service)
+                throws RemoteException {
+            mMemTotal = service.getMemInfoEntry("MemTotal");
+            mMemFree = service.getMemInfoEntry("MemFree");
+            mMemAvailable = service.getMemInfoEntry("MemAvailable");
+            mBuffers = service.getMemInfoEntry("Buffers");
+            mCached = service.getMemInfoEntry("Cached");
+            mSlab = service.getMemInfoEntry("Slab");
         }
     }
 
-    private static class VsockVmEventListener extends VmEventListener {
+    private static class VsockListener implements BenchmarkVmListener.InnerListener {
         private static final int NUM_BYTES_TO_TRANSFER = 48 * 1024 * 1024;
 
         private final List<Double> mReadRates;
         private final int mPort;
 
-        VsockVmEventListener(List<Double> readRates, int port) {
+        VsockListener(List<Double> readRates, int port) {
             mReadRates = readRates;
             mPort = port;
         }
 
         @Override
-        public void onPayloadReady(VirtualMachine vm) {
-            try {
-                IBenchmarkService benchmarkService =
-                        IBenchmarkService.Stub.asInterface(
-                                vm.connectToVsockServer(IBenchmarkService.SERVICE_PORT).get());
-                assertThat(benchmarkService).isNotNull();
-                AtomicReference<Double> sendRate = new AtomicReference();
+        public void onPayloadReady(VirtualMachine vm, IBenchmarkService benchmarkService)
+                throws RemoteException {
+            AtomicReference<Double> sendRate = new AtomicReference();
 
-                int serverFd = benchmarkService.initVsockServer(mPort);
-                new Thread(() -> sendRate.set(runVsockClientAndSendData(vm))).start();
-                benchmarkService.runVsockServerAndReceiveData(serverFd, NUM_BYTES_TO_TRANSFER);
+            int serverFd = benchmarkService.initVsockServer(mPort);
+            new Thread(() -> sendRate.set(runVsockClientAndSendData(vm))).start();
+            benchmarkService.runVsockServerAndReceiveData(serverFd, NUM_BYTES_TO_TRANSFER);
 
-                mReadRates.add(sendRate.get());
-            } catch (Exception e) {
-                Log.e(TAG, "Test failed in VM:" + e);
-                throw new RuntimeException(e);
-            }
-            forceStop(vm);
+            mReadRates.add(sendRate.get());
         }
 
         private double runVsockClientAndSendData(VirtualMachine vm) {
diff --git a/tests/helper/src/java/com/android/microdroid/test/MicrodroidDeviceTestBase.java b/tests/helper/src/java/com/android/microdroid/test/MicrodroidDeviceTestBase.java
index 1a573bb..a80111f 100644
--- a/tests/helper/src/java/com/android/microdroid/test/MicrodroidDeviceTestBase.java
+++ b/tests/helper/src/java/com/android/microdroid/test/MicrodroidDeviceTestBase.java
@@ -118,7 +118,7 @@
         mInner = new Inner(context, protectedVm, VirtualMachineManager.getInstance(context));
     }
 
-    protected abstract static class VmEventListener implements VirtualMachineCallback {
+    public abstract static class VmEventListener implements VirtualMachineCallback {
         private ExecutorService mExecutorService = Executors.newSingleThreadExecutor();
         private OptionalLong mVcpuStartedNanoTime = OptionalLong.empty();
         private OptionalLong mKernelStartedNanoTime = OptionalLong.empty();
diff --git a/virtualizationservice/Android.bp b/virtualizationservice/Android.bp
index b31d4a2..b6b7b09 100644
--- a/virtualizationservice/Android.bp
+++ b/virtualizationservice/Android.bp
@@ -6,7 +6,7 @@
     name: "virtualizationservice_defaults",
     crate_name: "virtualizationservice",
     srcs: ["src/main.rs"],
-    edition: "2018",
+    edition: "2021",
     // Only build on targets which crosvm builds on.
     enabled: false,
     target: {
diff --git a/vm/Android.bp b/vm/Android.bp
index 2e914c4..eac640e 100644
--- a/vm/Android.bp
+++ b/vm/Android.bp
@@ -6,7 +6,7 @@
     name: "vm",
     crate_name: "vm",
     srcs: ["src/main.rs"],
-    edition: "2018",
+    edition: "2021",
     prefer_rlib: true,
     rustlibs: [
         "android.system.virtualizationservice-rust",
diff --git a/vmbase/Android.bp b/vmbase/Android.bp
index fb7f6a6..ab87053 100644
--- a/vmbase/Android.bp
+++ b/vmbase/Android.bp
@@ -4,6 +4,7 @@
 
 rust_defaults {
     name: "vmbase_rust_defaults",
+    edition: "2021",
     host_supported: false,
     enabled: false,
     target: {
@@ -55,7 +56,6 @@
     defaults: ["vmbase_rust_defaults"],
     crate_name: "vmbase",
     srcs: ["src/lib.rs"],
-    edition: "2021",
     rustlibs: [
         "liblog_rust_nostd",
         "libpsci",
diff --git a/zipfuse/Android.bp b/zipfuse/Android.bp
index e10fc31..3aba94a 100644
--- a/zipfuse/Android.bp
+++ b/zipfuse/Android.bp
@@ -6,7 +6,7 @@
     name: "zipfuse.defaults",
     crate_name: "zipfuse",
     srcs: ["src/main.rs"],
-    edition: "2018",
+    edition: "2021",
     prefer_rlib: true,
     rustlibs: [
         "libanyhow",