diff --git a/android/allowlists/allowlists.go b/android/allowlists/allowlists.go index 33209c397..d7e598b9e 100644 --- a/android/allowlists/allowlists.go +++ b/android/allowlists/allowlists.go @@ -408,8 +408,6 @@ var ( // this BUILD file is globbed by //external/icu/icu4c/source:icu4c_test_data's "data/**/*". "external/icu/icu4c/source/data/unidata/norm2":/* recursive = */ false, - "frameworks/ex/common":/* recursive = */ true, - // Building manually due to b/179889880: resource files cross package boundary "packages/apps/Music":/* recursive = */ true, @@ -690,7 +688,6 @@ var ( "libcodec2_soft_common", // kotlin srcs in java libs - "CtsPkgInstallerConstants", "kotlinx_atomicfu", // kotlin srcs in java binary @@ -703,6 +700,9 @@ var ( //kotlin srcs in android_binary "MusicKotlin", + // java_library with prebuilt sdk_version + "android-common", + // checked in current.txt for merged_txts "non-updatable-current.txt", "non-updatable-system-current.txt", @@ -725,7 +725,6 @@ var ( // min_sdk_version in android_app "CtsShimUpgrade", - "fake-framework", } Bp2buildModuleTypeAlwaysConvertList = []string{ @@ -779,7 +778,8 @@ var ( "tjbench", // TODO(b/240563612): Stem property // java bugs - "libbase_ndk", // TODO(b/186826477): fails to link libctscamera2_jni for device (required for CtsCameraTestCases) + "libbase_ndk", // TODO(b/186826477): fails to link libctscamera2_jni for device (required for CtsCameraTestCases) + "bouncycastle", // TODO(b/274474005): Need support for custom system_modules. // python protos "libprotobuf-python", // Has a handcrafted alternative @@ -846,7 +846,6 @@ var ( "libgmock_ndk", // depends on unconverted modules: libgtest_ndk_c++ "libnativehelper_lazy_mts_jni", "libnativehelper_mts_jni", // depends on unconverted modules: libnativetesthelper_jni, libgmock_ndk "libnativetesthelper_jni", // depends on unconverted modules: libgtest_ndk_c++ - "libprotobuf-java-nano", // b/220869005, depends on non-public_current SDK "libstatslog", // depends on unconverted modules: libstatspull, statsd-aidl-ndk "libstatslog_art", // depends on unconverted modules: statslog_art.cpp, statslog_art.h "linker_reloc_bench_main", // depends on unconverted modules: liblinker_reloc_bench_* @@ -1396,6 +1395,16 @@ var ( // TODO(b/266459895): depends on libunwindstack "libutils_test", + + // TODO(b/274805756): Support core_platform and current java APIs + "fake-framework", + + // TODO(b/277616982): These modules depend on private java APIs, but maybe they don't need to. + "StreamingProtoTest", + "textclassifierprotoslite", + "styleprotoslite", + "CtsPkgInstallerConstants", + "guava-android-testlib", } MixedBuildsDisabledList = []string{ diff --git a/bp2build/aar_conversion_test.go b/bp2build/aar_conversion_test.go index 6020ee599..09d9dc103 100644 --- a/bp2build/aar_conversion_test.go +++ b/bp2build/aar_conversion_test.go @@ -66,9 +66,12 @@ android_library { "resource_files": `["res/res.png"]`, "deps": `[":static_lib_dep"]`, "exports": `[":static_lib_dep"]`, - "javacopts": `["-source 1.7 -target 1.7"]`, + "java_version": `"7"`, }), - MakeNeverlinkDuplicateTarget("android_library", "TestLib"), + MakeNeverlinkDuplicateTargetWithAttrs( + "android_library", + "TestLib", + AttrNameToString{"java_version": `"7"`}), }}) } diff --git a/bp2build/android_app_conversion_test.go b/bp2build/android_app_conversion_test.go index ef3f12472..928a1f2e1 100644 --- a/bp2build/android_app_conversion_test.go +++ b/bp2build/android_app_conversion_test.go @@ -53,6 +53,7 @@ android_app { "srcs": `["app.java"]`, "manifest": `"AndroidManifest.xml"`, "resource_files": `["res/res.png"]`, + "sdk_version": `"current"`, }), }}) } @@ -91,7 +92,8 @@ android_app { ]`, "custom_package": `"com.google"`, "deps": `[":static_lib_dep"]`, - "javacopts": `["-source 1.7 -target 1.7"]`, + "java_version": `"7"`, + "sdk_version": `"current"`, "certificate_name": `"foocert"`, }), }}) @@ -131,6 +133,7 @@ android_app { })`, "manifest": `"AndroidManifest.xml"`, "resource_files": `["res/res.png"]`, + "sdk_version": `"current"`, }), }}) } @@ -365,6 +368,7 @@ android_app { "manifest_values": `{ "minSdkVersion": "24", }`, + "sdk_version": `"current"`, }), }}) } @@ -388,6 +392,7 @@ android_app { "manifest_values": `{ "minSdkVersion": "30", }`, + "sdk_version": `"30"`, }), }}) } diff --git a/bp2build/java_binary_host_conversion_test.go b/bp2build/java_binary_host_conversion_test.go index 1b9777cae..c821f590e 100644 --- a/bp2build/java_binary_host_conversion_test.go +++ b/bp2build/java_binary_host_conversion_test.go @@ -57,24 +57,24 @@ func TestJavaBinaryHost(t *testing.T) { }`, ExpectedBazelTargets: []string{ MakeBazelTarget("java_library", "java-binary-host-1_lib", AttrNameToString{ - "srcs": `["a.java"]`, - "deps": `["//other:jni-lib-1"]`, - "javacopts": `[ - "-Xdoclint:all/protected", - "-source 1.8 -target 1.8", - ]`, + "srcs": `["a.java"]`, + "deps": `["//other:jni-lib-1"]`, + "java_version": `"8"`, + "javacopts": `["-Xdoclint:all/protected"]`, "target_compatible_with": `select({ "//build/bazel/platforms/os:android": ["@platforms//:incompatible"], "//conditions:default": [], - })`}), + })`, + }), MakeBazelTarget("java_binary", "java-binary-host-1", AttrNameToString{ - "main_class": `"com.android.test.MainClass"`, - "jvm_flags": `["-Djava.library.path=$${RUNPATH}other"]`, - "runtime_deps": `[":java-binary-host-1_lib"]`, + "main_class": `"com.android.test.MainClass"`, + "jvm_flags": `["-Djava.library.path=$${RUNPATH}other"]`, "target_compatible_with": `select({ "//build/bazel/platforms/os:android": ["@platforms//:incompatible"], "//conditions:default": [], - })`}), + })`, + "runtime_deps": `[":java-binary-host-1_lib"]`, + }), }, }) } diff --git a/bp2build/java_host_for_device_conversion_test.go b/bp2build/java_host_for_device_conversion_test.go index d908d0002..448cba461 100644 --- a/bp2build/java_host_for_device_conversion_test.go +++ b/bp2build/java_host_for_device_conversion_test.go @@ -51,9 +51,11 @@ java_library { }`, ExpectedBazelTargets: []string{ MakeBazelTarget("java_host_for_device", "java-lib-1", AttrNameToString{ - "deps": `[":java-lib-2"]`, + "exports": `[":java-lib-2"]`, + }), + MakeNeverlinkDuplicateTargetWithAttrs("java_library", "java-lib-1", AttrNameToString{ + "sdk_version": `"none"`, }), - MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"), MakeBazelTarget("java_library", "java-lib-2", AttrNameToString{ "srcs": `["b.java"]`, }), diff --git a/bp2build/java_import_conversion_test.go b/bp2build/java_import_conversion_test.go index a5c01cb4f..5661620e2 100644 --- a/bp2build/java_import_conversion_test.go +++ b/bp2build/java_import_conversion_test.go @@ -49,8 +49,9 @@ java_import { "jars": `["import.jar"]`, }), MakeBazelTarget("java_library", "example_import-neverlink", AttrNameToString{ - "exports": `[":example_import"]`, - "neverlink": `True`, + "exports": `[":example_import"]`, + "neverlink": `True`, + "sdk_version": `"none"`, }), }}) } @@ -86,8 +87,9 @@ java_import { })`, }), MakeBazelTarget("java_library", "example_import-neverlink", AttrNameToString{ - "exports": `[":example_import"]`, - "neverlink": `True`, + "exports": `[":example_import"]`, + "neverlink": `True`, + "sdk_version": `"none"`, }), }}) } @@ -112,8 +114,9 @@ java_import_host { "jars": `["import.jar"]`, }), MakeBazelTarget("java_library", "example_import-neverlink", AttrNameToString{ - "exports": `[":example_import"]`, - "neverlink": `True`, + "exports": `[":example_import"]`, + "neverlink": `True`, + "sdk_version": `"none"`, }), }}) } diff --git a/bp2build/java_library_conversion_test.go b/bp2build/java_library_conversion_test.go index 683ee27cc..24b763bcf 100644 --- a/bp2build/java_library_conversion_test.go +++ b/bp2build/java_library_conversion_test.go @@ -172,10 +172,13 @@ func TestJavaLibraryJavaVersion(t *testing.T) { }`, ExpectedBazelTargets: []string{ MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{ - "srcs": `["a.java"]`, - "javacopts": `["-source 11 -target 11"]`, + "srcs": `["a.java"]`, + "java_version": `"11"`, }), - MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"), + MakeNeverlinkDuplicateTargetWithAttrs( + "java_library", + "java-lib-1", + AttrNameToString{"java_version": `"11"`}), }, }) } diff --git a/bp2build/java_library_host_conversion_test.go b/bp2build/java_library_host_conversion_test.go index 14854c06a..9e47b0972 100644 --- a/bp2build/java_library_host_conversion_test.go +++ b/bp2build/java_library_host_conversion_test.go @@ -63,8 +63,8 @@ java_library_host { })`, }), MakeBazelTarget("java_library", "java-lib-host-2", AttrNameToString{ - "javacopts": `["-source 1.9 -target 1.9"]`, - "srcs": `["c.java"]`, + "java_version": `"9"`, + "srcs": `["c.java"]`, "target_compatible_with": `select({ "//build/bazel/platforms/os:android": ["@platforms//:incompatible"], "//conditions:default": [], @@ -77,6 +77,7 @@ java_library_host { "//build/bazel/platforms/os:android": ["@platforms//:incompatible"], "//conditions:default": [], })`, + "java_version": `"9"`, }), }, }) diff --git a/bp2build/java_plugin_conversion_test.go b/bp2build/java_plugin_conversion_test.go index 8c6337b49..f2b6f20a4 100644 --- a/bp2build/java_plugin_conversion_test.go +++ b/bp2build/java_plugin_conversion_test.go @@ -67,7 +67,7 @@ java_library { "a.java", "b.java", ]`, - "javacopts": `["-source 1.7 -target 1.7"]`, + "java_version": `"7"`, }), }, }) diff --git a/bp2build/java_proto_conversion_test.go b/bp2build/java_proto_conversion_test.go index d25b7c4ee..f546cf45d 100644 --- a/bp2build/java_proto_conversion_test.go +++ b/bp2build/java_proto_conversion_test.go @@ -114,13 +114,17 @@ func TestJavaProtoDefault(t *testing.T) { "java_lite_proto_library", "java-protos_java_proto_lite", AttrNameToString{ - "deps": `[":java-protos_proto"]`, + "deps": `[":java-protos_proto"]`, + "java_version": `"7"`, }), MakeBazelTarget("java_library", "java-protos", AttrNameToString{ - "exports": `[":java-protos_java_proto_lite"]`, - "javacopts": `["-source 1.7 -target 1.7"]`, + "exports": `[":java-protos_java_proto_lite"]`, + "java_version": `"7"`, }), - MakeNeverlinkDuplicateTarget("java_library", "java-protos"), + MakeNeverlinkDuplicateTargetWithAttrs( + "java_library", + "java-protos", + AttrNameToString{"java_version": `"7"`}), }, }) } diff --git a/bp2build/testing.go b/bp2build/testing.go index 856b6eed9..6e919db2b 100644 --- a/bp2build/testing.go +++ b/bp2build/testing.go @@ -642,10 +642,14 @@ func makeCcStubSuiteTargets(name string, attrs AttrNameToString) string { } func MakeNeverlinkDuplicateTarget(moduleType string, name string) string { - return MakeBazelTarget(moduleType, name+"-neverlink", AttrNameToString{ - "neverlink": `True`, - "exports": `[":` + name + `"]`, - }) + return MakeNeverlinkDuplicateTargetWithAttrs(moduleType, name, AttrNameToString{}) +} + +func MakeNeverlinkDuplicateTargetWithAttrs(moduleType string, name string, extraAttrs AttrNameToString) string { + attrs := extraAttrs + attrs["neverlink"] = `True` + attrs["exports"] = `[":` + name + `"]` + return MakeBazelTarget(moduleType, name+"-neverlink", attrs) } func getTargetName(targetContent string) string { diff --git a/java/aar.go b/java/aar.go index 47e6efae3..f1b137de1 100644 --- a/java/aar.go +++ b/java/aar.go @@ -1015,9 +1015,10 @@ type bazelAndroidLibrary struct { } type bazelAndroidLibraryImport struct { - Aar bazel.Label - Deps bazel.LabelListAttribute - Exports bazel.LabelListAttribute + Aar bazel.Label + Deps bazel.LabelListAttribute + Exports bazel.LabelListAttribute + Sdk_version bazel.StringAttribute } func (a *aapt) convertAaptAttrsWithBp2Build(ctx android.TopDownMutatorContext) *bazelAapt { @@ -1059,9 +1060,10 @@ func (a *AARImport) ConvertWithBp2build(ctx android.TopDownMutatorContext) { }, android.CommonAttributes{Name: name}, &bazelAndroidLibraryImport{ - Aar: aars.Includes[0], - Deps: bazel.MakeLabelListAttribute(deps), - Exports: bazel.MakeLabelListAttribute(exports), + Aar: aars.Includes[0], + Deps: bazel.MakeLabelListAttribute(deps), + Exports: bazel.MakeLabelListAttribute(exports), + Sdk_version: bazel.StringAttribute{Value: a.properties.Sdk_version}, }, ) @@ -1073,6 +1075,9 @@ func (a *AARImport) ConvertWithBp2build(ctx android.TopDownMutatorContext) { javaLibraryAttributes: &javaLibraryAttributes{ Neverlink: bazel.BoolAttribute{Value: &neverlink}, Exports: bazel.MakeSingleLabelListAttribute(bazel.Label{Label: ":" + name}), + javaCommonAttributes: &javaCommonAttributes{ + Sdk_version: bazel.StringAttribute{Value: a.properties.Sdk_version}, + }, }, }, ) @@ -1119,6 +1124,10 @@ func (a *AndroidLibrary) ConvertWithBp2build(ctx android.TopDownMutatorContext) javaLibraryAttributes: &javaLibraryAttributes{ Neverlink: bazel.BoolAttribute{Value: &neverlink}, Exports: bazel.MakeSingleLabelListAttribute(bazel.Label{Label: ":" + name}), + javaCommonAttributes: &javaCommonAttributes{ + Sdk_version: bazel.StringAttribute{Value: a.deviceProperties.Sdk_version}, + Java_version: bazel.StringAttribute{Value: a.properties.Java_version}, + }, }, }, ) diff --git a/java/app.go b/java/app.go index 52caf6d38..03e233059 100755 --- a/java/app.go +++ b/java/app.go @@ -1565,6 +1565,9 @@ func (a *AndroidApp) ConvertWithBp2build(ctx android.TopDownMutatorContext) { appAttrs.bazelAapt = &bazelAapt{Manifest: aapt.Manifest} appAttrs.Deps = bazel.MakeSingleLabelListAttribute(bazel.Label{Label: ":" + ktName}) + appAttrs.javaCommonAttributes = &javaCommonAttributes{ + Sdk_version: commonAttrs.Sdk_version, + } } ctx.CreateBazelTargetModule( diff --git a/java/device_host_converter.go b/java/device_host_converter.go index 656c866ed..3581040f8 100644 --- a/java/device_host_converter.go +++ b/java/device_host_converter.go @@ -21,6 +21,8 @@ import ( "android/soong/android" "android/soong/bazel" "android/soong/dexpreopt" + + "github.com/google/blueprint/proptools" ) type DeviceHostConverter struct { @@ -191,7 +193,7 @@ func (d *DeviceHostConverter) AndroidMk() android.AndroidMkData { } type bazelDeviceHostConverterAttributes struct { - Deps bazel.LabelListAttribute + Exports bazel.LabelListAttribute } func (d *DeviceHostConverter) ConvertWithBp2build(ctx android.TopDownMutatorContext) { @@ -202,13 +204,15 @@ func (d *DeviceHostConverter) ConvertWithBp2build(ctx android.TopDownMutatorCont }, android.CommonAttributes{Name: d.Name()}, &bazelDeviceHostConverterAttributes{ - Deps: bazel.MakeLabelListAttribute(android.BazelLabelForModuleDeps(ctx, d.properties.Libs)), + Exports: bazel.MakeLabelListAttribute(android.BazelLabelForModuleDeps(ctx, d.properties.Libs)), }, ) - neverlinkProp := true neverLinkAttrs := &javaLibraryAttributes{ Exports: bazel.MakeSingleLabelListAttribute(bazel.Label{Label: ":" + d.Name()}), - Neverlink: bazel.BoolAttribute{Value: &neverlinkProp}, + Neverlink: bazel.BoolAttribute{Value: proptools.BoolPtr(true)}, + javaCommonAttributes: &javaCommonAttributes{ + Sdk_version: bazel.StringAttribute{Value: proptools.StringPtr("none")}, + }, } ctx.CreateBazelTargetModule( javaLibraryBazelTargetModuleProperties(), diff --git a/java/java.go b/java/java.go index d400b0cfb..2de4ea97e 100644 --- a/java/java.go +++ b/java/java.go @@ -2740,9 +2740,11 @@ func (m *Library) convertJavaResourcesAttributes(ctx android.TopDownMutatorConte type javaCommonAttributes struct { *javaResourcesAttributes *kotlinAttributes - Srcs bazel.LabelListAttribute - Plugins bazel.LabelListAttribute - Javacopts bazel.StringListAttribute + Srcs bazel.LabelListAttribute + Plugins bazel.LabelListAttribute + Javacopts bazel.StringListAttribute + Sdk_version bazel.StringAttribute + Java_version bazel.StringAttribute } type javaDependencyLabels struct { @@ -2873,10 +2875,6 @@ func (m *Library) convertLibraryAttrsBp2Build(ctx android.TopDownMutatorContext) if m.properties.Javacflags != nil { javacopts = append(javacopts, m.properties.Javacflags...) } - if m.properties.Java_version != nil { - javaVersion := normalizeJavaVersion(ctx, *m.properties.Java_version).String() - javacopts = append(javacopts, fmt.Sprintf("-source %s -target %s", javaVersion, javaVersion)) - } epEnabled := m.properties.Errorprone.Enabled //TODO(b/227504307) add configuration that depends on RUN_ERROR_PRONE environment variable @@ -2890,7 +2888,9 @@ func (m *Library) convertLibraryAttrsBp2Build(ctx android.TopDownMutatorContext) Plugins: bazel.MakeLabelListAttribute( android.BazelLabelForModuleDeps(ctx, m.properties.Plugins), ), - Javacopts: bazel.MakeStringListAttribute(javacopts), + Javacopts: bazel.MakeStringListAttribute(javacopts), + Java_version: bazel.StringAttribute{Value: m.properties.Java_version}, + Sdk_version: bazel.StringAttribute{Value: m.deviceProperties.Sdk_version}, } for axis, configToProps := range archVariantProps { @@ -2981,19 +2981,9 @@ func javaLibraryBp2Build(ctx android.TopDownMutatorContext, m *Library) { deps := depLabels.Deps if !commonAttrs.Srcs.IsEmpty() { deps.Append(depLabels.StaticDeps) // we should only append these if there are sources to use them - - sdkVersion := m.SdkVersion(ctx) - if sdkVersion.Kind == android.SdkPublic && sdkVersion.ApiLevel == android.FutureApiLevel { - // TODO(b/220869005) remove forced dependency on current public android.jar - deps.Add(bazel.MakeLabelAttribute("//prebuilts/sdk:public_current_android_sdk_java_import")) - } else if sdkVersion.Kind == android.SdkSystem && sdkVersion.ApiLevel == android.FutureApiLevel { - // TODO(b/215230098) remove forced dependency on current public android.jar - deps.Add(bazel.MakeLabelAttribute("//prebuilts/sdk:system_current_android_sdk_java_import")) - } } else if !deps.IsEmpty() { ctx.ModuleErrorf("Module has direct dependencies but no sources. Bazel will not allow this.") } - var props bazel.BazelTargetModuleProperties attrs := &javaLibraryAttributes{ javaCommonAttributes: commonAttrs, @@ -3013,6 +3003,10 @@ func javaLibraryBp2Build(ctx android.TopDownMutatorContext, m *Library) { neverLinkAttrs := &javaLibraryAttributes{ Exports: bazel.MakeSingleLabelListAttribute(bazel.Label{Label: ":" + name}), Neverlink: bazel.BoolAttribute{Value: &neverlinkProp}, + javaCommonAttributes: &javaCommonAttributes{ + Sdk_version: bazel.StringAttribute{Value: m.deviceProperties.Sdk_version}, + Java_version: bazel.StringAttribute{Value: m.properties.Java_version}, + }, } ctx.CreateBazelTargetModule(props, android.CommonAttributes{Name: name + "-neverlink"}, neverLinkAttrs) @@ -3152,6 +3146,9 @@ func (i *Import) ConvertWithBp2build(ctx android.TopDownMutatorContext) { neverlinkAttrs := &javaLibraryAttributes{ Neverlink: bazel.BoolAttribute{Value: &neverlink}, Exports: bazel.MakeSingleLabelListAttribute(bazel.Label{Label: ":" + name}), + javaCommonAttributes: &javaCommonAttributes{ + Sdk_version: bazel.StringAttribute{Value: proptools.StringPtr("none")}, + }, } ctx.CreateBazelTargetModule( javaLibraryBazelTargetModuleProperties(), diff --git a/java/proto.go b/java/proto.go index 5280077f1..c732d9842 100644 --- a/java/proto.go +++ b/java/proto.go @@ -143,7 +143,9 @@ func protoFlags(ctx android.ModuleContext, j *CommonProperties, p *android.Proto } type protoAttributes struct { - Deps bazel.LabelListAttribute + Deps bazel.LabelListAttribute + Sdk_version bazel.StringAttribute + Java_version bazel.StringAttribute } func bp2buildProto(ctx android.Bp2buildMutatorContext, m *Module, protoSrcs bazel.LabelListAttribute) *bazel.Label { @@ -175,8 +177,11 @@ func bp2buildProto(ctx android.Bp2buildMutatorContext, m *Module, protoSrcs baze } protoLabel := bazel.Label{Label: ":" + m.Name() + "_proto"} - var protoAttrs protoAttributes - protoAttrs.Deps.SetValue(bazel.LabelList{Includes: []bazel.Label{protoLabel}}) + protoAttrs := &protoAttributes{ + Deps: bazel.MakeSingleLabelListAttribute(protoLabel), + Java_version: bazel.StringAttribute{Value: m.properties.Java_version}, + Sdk_version: bazel.StringAttribute{Value: m.deviceProperties.Sdk_version}, + } name := m.Name() + suffix @@ -186,7 +191,7 @@ func bp2buildProto(ctx android.Bp2buildMutatorContext, m *Module, protoSrcs baze Bzl_load_location: "//build/bazel/rules/java:proto.bzl", }, android.CommonAttributes{Name: name}, - &protoAttrs) + protoAttrs) return &bazel.Label{Label: ":" + name} }