Refactor derive_sdk to be more testable

Refactor the code into a reusable library that is used from the
derive_sdk binary as well as a newly added cc_test.

The code now accepts an argument for which dir to scan for mounted
modules.

Add a simple test for the current system image R SDK version for now.

Bug: 173188089
Test: atest derive_sdk_test
Change-Id: If7442d515d55b35174d396cc579ee2c9865da2b5
diff --git a/derive_sdk/Android.bp b/derive_sdk/Android.bp
index 3e030e8..dc4e352 100644
--- a/derive_sdk/Android.bp
+++ b/derive_sdk/Android.bp
@@ -14,10 +14,6 @@
 
 cc_defaults {
     name: "derive_sdk-defaults",
-    srcs: [
-        "derive_sdk.cpp",
-        "sdk.proto",
-    ],
     proto: {
         type: "lite",
         static: true,
@@ -29,26 +25,56 @@
     static_libs: [
         "libbase",
         "libmodules-utils-build",
+        "libprotobuf-cpp-lite",
     ],
 }
 
+cc_library {
+    name: "libderive_sdk",
+    srcs: [
+        "derive_sdk.cpp",
+        "sdk.proto",
+    ],
+    defaults: ["derive_sdk-defaults"],
+    apex_available: ["com.android.sdkext"],
+}
+
+cc_defaults {
+    name: "derive_sdk_binary-defaults",
+    defaults: ["derive_sdk-defaults"],
+    srcs: ["main.cpp"],
+    static_libs: ["libderive_sdk"],
+
+}
 cc_binary {
     name: "derive_sdk",
-    defaults: [ "derive_sdk-defaults" ],
-    apex_available: [ "com.android.sdkext" ],
+    defaults: ["derive_sdk_binary-defaults"],
+    apex_available: ["com.android.sdkext"],
 }
 
 // Work around testing using a 64-bit test suite on 32-bit test device by
 // using a prefer32 version of derive_sdk in testing.
 cc_binary {
     name: "derive_sdk_prefer32",
-    defaults: [ "derive_sdk-defaults" ],
+    defaults: ["derive_sdk_binary-defaults"],
     compile_multilib: "prefer32",
     stem: "derive_sdk",
-    apex_available: [ "test_com.android.sdkext" ],
+    apex_available: ["test_com.android.sdkext"],
     installable: false,
 }
 
+cc_test {
+    name: "derive_sdk_test",
+    defaults: ["derive_sdk-defaults"],
+    srcs: [
+        "derive_sdk_test.cpp",
+        "sdk.proto",
+    ],
+    require_root: true,
+    static_libs: ["libderive_sdk"],
+    test_suites: ["device-tests"],
+}
+
 prebuilt_etc {
     name: "derive_sdk.rc",
     src: "derive_sdk.rc",