diff --git a/apkdmverity/Android.bp b/apkdmverity/Android.bp
index 92b23a7..fae7e99 100644
--- a/apkdmverity/Android.bp
+++ b/apkdmverity/Android.bp
@@ -38,7 +38,10 @@
 
 rust_test {
     name: "apkdmverity.test",
-    defaults: ["apkdmverity.defaults"],
+    defaults: [
+        "apkdmverity.defaults",
+        "ignorabletest.defaults",
+    ],
     test_suites: ["general-tests"],
     compile_multilib: "first",
     rustlibs: [
diff --git a/apkdmverity/src/main.rs b/apkdmverity/src/main.rs
index b9b88d4..506af48 100644
--- a/apkdmverity/src/main.rs
+++ b/apkdmverity/src/main.rs
@@ -21,6 +21,8 @@
 //! system managed by the host Android which is assumed to be compromisable, it is important to
 //! keep the integrity of the file "inside" Microdroid.
 
+#![cfg_attr(test, allow(unused))]
+
 use anyhow::{bail, Context, Result};
 use apkverify::{HashAlgorithm, V4Signature};
 use clap::{arg, Arg, ArgAction, Command};
@@ -33,6 +35,7 @@
 use std::os::unix::fs::FileTypeExt;
 use std::path::{Path, PathBuf};
 
+#[cfg(not(test))]
 fn main() -> Result<()> {
     let matches = clap_command().get_matches();
 
@@ -150,12 +153,28 @@
 }
 
 #[cfg(test)]
+ignorabletest::test_main!(tests::all_tests());
+
+#[cfg(test)]
 mod tests {
     use crate::*;
+    use ignorabletest::{list_tests, test};
     use std::fs::{File, OpenOptions};
     use std::io::Write;
+    use std::ops::Deref;
     use std::os::unix::fs::FileExt;
 
+    list_tests! {all_tests: [
+        correct_inputs,
+        incorrect_apk,
+        incorrect_merkle_tree,
+        tampered_apk,
+        tampered_idsig,
+        inputs_are_block_devices,
+        correct_custom_roothash,
+        verify_command,
+    ]}
+
     struct TestContext<'a> {
         data_backing_file: &'a Path,
         hash_backing_file: &'a Path,
@@ -202,9 +221,6 @@
         roothash: Option<&[u8]>,
         check: fn(TestContext),
     ) {
-        if should_skip() {
-            return;
-        }
         let test_dir = tempfile::TempDir::new().unwrap();
         let (apk_path, idsig_path) = prepare_inputs(test_dir.path(), apk, idsig);
 
@@ -224,7 +240,7 @@
         });
     }
 
-    #[test]
+    test!(correct_inputs, ignore_if: should_skip());
     fn correct_inputs() {
         let apk = include_bytes!("../testdata/test.apk");
         let idsig = include_bytes!("../testdata/test.apk.idsig");
@@ -237,7 +253,7 @@
     }
 
     // A single byte change in the APK file causes an IO error
-    #[test]
+    test!(incorrect_apk, ignore_if: should_skip());
     fn incorrect_apk() {
         let apk = include_bytes!("../testdata/test.apk");
         let idsig = include_bytes!("../testdata/test.apk.idsig");
@@ -254,7 +270,7 @@
     }
 
     // A single byte change in the merkle tree also causes an IO error
-    #[test]
+    test!(incorrect_merkle_tree, ignore_if: should_skip());
     fn incorrect_merkle_tree() {
         let apk = include_bytes!("../testdata/test.apk");
         let idsig = include_bytes!("../testdata/test.apk.idsig");
@@ -278,7 +294,7 @@
     // APK is not altered when the verity device is created, but later modified. IO error should
     // occur when trying to read the data around the modified location. This is the main scenario
     // that we'd like to protect.
-    #[test]
+    test!(tampered_apk, ignore_if: should_skip());
     fn tampered_apk() {
         let apk = include_bytes!("../testdata/test.apk");
         let idsig = include_bytes!("../testdata/test.apk.idsig");
@@ -299,7 +315,7 @@
 
     // idsig file is not alread when the verity device is created, but later modified. Unlike to
     // the APK case, this doesn't occur IO error because the merkle tree is already cached.
-    #[test]
+    test!(tampered_idsig, ignore_if: should_skip());
     fn tampered_idsig() {
         let apk = include_bytes!("../testdata/test.apk");
         let idsig = include_bytes!("../testdata/test.apk.idsig");
@@ -316,13 +332,8 @@
     }
 
     // test if both files are already block devices
-    #[test]
+    test!(inputs_are_block_devices, ignore_if: should_skip());
     fn inputs_are_block_devices() {
-        if should_skip() {
-            return;
-        }
-
-        use std::ops::Deref;
         let apk = include_bytes!("../testdata/test.apk");
         let idsig = include_bytes!("../testdata/test.apk.idsig");
 
@@ -371,7 +382,7 @@
     }
 
     // test with custom roothash
-    #[test]
+    test!(correct_custom_roothash, ignore_if: should_skip());
     fn correct_custom_roothash() {
         let apk = include_bytes!("../testdata/test.apk");
         let idsig = include_bytes!("../testdata/test.apk.idsig");
@@ -393,7 +404,7 @@
         );
     }
 
-    #[test]
+    test!(verify_command);
     fn verify_command() {
         // Check that the command parsing has been configured in a valid way.
         clap_command().debug_assert();
