diff --git a/build/aidl_interface.go b/build/aidl_interface.go
index 96b3f45..3634931 100644
--- a/build/aidl_interface.go
+++ b/build/aidl_interface.go
@@ -19,7 +19,6 @@
 	"android/soong/bazel"
 	"android/soong/cc"
 	"android/soong/java"
-	"android/soong/phony"
 	"android/soong/rust"
 	"android/soong/ui/metrics/bp2build_metrics_proto"
 
@@ -976,6 +975,8 @@
 	// checked in modules in mixed builds
 	if b, ok := mctx.Module().(android.Bazelable); ok {
 		bp2build = b.ShouldConvertWithBp2build(mctx)
+	} else {
+		panic(fmt.Errorf("aidlInterface must support Bazelable"))
 	}
 
 	for lang, shouldGenerate := range shouldGenerateLangBackendMap {
@@ -1005,14 +1006,33 @@
 		addApiModule(mctx, i)
 	}
 
-	// Reserve this module name for future use
-	mctx.CreateModule(phony.PhonyFactory, &phonyProperties{
+	// Reserve this module name for future use, and make it responsible for
+	// generating a Bazel definition.
+	factoryFunc := func() android.Module {
+		result := &phonyAidlInterface{
+			origin: i,
+		}
+		android.InitAndroidModule(result)
+		android.InitBazelModule(result)
+		return result
+	}
+	mctx.CreateModule(factoryFunc, &phonyProperties{
 		Name: proptools.StringPtr(i.ModuleBase.Name()),
 	})
 
 	i.internalModuleNames = libs
 }
 
+func (p *phonyAidlInterface) GenerateAndroidBuildActions(_ android.ModuleContext) {
+	// No-op.
+}
+
+type phonyAidlInterface struct {
+	android.ModuleBase
+	android.BazelModuleBase
+	origin *aidlInterface
+}
+
 func (i *aidlInterface) commonBackendProperties(lang string) CommonBackendProperties {
 	switch lang {
 	case langCpp:
@@ -1132,8 +1152,11 @@
 	i := &aidlInterface{}
 	i.AddProperties(&i.properties)
 	android.InitAndroidModule(i)
-	android.InitBazelModule(i)
 	android.InitDefaultableModule(i)
+	android.InitBazelModule(i)
+	android.AddBazelHandcraftedHook(i, func(ctx android.LoadHookContext) string {
+		return strings.TrimSuffix(i.Name(), "_interface")
+	})
 	i.SetDefaultableHook(func(ctx android.DefaultableHookContext) { aidlInterfaceHook(ctx, i) })
 	return i
 }
@@ -1224,7 +1247,14 @@
 	return bazelLabels
 }
 
-func (i *aidlInterface) ConvertWithBp2build(ctx android.Bp2buildMutatorContext) {
+func (p *aidlInterface) ConvertWithBp2build(_ android.Bp2buildMutatorContext) {
+	// aidlInterface should have a label set by its load hook; modules it creates
+	// are responsible for generating the actual definition.
+	panic("aidlInterface should always appear to have an existing label")
+}
+
+func (p *phonyAidlInterface) ConvertWithBp2build(ctx android.Bp2buildMutatorContext) {
+	i := p.origin
 	var javaConfig *javaConfigAttributes
 	var cppConfig *cppConfigAttributes
 	var ndkConfig *ndkConfigAttributes
diff --git a/build/aidl_interface_bp2build_test.go b/build/aidl_interface_bp2build_test.go
index b58b9d7..ac4be1c 100644
--- a/build/aidl_interface_bp2build_test.go
+++ b/build/aidl_interface_bp2build_test.go
@@ -11,13 +11,16 @@
 
 func runAidlInterfaceTestCase(t *testing.T, tc bp2build.Bp2buildTestCase) {
 	t.Helper()
-	bp2build.RunBp2BuildTestCase(
+	bp2build.RunBp2BuildTestCaseExtraContext(
 		t,
 		func(ctx android.RegistrationContext) {
 			ctx.RegisterModuleType("aidl_interface", AidlInterfaceFactory)
 			ctx.RegisterModuleType("aidl_library", aidl_library.AidlLibraryFactory)
 			ctx.RegisterModuleType("cc_library_shared", cc.LibrarySharedFactory)
 		},
+		func(ctx *android.TestContext) {
+			ctx.PreArchBp2BuildMutators(registerPreArchMutators)
+		},
 		tc,
 	)
 }
@@ -51,6 +54,7 @@
 					"3",
 				],
 			}`,
+		ExpectedConvertedModules: []string{"aidl-interface1", "aidl-interface-headers", "aidl-interface-import"},
 		ExpectedBazelTargets: []string{
 			bp2build.MakeBazelTargetNoRestrictions("aidl_library", "aidl-interface-headers", bp2build.AttrNameToString{
 				"tags": `["apex_available=//apex_available:anyapex"]`,
@@ -168,9 +172,9 @@
 	})
 }
 
-func TestAidlInterfaceWithLatestImport(t *testing.T) {
+func TestAidlInterfaceWithVersionImport(t *testing.T) {
 	runAidlInterfaceTestCase(t, bp2build.Bp2buildTestCase{
-		Description: `aidl_interface with single "latest" aidl_interface import`,
+		Description: `aidl_interface with version aidl_interface import`,
 		Blueprint: `
 			aidl_interface {
 				name: "aidl-interface-import",
@@ -182,7 +186,7 @@
 			aidl_interface {
 				name: "aidl-interface1",
 				imports: [
-					"aidl-interface-import",
+					"aidl-interface-import-V1",
 				],
 				versions: [
 					"1",
@@ -190,6 +194,8 @@
 					"3",
 				],
 			}`,
+		ExpectedConvertedModules:   []string{"aidl-interface-import", "aidl-interface1"},
+		ExpectedHandcraftedModules: []string{"aidl-interface1_interface"},
 		ExpectedBazelTargets: []string{
 			bp2build.MakeBazelTargetNoRestrictions("aidl_interface", "aidl-interface-import", bp2build.AttrNameToString{
 				"java_config": `{
@@ -222,15 +228,15 @@
     }`,
 				"versions_with_info": `[
         {
-        "deps": [":aidl-interface-import-latest"],
+        "deps": [":aidl-interface-import-V1"],
         "version": "1",
     },
         {
-        "deps": [":aidl-interface-import-latest"],
+        "deps": [":aidl-interface-import-V1"],
         "version": "2",
     },
         {
-        "deps": [":aidl-interface-import-latest"],
+        "deps": [":aidl-interface-import-V1"],
         "version": "3",
     },
     ]`,
@@ -498,3 +504,58 @@
 		},
 	})
 }
+
+func TestAidlInterfaceWithCppBackend(t *testing.T) {
+	runAidlInterfaceTestCase(t, bp2build.Bp2buildTestCase{
+		Description: `aidl_interface apex_available`,
+		Blueprint: `
+			cc_library_shared {
+				name: "shared_dep",
+				bazel_module: {bp2build_available: false},
+			}
+			cc_library_shared {
+				name: "shared_stub_dep",
+				stubs: {
+				    symbol_file: "libnativewindow.map.txt",
+				    versions: ["29"],
+				},
+				bazel_module: {bp2build_available: false},
+			}
+			aidl_interface {
+				name: "aidl-interface1",
+				srcs: [
+					"IFoo.aidl",
+				],
+				backend: {
+					java: {
+						enabled: false,
+					},
+					cpp: {
+						enabled: true,
+						apex_available: ["com.android.myapex"],
+						additional_shared_libraries: [
+							"shared_dep",
+							"shared_stub_dep",
+						],
+					},
+					ndk: {
+						enabled: false,
+					},
+				}
+			}`,
+		ExpectedHandcraftedModules: []string{"aidl-interface1_interface", "aidl-interface1-V1-cpp"},
+		ExpectedBazelTargets: []string{
+			bp2build.MakeBazelTargetNoRestrictions("aidl_interface", "aidl-interface1", bp2build.AttrNameToString{
+				"cpp_config": `{
+        "additional_dynamic_deps": [":shared_dep"] + select({
+            "//build/bazel/rules/apex:com.android.myapex": ["@api_surfaces//module-libapi/current:shared_stub_dep"],
+            "//conditions:default": [":shared_stub_dep"],
+        }),
+        "enabled": True,
+        "tags": ["apex_available=com.android.myapex"],
+    }`,
+				"srcs": `["IFoo.aidl"]`,
+			}),
+		},
+	})
+}
