diff --git a/apex/Android.bp b/apex/Android.bp
index 61d7fb2..0791497 100644
--- a/apex/Android.bp
+++ b/apex/Android.bp
@@ -29,7 +29,6 @@
         "bp2build.go",
         "deapexer.go",
         "key.go",
-        "metadata.go",
         "prebuilt.go",
         "testing.go",
         "vndk.go",
@@ -39,7 +38,6 @@
         "bootclasspath_fragment_test.go",
         "classpath_element_test.go",
         "dexpreopt_bootjars_test.go",
-        "metadata_test.go",
         "platform_bootclasspath_test.go",
         "systemserver_classpath_fragment_test.go",
         "vndk_test.go",
diff --git a/apex/metadata.go b/apex/metadata.go
deleted file mode 100644
index b1dff3e..0000000
--- a/apex/metadata.go
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package apex
-
-import (
-	"encoding/json"
-
-	"github.com/google/blueprint"
-
-	"android/soong/android"
-)
-
-var (
-	mtctx = android.NewPackageContext("android/soong/multitree_apex")
-)
-
-func init() {
-	RegisterModulesSingleton(android.InitRegistrationContext)
-}
-
-func RegisterModulesSingleton(ctx android.RegistrationContext) {
-	ctx.RegisterSingletonType("apex_multitree_singleton", multitreeAnalysisSingletonFactory)
-}
-
-var PrepareForTestWithApexMultitreeSingleton = android.FixtureRegisterWithContext(RegisterModulesSingleton)
-
-func multitreeAnalysisSingletonFactory() android.Singleton {
-	return &multitreeAnalysisSingleton{}
-}
-
-type multitreeAnalysisSingleton struct {
-	multitreeApexMetadataPath android.OutputPath
-}
-
-type ApexMultitreeMetadataEntry struct {
-	// The name of the apex.
-	Name string
-
-	// TODO: Add other properties as needed.
-}
-
-type ApexMultitreeMetadata struct {
-	// Information about the installable apexes.
-	Apexes map[string]ApexMultitreeMetadataEntry
-}
-
-func (p *multitreeAnalysisSingleton) GenerateBuildActions(context android.SingletonContext) {
-	data := ApexMultitreeMetadata{
-		Apexes: make(map[string]ApexMultitreeMetadataEntry, 0),
-	}
-	context.VisitAllModules(func(module android.Module) {
-		// If this module is not being installed, ignore it.
-		if !module.Enabled() || module.IsSkipInstall() {
-			return
-		}
-		// Actual apexes provide ApexBundleInfoProvider.
-		if _, ok := context.ModuleProvider(module, ApexBundleInfoProvider).(ApexBundleInfo); !ok {
-			return
-		}
-		bundle, ok := module.(*apexBundle)
-		if ok && !bundle.testApex && !bundle.vndkApex && bundle.primaryApexType {
-			name := module.Name()
-			entry := ApexMultitreeMetadataEntry{
-				Name: name,
-			}
-			data.Apexes[name] = entry
-		}
-	})
-	p.multitreeApexMetadataPath = android.PathForOutput(context, "multitree_apex_metadata.json")
-
-	jsonStr, err := json.Marshal(data)
-	if err != nil {
-		context.Errorf(err.Error())
-	}
-	android.WriteFileRule(context, p.multitreeApexMetadataPath, string(jsonStr))
-	// This seems cleaner, but doesn't emit the phony rule in testing.
-	// context.Phony("multitree_apex_metadata", p.multitreeApexMetadataPath)
-
-	context.Build(mtctx, android.BuildParams{
-		Rule:        blueprint.Phony,
-		Description: "phony rule for multitree_apex_metadata",
-		Inputs:      []android.Path{p.multitreeApexMetadataPath},
-		Output:      android.PathForPhony(context, "multitree_apex_metadata"),
-	})
-}
diff --git a/apex/metadata_test.go b/apex/metadata_test.go
deleted file mode 100644
index fed5bea..0000000
--- a/apex/metadata_test.go
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package apex
-
-import (
-	"strings"
-	"testing"
-
-	"android/soong/android"
-	"android/soong/java"
-)
-
-func TestModulesSingleton(t *testing.T) {
-	result := android.GroupFixturePreparers(
-		PrepareForTestWithApexMultitreeSingleton,
-		java.PrepareForTestWithJavaDefaultModules,
-		PrepareForTestWithApexBuildComponents,
-		java.FixtureConfigureApexBootJars("myapex:foo"),
-		java.PrepareForTestWithJavaSdkLibraryFiles,
-	).RunTestWithBp(t, `
-		prebuilt_apex {
-			name: "myapex",
-			src: "myapex.apex",
-			exported_bootclasspath_fragments: ["mybootclasspath-fragment"],
-		}
-
-		// A prebuilt java_sdk_library_import that is not preferred by default but will be preferred
-		// because AlwaysUsePrebuiltSdks() is true.
-		java_sdk_library_import {
-			name: "foo",
-			prefer: false,
-			shared_library: false,
-			permitted_packages: ["foo"],
-			public: {
-				jars: ["sdk_library/public/foo-stubs.jar"],
-				stub_srcs: ["sdk_library/public/foo_stub_sources"],
-				current_api: "sdk_library/public/foo.txt",
-				removed_api: "sdk_library/public/foo-removed.txt",
-				sdk_version: "current",
-			},
-			apex_available: ["myapex"],
-		}
-
-		prebuilt_bootclasspath_fragment {
-			name: "mybootclasspath-fragment",
-			apex_available: [
-				"myapex",
-			],
-			contents: [
-				"foo",
-			],
-			hidden_api: {
-				stub_flags: "prebuilt-stub-flags.csv",
-				annotation_flags: "prebuilt-annotation-flags.csv",
-				metadata: "prebuilt-metadata.csv",
-				index: "prebuilt-index.csv",
-				all_flags: "prebuilt-all-flags.csv",
-			},
-		}
-
-		platform_bootclasspath {
-			name: "myplatform-bootclasspath",
-			fragments: [
-				{
-					apex: "myapex",
-					module:"mybootclasspath-fragment",
-				},
-			],
-		}
-`,
-	)
-
-	outputs := result.SingletonForTests("apex_multitree_singleton").AllOutputs()
-	for _, output := range outputs {
-		testingBuildParam := result.SingletonForTests("apex_multitree_singleton").Output(output)
-		switch {
-		case strings.Contains(output, "soong/multitree_apex_metadata.json"):
-			android.AssertStringEquals(t, "Invalid build rule", "android/soong/android.writeFile", testingBuildParam.Rule.String())
-			android.AssertIntEquals(t, "Invalid input", len(testingBuildParam.Inputs), 0)
-			android.AssertStringDoesContain(t, "Invalid output path", output, "soong/multitree_apex_metadata.json")
-
-		case strings.HasSuffix(output, "multitree_apex_metadata"):
-			android.AssertStringEquals(t, "Invalid build rule", "<builtin>:phony", testingBuildParam.Rule.String())
-			android.AssertStringEquals(t, "Invalid input", testingBuildParam.Inputs[0].String(), "out/soong/multitree_apex_metadata.json")
-			android.AssertStringEquals(t, "Invalid output path", output, "multitree_apex_metadata")
-			android.AssertIntEquals(t, "Invalid args", len(testingBuildParam.Args), 0)
-		}
-	}
-}
