diff --git a/sdk/java_sdk_test.go b/sdk/java_sdk_test.go
index 9d0c3de..f33aa26 100644
--- a/sdk/java_sdk_test.go
+++ b/sdk/java_sdk_test.go
@@ -651,7 +651,19 @@
 }
 
 func TestSnapshotWithJavaSystemModules(t *testing.T) {
-	result := android.GroupFixturePreparers(prepareForSdkTestWithJavaSdkLibrary).RunTestWithBp(t, `
+	result := android.GroupFixturePreparers(
+		prepareForSdkTestWithJava,
+		java.PrepareForTestWithJavaDefaultModules,
+		java.PrepareForTestWithJavaSdkLibraryFiles,
+		java.FixtureWithPrebuiltApisAndExtensions(map[string][]string{
+			"31":      {"myjavalib"},
+			"32":      {"myjavalib"},
+			"current": {"myjavalib"},
+		}, map[string][]string{
+			"1": {"myjavalib"},
+			"2": {"myjavalib"},
+		}),
+	).RunTestWithBp(t, `
 		sdk {
 			name: "mysdk",
 			java_header_libs: ["exported-system-module"],
@@ -796,7 +808,7 @@
 .intermediates/myjavalib.stubs.source/android_common/metalava/myjavalib.stubs.source_api.txt -> sdk_library/public/myjavalib.txt
 .intermediates/myjavalib.stubs.source/android_common/metalava/myjavalib.stubs.source_removed.txt -> sdk_library/public/myjavalib-removed.txt
 `),
-		checkInfoContents(`
+		checkInfoContents(result.Config, `
 [
   {
     "@type": "sdk",
@@ -826,7 +838,16 @@
   },
   {
     "@type": "java_sdk_library",
-    "@name": "myjavalib"
+    "@name": "myjavalib",
+    "dist_stem": "myjavalib",
+    "scopes": {
+      "public": {
+        "current_api": "sdk_library/public/myjavalib.txt",
+        "latest_api": "out/soong/.intermediates/prebuilts/sdk/myjavalib.api.public.latest/gen/myjavalib.api.public.latest",
+        "latest_removed_api": "out/soong/.intermediates/prebuilts/sdk/myjavalib-removed.api.public.latest/gen/myjavalib-removed.api.public.latest",
+        "removed_api": "sdk_library/public/myjavalib-removed.txt"
+      }
+    }
   },
   {
     "@type": "java_library",
diff --git a/sdk/testing.go b/sdk/testing.go
index b0f5fdc..72344de 100644
--- a/sdk/testing.go
+++ b/sdk/testing.go
@@ -406,11 +406,11 @@
 // Check that the snapshot's info contents are ciorrect.
 //
 // Both the expected and actual string are both trimmed before comparing.
-func checkInfoContents(expected string) snapshotBuildInfoChecker {
+func checkInfoContents(config android.Config, expected string) snapshotBuildInfoChecker {
 	return func(info *snapshotBuildInfo) {
 		info.t.Helper()
 		android.AssertTrimmedStringEquals(info.t, "info contents do not match",
-			expected, info.infoContents)
+			expected, android.StringRelativeToTop(config, info.infoContents))
 	}
 }
 
diff --git a/sdk/update.go b/sdk/update.go
index 71bd042..e61ae0d 100644
--- a/sdk/update.go
+++ b/sdk/update.go
@@ -566,8 +566,9 @@
 	name string
 	// A list of additional dependencies of the module.
 	deps []string
-	// Additional dynamic properties.
-	dynamic map[string]interface{}
+	// Additional member specific properties.
+	// These will be added into the generated JSON alongside the above properties.
+	memberSpecific map[string]interface{}
 }
 
 func (m *moduleInfo) MarshalJSON() ([]byte, error) {
@@ -590,8 +591,8 @@
 	if m.deps != nil {
 		writeObjectPair("@deps", m.deps)
 	}
-	for _, k := range android.SortedStringKeys(m.dynamic) {
-		v := m.dynamic[k]
+	for _, k := range android.SortedStringKeys(m.memberSpecific) {
+		v := m.memberSpecific[k]
 		writeObjectPair(k, v)
 	}
 	buffer.WriteString("}")
@@ -604,9 +605,9 @@
 func (s *sdk) generateInfoData(ctx android.ModuleContext, memberVariantDeps []sdkMemberVariantDep) interface{} {
 	modules := []*moduleInfo{}
 	sdkInfo := moduleInfo{
-		moduleType: "sdk",
-		name:       ctx.ModuleName(),
-		dynamic:    map[string]interface{}{},
+		moduleType:     "sdk",
+		name:           ctx.ModuleName(),
+		memberSpecific: map[string]interface{}{},
 	}
 	modules = append(modules, &sdkInfo)
 
@@ -622,6 +623,10 @@
 				moduleType: moduleType,
 				name:       name,
 			}
+
+			additionalSdkInfo := ctx.OtherModuleProvider(module, android.AdditionalSdkInfoProvider).(android.AdditionalSdkInfo)
+			info.memberSpecific = additionalSdkInfo.Properties
+
 			name2Info[name] = info
 		}
 		return info
@@ -630,13 +635,13 @@
 	for _, memberVariantDep := range memberVariantDeps {
 		propertyName := memberVariantDep.memberType.SdkPropertyName()
 		var list []string
-		if v, ok := sdkInfo.dynamic[propertyName]; ok {
+		if v, ok := sdkInfo.memberSpecific[propertyName]; ok {
 			list = v.([]string)
 		}
 
 		memberName := memberVariantDep.variant.Name()
 		list = append(list, memberName)
-		sdkInfo.dynamic[propertyName] = android.SortedUniqueStrings(list)
+		sdkInfo.memberSpecific[propertyName] = android.SortedUniqueStrings(list)
 
 		if memberVariantDep.container != nil {
 			containerInfo := getModuleInfo(memberVariantDep.container)
@@ -1217,6 +1222,7 @@
 	// The target build release for which the snapshot is to be generated.
 	targetBuildRelease *buildRelease
 
+	// The contents of the .info file that describes the sdk contents.
 	infoContents string
 }
 
