Add S extensions

Update the tests to ensure it is set on S+ but not otherwise.

Note that the implementation of how the version is derived is still a
placeholder (see b/173188089 for plans).

Bug: 173114427
Test: presubmit (SdkExtensionsTest on R and HEAD)
Merged-In: Ifc46e785a005e12cacb7ad86e8c7798e1d00b37f
Change-Id: Ifc46e785a005e12cacb7ad86e8c7798e1d00b37f
diff --git a/derive_sdk/derive_sdk.cpp b/derive_sdk/derive_sdk.cpp
index d8ab519..89c9adf 100644
--- a/derive_sdk/derive_sdk.cpp
+++ b/derive_sdk/derive_sdk.cpp
@@ -25,6 +25,7 @@
 #include <android-base/file.h>
 #include <android-base/logging.h>
 #include <android-base/properties.h>
+#include <android-modules-utils/sdk_level.h>
 
 #include "packages/modules/SdkExtensions/derive_sdk/sdk.pb.h"
 
@@ -70,10 +71,16 @@
     std::string prop_value = itr == versions.end() ? "0" : std::to_string(*itr);
 
     if (!android::base::SetProperty("build.version.extensions.r", prop_value)) {
-        LOG(ERROR) << "failed to set sdk_info prop";
+        LOG(ERROR) << "failed to set r sdk_info prop";
         return EXIT_FAILURE;
     }
+    if (android::modules::sdklevel::IsAtLeastS()) {
+        if (!android::base::SetProperty("build.version.extensions.s", prop_value)) {
+            LOG(ERROR) << "failed to set s sdk_info prop";
+            return EXIT_FAILURE;
+        }
+    }
 
-    LOG(INFO) << "R extension version is " << prop_value;
+    LOG(INFO) << "Extension version is " << prop_value;
     return EXIT_SUCCESS;
 }