Run zipfuse in microdroid
zipfuse now runs in microdroid as a service. The source zip file path
and the mount point are fixed to /dev/block/by-name/microdroid-apk and
/mnt/apk, respectively.
To support that, microdroid_payload.json is amended to add
MicrodroidTestAppk.apk to the payload.img file. This eventually should
be done dynamically by the virt manager.
Bug: 186377508
Test: atest MicrodroidHostTestCases
Change-Id: I7a031ad442995dbd3cdc00a51a0e939c1589a7b2
diff --git a/microdroid/init.rc b/microdroid/init.rc
index f9ed986..3c46501 100644
--- a/microdroid/init.rc
+++ b/microdroid/init.rc
@@ -37,6 +37,9 @@
# Generate linker config based on apex mounted in bootstrap namespace
update_linker_config
+ mkdir /mnt/apk 0755 system system
+ start zipfuse
+
on init
# Mount binderfs
mkdir /dev/binderfs
diff --git a/microdroid/microdroid_file_contexts b/microdroid/microdroid_file_contexts
index 6d36e7c..369c700 100644
--- a/microdroid/microdroid_file_contexts
+++ b/microdroid/microdroid_file_contexts
@@ -366,6 +366,7 @@
/system/bin/migrate_legacy_obb_data\.sh u:object_r:migrate_legacy_obb_data_exec:s0
/system/bin/android\.frameworks\.automotive\.display@1\.0-service u:object_r:automotive_display_service_exec:s0
/system/bin/snapuserd u:object_r:snapuserd_exec:s0
+/system/bin/zipfuse u:object_r:zipfuse_exec:s0
#############################
# Vendor files
diff --git a/microdroid/microdroid_payload.json b/microdroid/microdroid_payload.json
index c5c49d0..287aabd 100644
--- a/microdroid/microdroid_payload.json
+++ b/microdroid/microdroid_payload.json
@@ -2,5 +2,9 @@
"system_apexes": [
"com.android.adbd",
"com.android.sdkext"
- ]
-}
\ No newline at end of file
+ ],
+ "apk": {
+ "name": "com.android.microdroid.test",
+ "path": "/apex/com.android.virt/app/MicrodroidTestApp/MicrodroidTestApp.apk"
+ }
+}
diff --git a/tests/hostside/java/android/virt/test/MicrodroidTestCase.java b/tests/hostside/java/android/virt/test/MicrodroidTestCase.java
index 5958480..9419541 100644
--- a/tests/hostside/java/android/virt/test/MicrodroidTestCase.java
+++ b/tests/hostside/java/android/virt/test/MicrodroidTestCase.java
@@ -16,6 +16,7 @@
package android.virt.test;
+import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.not;
import static org.junit.Assert.assertThat;
@@ -170,8 +171,16 @@
is("MicrodroidTest"));
assertThat(
- executeCommandOnMicrodroid("shell ls /system/bin/zipfuse"),
- is("/system/bin/zipfuse"));
+ executeCommandOnMicrodroid("shell ls /dev/block/by-name/microdroid-apk"),
+ is("/dev/block/by-name/microdroid-apk"));
+
+ assertThat(
+ executeCommandOnMicrodroid("shell mount"),
+ containsString("zipfuse on /mnt/apk type fuse.zipfuse"));
+
+ assertThat(
+ executeCommandOnMicrodroid("shell ls /mnt/apk/classes.dex"),
+ is("/mnt/apk/classes.dex"));
// Shutdown microdroid
executeCommand("adb -s localhost:" + TEST_VM_ADB_PORT + " shell reboot");
diff --git a/zipfuse/Android.bp b/zipfuse/Android.bp
index 845508c..24cfaa0 100644
--- a/zipfuse/Android.bp
+++ b/zipfuse/Android.bp
@@ -26,6 +26,7 @@
rust_binary {
name: "zipfuse",
defaults: ["zipfuse.defaults"],
+ init_rc: ["zipfuse.rc"],
}
rust_test {
diff --git a/zipfuse/zipfuse.rc b/zipfuse/zipfuse.rc
new file mode 100644
index 0000000..97306ea
--- /dev/null
+++ b/zipfuse/zipfuse.rc
@@ -0,0 +1,2 @@
+service zipfuse /system/bin/zipfuse /dev/block/by-name/microdroid-apk /mnt/apk
+ disabled