diff options
| -rw-r--r-- | aconfig/aconfig_declarations.go | 4 | ||||
| -rw-r--r-- | aconfig/java_aconfig_library.go | 19 | ||||
| -rw-r--r-- | android/allowlists/allowlists.go | 208 | ||||
| -rw-r--r-- | android/config.go | 24 | ||||
| -rw-r--r-- | android/variable.go | 4 | ||||
| -rw-r--r-- | bp2build/aconfig_conversion_test.go | 17 | ||||
| -rw-r--r-- | bp2build/bp2build_product_config.go | 42 | ||||
| -rw-r--r-- | cc/config/global.go | 3 | ||||
| -rw-r--r-- | java/aar.go | 28 | ||||
| -rw-r--r-- | java/app_test.go | 156 | ||||
| -rw-r--r-- | java/core-libraries/Android.bp | 1 | ||||
| -rw-r--r-- | java/droidstubs.go | 9 | ||||
| -rw-r--r-- | java/droidstubs_test.go | 2 | ||||
| -rw-r--r-- | java/java.go | 43 | ||||
| -rw-r--r-- | java/java_test.go | 216 | ||||
| -rw-r--r-- | java/sdk_library.go | 10 | ||||
| -rw-r--r-- | rust/builder.go | 4 | ||||
| -rw-r--r-- | rust/config/global.go | 3 | ||||
| -rwxr-xr-x | scripts/manifest_check.py | 13 |
19 files changed, 598 insertions, 208 deletions
diff --git a/aconfig/aconfig_declarations.go b/aconfig/aconfig_declarations.go index f19ddb8be..897f8925a 100644 --- a/aconfig/aconfig_declarations.go +++ b/aconfig/aconfig_declarations.go @@ -74,8 +74,8 @@ func (module *DeclarationsModule) DepsMutator(ctx android.BottomUpMutatorContext // RELEASE_ACONFIG_VALUE_SETS, and add any aconfig_values that // match our package. valuesFromConfig := ctx.Config().ReleaseAconfigValueSets() - if valuesFromConfig != "" { - ctx.AddDependency(ctx.Module(), implicitValuesTag, valuesFromConfig) + if len(valuesFromConfig) > 0 { + ctx.AddDependency(ctx.Module(), implicitValuesTag, valuesFromConfig...) } } diff --git a/aconfig/java_aconfig_library.go b/aconfig/java_aconfig_library.go index 79573c787..f7f8db85d 100644 --- a/aconfig/java_aconfig_library.go +++ b/aconfig/java_aconfig_library.go @@ -99,6 +99,7 @@ type bazelJavaAconfigLibraryAttributes struct { Aconfig_declarations bazel.LabelAttribute Test *bool Sdk_version *string + Libs bazel.LabelListAttribute } func (callbacks *JavaAconfigDeclarationsLibraryCallbacks) Bp2build(ctx android.Bp2buildMutatorContext, module *java.GeneratedJavaLibraryModule) { @@ -118,10 +119,28 @@ func (callbacks *JavaAconfigDeclarationsLibraryCallbacks) Bp2build(ctx android.B // modules in framework/base use core_platform which is not supported by bazel yet. // TODO(b/302148527): change soong to default to system_current as well. sdkVersion := "system_current" + + var libs bazel.LabelListAttribute + archVariantProps := module.GetArchVariantProperties(ctx, &java.CommonProperties{}) + for axis, configToProps := range archVariantProps { + for config, p := range configToProps { + if archProps, ok := p.(*java.CommonProperties); ok { + var libLabels []bazel.Label + for _, d := range archProps.Libs { + neverlinkLabel := android.BazelLabelForModuleDepSingle(ctx, d) + neverlinkLabel.Label = neverlinkLabel.Label + "-neverlink" + libLabels = append(libLabels, neverlinkLabel) + } + libs.SetSelectValue(axis, config, (bazel.MakeLabelList(libLabels))) + } + } + } + attrs := bazelJavaAconfigLibraryAttributes{ Aconfig_declarations: *bazel.MakeLabelAttribute(android.BazelLabelForModuleDepSingle(ctx, callbacks.properties.Aconfig_declarations).Label), Test: callbacks.properties.Test, Sdk_version: &sdkVersion, + Libs: libs, } props := bazel.BazelTargetModuleProperties{ Rule_class: "java_aconfig_library", diff --git a/android/allowlists/allowlists.go b/android/allowlists/allowlists.go index cc428e934..014b3cc00 100644 --- a/android/allowlists/allowlists.go +++ b/android/allowlists/allowlists.go @@ -174,6 +174,7 @@ var ( "external/jsr330": Bp2BuildDefaultTrueRecursively, "external/junit": Bp2BuildDefaultTrueRecursively, "external/kotlinc": Bp2BuildDefaultTrueRecursively, + "external/kotlinx.coroutines": Bp2BuildDefaultTrueRecursively, "external/libaom": Bp2BuildDefaultTrueRecursively, "external/libavc": Bp2BuildDefaultTrueRecursively, "external/libcap": Bp2BuildDefaultTrueRecursively, @@ -186,8 +187,8 @@ var ( "external/libhevc": Bp2BuildDefaultTrueRecursively, "external/libjpeg-turbo": Bp2BuildDefaultTrueRecursively, "external/libmpeg2": Bp2BuildDefaultTrueRecursively, - "external/libpng": Bp2BuildDefaultTrueRecursively, "external/libphonenumber": Bp2BuildDefaultTrueRecursively, + "external/libpng": Bp2BuildDefaultTrueRecursively, "external/libvpx": Bp2BuildDefaultTrueRecursively, "external/libyuv": Bp2BuildDefaultTrueRecursively, "external/lz4/lib": Bp2BuildDefaultTrue, @@ -203,12 +204,12 @@ var ( "external/pcre": Bp2BuildDefaultTrueRecursively, "external/perfmark/api": Bp2BuildDefaultTrueRecursively, "external/protobuf": Bp2BuildDefaultTrueRecursively, - "external/python/pyfakefs/pyfakefs": Bp2BuildDefaultTrueRecursively, - "external/python/pyyaml/lib/yaml": Bp2BuildDefaultTrueRecursively, - "external/python/six": Bp2BuildDefaultTrueRecursively, "external/python/jinja/src": Bp2BuildDefaultTrueRecursively, "external/python/markupsafe/src": Bp2BuildDefaultTrueRecursively, + "external/python/pyfakefs/pyfakefs": Bp2BuildDefaultTrueRecursively, + "external/python/pyyaml/lib/yaml": Bp2BuildDefaultTrueRecursively, "external/python/setuptools": Bp2BuildDefaultTrueRecursively, + "external/python/six": Bp2BuildDefaultTrueRecursively, "external/rappor": Bp2BuildDefaultTrueRecursively, "external/scudo": Bp2BuildDefaultTrueRecursively, "external/selinux/checkpolicy": Bp2BuildDefaultTrueRecursively, @@ -219,60 +220,63 @@ var ( "external/tinyalsa": Bp2BuildDefaultTrueRecursively, "external/tinyalsa_new": Bp2BuildDefaultTrueRecursively, "external/toybox": Bp2BuildDefaultTrueRecursively, + "external/truth": Bp2BuildDefaultTrueRecursively, "external/xz-java": Bp2BuildDefaultTrueRecursively, "external/zlib": Bp2BuildDefaultTrueRecursively, "external/zopfli": Bp2BuildDefaultTrueRecursively, "external/zstd": Bp2BuildDefaultTrueRecursively, "frameworks/av": Bp2BuildDefaultTrue, - "frameworks/av/media/audioaidlconversion": Bp2BuildDefaultTrueRecursively, - "frameworks/av/media/codec2/components/aom": Bp2BuildDefaultTrueRecursively, - "frameworks/av/media/codecs": Bp2BuildDefaultTrueRecursively, - "frameworks/av/media/liberror": Bp2BuildDefaultTrueRecursively, - "frameworks/av/media/libmediahelper": Bp2BuildDefaultTrue, - "frameworks/av/media/libshmem": Bp2BuildDefaultTrueRecursively, - "frameworks/av/media/module/codecs": Bp2BuildDefaultTrueRecursively, - "frameworks/av/media/module/foundation": Bp2BuildDefaultTrueRecursively, - "frameworks/av/media/module/minijail": Bp2BuildDefaultTrueRecursively, - "frameworks/av/services/minijail": Bp2BuildDefaultTrueRecursively, - "frameworks/base/apex/jobscheduler/service/jni": Bp2BuildDefaultTrueRecursively, - "frameworks/base/core/java": Bp2BuildDefaultTrue, - "frameworks/base/core/res": Bp2BuildDefaultTrueRecursively, - "frameworks/base/libs/androidfw": Bp2BuildDefaultTrue, - "frameworks/base/libs/services": Bp2BuildDefaultTrue, - "frameworks/base/media/tests/MediaDump": Bp2BuildDefaultTrue, - "frameworks/base/mime": Bp2BuildDefaultTrueRecursively, - "frameworks/base/proto": Bp2BuildDefaultTrue, - "frameworks/base/services/tests/servicestests/aidl": Bp2BuildDefaultTrue, - "frameworks/base/startop/apps/test": Bp2BuildDefaultTrue, - "frameworks/base/tests/appwidgets/AppWidgetHostTest": Bp2BuildDefaultTrueRecursively, - "frameworks/base/tools/aapt": Bp2BuildDefaultTrue, - "frameworks/base/tools/aapt2": Bp2BuildDefaultTrue, - "frameworks/base/tools/codegen": Bp2BuildDefaultTrueRecursively, - "frameworks/base/tools/locked_region_code_injection": Bp2BuildDefaultTrueRecursively, - "frameworks/base/tools/streaming_proto": Bp2BuildDefaultTrueRecursively, - "frameworks/hardware/interfaces": Bp2BuildDefaultTrue, - "frameworks/hardware/interfaces/displayservice": Bp2BuildDefaultTrueRecursively, - "frameworks/hardware/interfaces/stats/aidl": Bp2BuildDefaultTrue, - "frameworks/libs/modules-utils/build": Bp2BuildDefaultTrueRecursively, - "frameworks/libs/modules-utils/java": Bp2BuildDefaultTrue, - "frameworks/native": Bp2BuildDefaultTrue, - "frameworks/native/libs/adbd_auth": Bp2BuildDefaultTrueRecursively, - "frameworks/native/libs/arect": Bp2BuildDefaultTrueRecursively, - "frameworks/native/libs/binder": Bp2BuildDefaultTrue, - "frameworks/native/libs/gui": Bp2BuildDefaultTrue, - "frameworks/native/libs/math": Bp2BuildDefaultTrueRecursively, - "frameworks/native/libs/nativebase": Bp2BuildDefaultTrueRecursively, - "frameworks/native/libs/permission": Bp2BuildDefaultTrueRecursively, - "frameworks/native/libs/ui": Bp2BuildDefaultTrue, - "frameworks/native/libs/vr": Bp2BuildDefaultTrueRecursively, - "frameworks/native/opengl/tests/gl2_cameraeye": Bp2BuildDefaultTrue, - "frameworks/native/opengl/tests/gl2_java": Bp2BuildDefaultTrue, - "frameworks/native/opengl/tests/testLatency": Bp2BuildDefaultTrue, - "frameworks/native/opengl/tests/testPauseResume": Bp2BuildDefaultTrue, - "frameworks/native/opengl/tests/testViewport": Bp2BuildDefaultTrue, - "frameworks/native/services/batteryservice": Bp2BuildDefaultTrue, - "frameworks/proto_logging/stats": Bp2BuildDefaultTrueRecursively, + "frameworks/av/media/audioaidlconversion": Bp2BuildDefaultTrueRecursively, + "frameworks/av/media/codec2/components/aom": Bp2BuildDefaultTrueRecursively, + "frameworks/av/media/codecs": Bp2BuildDefaultTrueRecursively, + "frameworks/av/media/liberror": Bp2BuildDefaultTrueRecursively, + "frameworks/av/media/libmediahelper": Bp2BuildDefaultTrue, + "frameworks/av/media/libshmem": Bp2BuildDefaultTrueRecursively, + "frameworks/av/media/module/codecs": Bp2BuildDefaultTrueRecursively, + "frameworks/av/media/module/foundation": Bp2BuildDefaultTrueRecursively, + "frameworks/av/media/module/minijail": Bp2BuildDefaultTrueRecursively, + "frameworks/av/services/minijail": Bp2BuildDefaultTrueRecursively, + "frameworks/base/apex/jobscheduler/service/jni": Bp2BuildDefaultTrueRecursively, + "frameworks/base/core/java": Bp2BuildDefaultTrue, + "frameworks/base/core/res": Bp2BuildDefaultTrueRecursively, + "frameworks/base/errorprone": Bp2BuildDefaultTrueRecursively, + "frameworks/base/libs/androidfw": Bp2BuildDefaultTrue, + "frameworks/base/libs/services": Bp2BuildDefaultTrue, + "frameworks/base/media/tests/MediaDump": Bp2BuildDefaultTrue, + "frameworks/base/mime": Bp2BuildDefaultTrueRecursively, + "frameworks/base/proto": Bp2BuildDefaultTrue, + "frameworks/base/services/tests/servicestests/aidl": Bp2BuildDefaultTrue, + "frameworks/base/startop/apps/test": Bp2BuildDefaultTrue, + "frameworks/base/tests/appwidgets/AppWidgetHostTest": Bp2BuildDefaultTrueRecursively, + "frameworks/base/tools/aapt": Bp2BuildDefaultTrue, + "frameworks/base/tools/aapt2": Bp2BuildDefaultTrue, + "frameworks/base/tools/codegen": Bp2BuildDefaultTrueRecursively, + "frameworks/base/tools/locked_region_code_injection": Bp2BuildDefaultTrueRecursively, + "frameworks/base/tools/streaming_proto": Bp2BuildDefaultTrueRecursively, + "frameworks/hardware/interfaces": Bp2BuildDefaultTrue, + "frameworks/hardware/interfaces/displayservice": Bp2BuildDefaultTrueRecursively, + "frameworks/hardware/interfaces/stats/aidl": Bp2BuildDefaultTrue, + "frameworks/libs/modules-utils/build": Bp2BuildDefaultTrueRecursively, + "frameworks/libs/modules-utils/java": Bp2BuildDefaultTrueRecursively, + "frameworks/libs/modules-utils/java/com/android/modules/utils/testing": Bp2BuildDefaultFalseRecursively, + "frameworks/native": Bp2BuildDefaultTrue, + "frameworks/native/libs/adbd_auth": Bp2BuildDefaultTrueRecursively, + "frameworks/native/libs/arect": Bp2BuildDefaultTrueRecursively, + "frameworks/native/libs/binder": Bp2BuildDefaultTrue, + "frameworks/native/libs/gui": Bp2BuildDefaultTrue, + "frameworks/native/libs/math": Bp2BuildDefaultTrueRecursively, + "frameworks/native/libs/nativebase": Bp2BuildDefaultTrueRecursively, + "frameworks/native/libs/permission": Bp2BuildDefaultTrueRecursively, + "frameworks/native/libs/ui": Bp2BuildDefaultTrue, + "frameworks/native/libs/vr": Bp2BuildDefaultTrueRecursively, + "frameworks/native/opengl/tests/gl2_cameraeye": Bp2BuildDefaultTrue, + "frameworks/native/opengl/tests/gl2_java": Bp2BuildDefaultTrue, + "frameworks/native/opengl/tests/testLatency": Bp2BuildDefaultTrue, + "frameworks/native/opengl/tests/testPauseResume": Bp2BuildDefaultTrue, + "frameworks/native/opengl/tests/testViewport": Bp2BuildDefaultTrue, + "frameworks/native/services/batteryservice": Bp2BuildDefaultTrue, + "frameworks/proto_logging/stats": Bp2BuildDefaultTrueRecursively, "hardware/interfaces": Bp2BuildDefaultTrue, "hardware/interfaces/audio/aidl": Bp2BuildDefaultTrue, @@ -325,37 +329,38 @@ var ( "libnativehelper": Bp2BuildDefaultTrueRecursively, - "packages/apps/DevCamera": Bp2BuildDefaultTrue, - "packages/apps/HTMLViewer": Bp2BuildDefaultTrue, - "packages/apps/Protips": Bp2BuildDefaultTrue, - "packages/apps/SafetyRegulatoryInfo": Bp2BuildDefaultTrue, - "packages/apps/WallpaperPicker": Bp2BuildDefaultTrue, - "packages/modules/NeuralNetworks/driver/cache": Bp2BuildDefaultTrueRecursively, - "packages/modules/StatsD/lib/libstatssocket": Bp2BuildDefaultTrueRecursively, - "packages/modules/adb": Bp2BuildDefaultTrue, - "packages/modules/adb/apex": Bp2BuildDefaultTrue, - "packages/modules/adb/fastdeploy": Bp2BuildDefaultTrue, - "packages/modules/adb/crypto": Bp2BuildDefaultTrueRecursively, - "packages/modules/adb/libs": Bp2BuildDefaultTrueRecursively, - "packages/modules/adb/pairing_auth": Bp2BuildDefaultTrueRecursively, - "packages/modules/adb/pairing_connection": Bp2BuildDefaultTrueRecursively, - "packages/modules/adb/proto": Bp2BuildDefaultTrueRecursively, - "packages/modules/adb/tls": Bp2BuildDefaultTrueRecursively, - "packages/modules/Connectivity/bpf_progs": Bp2BuildDefaultTrueRecursively, - "packages/modules/Connectivity/service-t": Bp2BuildDefaultTrueRecursively, - "packages/modules/Connectivity/service/native": Bp2BuildDefaultTrueRecursively, - "packages/modules/Connectivity/staticlibs/native": Bp2BuildDefaultTrueRecursively, - "packages/modules/Connectivity/staticlibs/netd": Bp2BuildDefaultTrueRecursively, - "packages/modules/Connectivity/tests/unit/jni": Bp2BuildDefaultTrueRecursively, - "packages/modules/Gki/libkver": Bp2BuildDefaultTrue, - "packages/modules/NetworkStack/common/captiveportal": Bp2BuildDefaultTrue, - "packages/modules/NeuralNetworks/apex": Bp2BuildDefaultTrue, - "packages/modules/NeuralNetworks/apex/testing": Bp2BuildDefaultTrue, - "packages/modules/SdkExtensions/gen_sdk": Bp2BuildDefaultTrue, - "packages/modules/common/proto": Bp2BuildDefaultTrue, - "packages/providers/MediaProvider/tools/dialogs": Bp2BuildDefaultFalse, // TODO(b/242834374) - "packages/screensavers/Basic": Bp2BuildDefaultTrue, - "packages/services/Car/tests/SampleRearViewCamera": Bp2BuildDefaultFalse, // TODO(b/242834321) + "packages/apps/DevCamera": Bp2BuildDefaultTrue, + "packages/apps/HTMLViewer": Bp2BuildDefaultTrue, + "packages/apps/Protips": Bp2BuildDefaultTrue, + "packages/apps/SafetyRegulatoryInfo": Bp2BuildDefaultTrue, + "packages/apps/WallpaperPicker": Bp2BuildDefaultTrue, + "packages/modules/Connectivity/bpf_progs": Bp2BuildDefaultTrueRecursively, + "packages/modules/Connectivity/service-t": Bp2BuildDefaultTrueRecursively, + "packages/modules/Connectivity/service/native": Bp2BuildDefaultTrueRecursively, + "packages/modules/Connectivity/staticlibs/native": Bp2BuildDefaultTrueRecursively, + "packages/modules/Connectivity/staticlibs/netd": Bp2BuildDefaultTrueRecursively, + "packages/modules/Connectivity/staticlibs/netd/libnetdutils": Bp2BuildDefaultTrueRecursively, + "packages/modules/Connectivity/tests/unit/jni": Bp2BuildDefaultTrueRecursively, + "packages/modules/Gki/libkver": Bp2BuildDefaultTrue, + "packages/modules/NetworkStack/common/captiveportal": Bp2BuildDefaultTrue, + "packages/modules/NeuralNetworks/apex": Bp2BuildDefaultTrue, + "packages/modules/NeuralNetworks/apex/testing": Bp2BuildDefaultTrue, + "packages/modules/NeuralNetworks/driver/cache": Bp2BuildDefaultTrueRecursively, + "packages/modules/SdkExtensions/gen_sdk": Bp2BuildDefaultTrue, + "packages/modules/StatsD/lib/libstatssocket": Bp2BuildDefaultTrueRecursively, + "packages/modules/adb": Bp2BuildDefaultTrue, + "packages/modules/adb/apex": Bp2BuildDefaultTrue, + "packages/modules/adb/crypto": Bp2BuildDefaultTrueRecursively, + "packages/modules/adb/fastdeploy": Bp2BuildDefaultTrue, + "packages/modules/adb/libs": Bp2BuildDefaultTrueRecursively, + "packages/modules/adb/pairing_auth": Bp2BuildDefaultTrueRecursively, + "packages/modules/adb/pairing_connection": Bp2BuildDefaultTrueRecursively, + "packages/modules/adb/proto": Bp2BuildDefaultTrueRecursively, + "packages/modules/adb/tls": Bp2BuildDefaultTrueRecursively, + "packages/modules/common/proto": Bp2BuildDefaultTrue, + "packages/providers/MediaProvider/tools/dialogs": Bp2BuildDefaultFalse, // TODO(b/242834374) + "packages/screensavers/Basic": Bp2BuildDefaultTrue, + "packages/services/Car/tests/SampleRearViewCamera": Bp2BuildDefaultFalse, // TODO(b/242834321) "platform_testing/libraries/annotations": Bp2BuildDefaultTrueRecursively, "platform_testing/libraries/flag-helpers/libflagtest": Bp2BuildDefaultTrueRecursively, @@ -363,19 +368,20 @@ var ( "prebuilts/clang/host/linux-x86": Bp2BuildDefaultTrueRecursively, "prebuilts/gradle-plugin": Bp2BuildDefaultTrueRecursively, - "prebuilts/runtime/mainline/platform/sdk": Bp2BuildDefaultTrueRecursively, "prebuilts/module_sdk": Bp2BuildDefaultTrueRecursively, + "prebuilts/runtime/mainline/platform/sdk": Bp2BuildDefaultTrueRecursively, "prebuilts/sdk": Bp2BuildDefaultTrue, "prebuilts/sdk/current/androidx": Bp2BuildDefaultTrue, "prebuilts/sdk/current/androidx-legacy": Bp2BuildDefaultTrue, + "prebuilts/sdk/current/extras/app-toolkit": Bp2BuildDefaultTrue, "prebuilts/sdk/current/extras/constraint-layout-x": Bp2BuildDefaultTrue, "prebuilts/sdk/current/extras/material-design-x": Bp2BuildDefaultTrue, - "prebuilts/sdk/current/extras/app-toolkit": Bp2BuildDefaultTrue, "prebuilts/sdk/current/support": Bp2BuildDefaultTrue, "prebuilts/tools": Bp2BuildDefaultTrue, "prebuilts/tools/common/m2": Bp2BuildDefaultTrue, "prebuilts/r8": Bp2BuildDefaultTrueRecursively, + "sdk/annotations": Bp2BuildDefaultTrueRecursively, "sdk/dumpeventlog": Bp2BuildDefaultTrue, "sdk/eventanalyzer": Bp2BuildDefaultTrue, @@ -431,6 +437,7 @@ var ( "system/libprocinfo": Bp2BuildDefaultTrue, "system/libvintf": Bp2BuildDefaultTrue, "system/libziparchive": Bp2BuildDefaultTrueRecursively, + "system/linkerconfig": Bp2BuildDefaultTrueRecursively, "system/logging": Bp2BuildDefaultTrueRecursively, "system/media": Bp2BuildDefaultTrue, "system/media/alsa_utils": Bp2BuildDefaultTrueRecursively, @@ -456,6 +463,7 @@ var ( "test/vts/vts_hal_hidl_target": Bp2BuildDefaultTrueRecursively, + "toolchain/pgo-profiles": Bp2BuildDefaultTrueRecursively, "tools/apifinder": Bp2BuildDefaultTrue, "tools/apksig": Bp2BuildDefaultTrue, "tools/dexter/slicer": Bp2BuildDefaultTrueRecursively, @@ -532,6 +540,8 @@ var ( } Bp2buildModuleAlwaysConvertList = []string{ + "aconfig.test.cpp", + "AconfigJavaHostTest", // aconfig "libonce_cell", "libanyhow", @@ -623,6 +633,7 @@ var ( "codec2_soft_exports", "compatibility_matrix_schema", "framework-connectivity-protos", + "framework-connectivity-javastream-protos", "gemmlowp_headers", "gl_headers", "libandroid_runtime_lazy", @@ -855,15 +866,6 @@ var ( // for api_fingerprint.txt generation "api_fingerprint", - // allowlisting for kotlinx_coroutines - "annotations", - "kotlinx-coroutines-android-annotation-stubs", - "kotlinx-coroutines-core", - "kotlinx_coroutines", - "kotlinx_coroutines-device", - "kotlinx_coroutines-host", - "kotlinx_coroutines_android", - // for building com.android.neuralnetworks "libimapper_stablec", "libimapper_providerutils", @@ -975,7 +977,6 @@ var ( "protoc-gen-grpc-java-plugin", "perfetto_trace-full", "tf-remote-client", - "truth", "tradefed-lite", "tradefed-isolation-protos", "snakeyaml_patched_src_files", @@ -1009,6 +1010,8 @@ var ( "libservice-connectivity", "mainline_modules_sdks_test", + + "fake_device_config", } Bp2buildModuleTypeAlwaysConvertList = []string{ @@ -1125,6 +1128,11 @@ var ( // rust support "libtombstoned_client_rust_bridge_code", "libtombstoned_client_wrapper", // rust conversions are not supported + // TODO: b/303474748 - aidl rules for java are incompatible with parcelable declarations + "modules-utils-list-slice", + "modules-utils-os", + "modules-utils-synchronous-result-receiver", + // unconverted deps "CarHTMLViewer", // depends on unconverted modules android.car-stubs, car-ui-lib "adb", // depends on unconverted modules: AdbWinApi, libandroidfw, libopenscreen-discovery, libopenscreen-platform-impl, libusb, bin2c_fastdeployagent, AdbWinUsbApi @@ -1144,7 +1152,6 @@ var ( "hidl_test_java", "host-libprotobuf-java-nano", // b/220869005, depends on libprotobuf-java-nano "jacoco-stubs", // b/245767077, depends on droidstubs - "libapexutil", // depends on unconverted modules: apex-info-list-tinyxml "libart", // depends on unconverted modules: apex-info-list-tinyxml, libtinyxml2, libnativeloader-headers, heapprofd_client_api, art_operator_srcs, libcpu_features, libodrstatslog, libelffile, art_cmdlineparser_headers, cpp-define-generator-definitions, libdexfile, libnativebridge, libnativeloader, libsigchain, libartbase, libprofile, cpp-define-generator-asm-support "libart-runtime", // depends on unconverted modules: apex-info-list-tinyxml, libtinyxml2, libnativeloader-headers, heapprofd_client_api, art_operator_srcs, libcpu_features, libodrstatslog, libelffile, art_cmdlineparser_headers, cpp-define-generator-definitions, libdexfile, libnativebridge, libnativeloader, libsigchain, libartbase, libprofile, cpp-define-generator-asm-support "libart-runtime-for-test", // depends on unconverted modules: apex-info-list-tinyxml, libtinyxml2, libnativeloader-headers, heapprofd_client_api, art_operator_srcs, libcpu_features, libodrstatslog, libelffile, art_cmdlineparser_headers, cpp-define-generator-definitions, libdexfile, libnativebridge, libnativeloader, libsigchain, libartbase, libprofile, cpp-define-generator-asm-support @@ -1168,6 +1175,7 @@ var ( "libstatslog_art", // depends on unconverted modules: statslog_art.cpp, statslog_art.h "linker_reloc_bench_main", // depends on unconverted modules: liblinker_reloc_bench_* "malloc-rss-benchmark", // depends on unconverted modules: libmeminfo + "modules-utils-expresslog", // depends on unconverted modules: framework-statsd "pbtombstone", "crash_dump", // depends on libdebuggerd, libunwindstack "releasetools_test", // depends on unconverted modules: com.android.apex.compressed.v1 "robolectric-sqlite4java-0.282", // depends on unconverted modules: robolectric-sqlite4java-import, robolectric-sqlite4java-native @@ -1663,13 +1671,7 @@ var ( "libtest_with_dependency_loop_c", "libtestshared", - // depends on unconverted libprotobuf-java-nano - "dnsresolverprotosnano", - "launcherprotosnano", - "datastallprotosnano", - "devicepolicyprotosnano", - "ota_metadata_proto_java", - "merge_ota", + "merge_ota", // depends on ota_metadata_proto_java // releasetools "verity_utils", diff --git a/android/config.go b/android/config.go index 2930c86a6..8f72239b9 100644 --- a/android/config.go +++ b/android/config.go @@ -200,21 +200,23 @@ func (c Config) ReleaseVersion() string { } // The aconfig value set passed to aconfig, derived from RELEASE_VERSION -func (c Config) ReleaseAconfigValueSets() string { +func (c Config) ReleaseAconfigValueSets() []string { // This logic to handle both Soong module name and bazel target is temporary in order to // provide backward compatibility where aosp and internal both have the release // aconfig value set but can't be updated at the same time to use bazel target - value := strings.Split(c.config.productVariables.ReleaseAconfigValueSets, ":") - value_len := len(value) - if value_len > 2 { - // This shouldn't happen as this should be either a module name or a bazel target path. - panic(fmt.Errorf("config file: invalid value for release aconfig value sets: %s", - c.config.productVariables.ReleaseAconfigValueSets)) - } - if value_len > 0 { - return value[value_len-1] + var valueSets []string + for _, valueSet := range c.config.productVariables.ReleaseAconfigValueSets { + value := strings.Split(valueSet, ":") + valueLen := len(value) + if valueLen > 2 { + // This shouldn't happen as this should be either a module name or a bazel target path. + panic(fmt.Errorf("config file: invalid value for release aconfig value sets: %s", valueSet)) + } + if valueLen > 0 { + valueSets = append(valueSets, value[valueLen-1]) + } } - return "" + return valueSets } // The flag default permission value passed to aconfig diff --git a/android/variable.go b/android/variable.go index 006a77f11..ab6dfefd6 100644 --- a/android/variable.go +++ b/android/variable.go @@ -474,8 +474,8 @@ type ProductVariables struct { ProductBrand string `json:",omitempty"` BuildVersionTags []string `json:",omitempty"` - ReleaseVersion string `json:",omitempty"` - ReleaseAconfigValueSets string `json:",omitempty"` + ReleaseVersion string `json:",omitempty"` + ReleaseAconfigValueSets []string `json:",omitempty"` ReleaseAconfigFlagDefaultPermission string `json:",omitempty"` diff --git a/bp2build/aconfig_conversion_test.go b/bp2build/aconfig_conversion_test.go index be9a33db1..ca41680a6 100644 --- a/bp2build/aconfig_conversion_test.go +++ b/bp2build/aconfig_conversion_test.go @@ -147,9 +147,15 @@ func TestJavaAconfigLibrary(t *testing.T) { ], package: "com.android.foo", } + java_library { + name: "foo_java_library", + srcs: ["foo.java"], + sdk_version: "current", + } java_aconfig_library { name: "foo", aconfig_declarations: "foo_aconfig_declarations", + libs: ["foo_java_library"], test: true, } ` @@ -163,10 +169,21 @@ func TestJavaAconfigLibrary(t *testing.T) { }, ), MakeBazelTargetNoRestrictions( + "java_library", + "foo_java_library", + AttrNameToString{ + "srcs": `["foo.java"]`, + "sdk_version": `"current"`, + "target_compatible_with": `["//build/bazel_common_rules/platforms/os:android"]`, + }, + ), + MakeNeverlinkDuplicateTarget("java_library", "foo_java_library"), + MakeBazelTargetNoRestrictions( "java_aconfig_library", "foo", AttrNameToString{ "aconfig_declarations": `":foo_aconfig_declarations"`, + "libs": `[":foo_java_library-neverlink"]`, "test": `True`, "sdk_version": `"system_current"`, "target_compatible_with": `["//build/bazel_common_rules/platforms/os:android"]`, diff --git a/bp2build/bp2build_product_config.go b/bp2build/bp2build_product_config.go index 3e004534e..2adccccfd 100644 --- a/bp2build/bp2build_product_config.go +++ b/bp2build/bp2build_product_config.go @@ -29,6 +29,8 @@ type bazelLabel struct { target string } +const releaseAconfigValueSetsName = "release_aconfig_value_sets" + func (l *bazelLabel) Less(other *bazelLabel) bool { if l.repo < other.repo { return true @@ -343,10 +345,11 @@ func platformMappingSingleProduct( result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:product_brand=%s\n", productVariables.ProductBrand)) result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:product_manufacturer=%s\n", productVariables.ProductManufacturer)) result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:release_aconfig_flag_default_permission=%s\n", productVariables.ReleaseAconfigFlagDefaultPermission)) - // Empty string can't be used as label_flag on the bazel side + releaseAconfigValueSets := "//build/bazel/product_config:empty_aconfig_value_sets" if len(productVariables.ReleaseAconfigValueSets) > 0 { - result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:release_aconfig_value_sets=%s\n", productVariables.ReleaseAconfigValueSets)) + releaseAconfigValueSets = "@//" + label.pkg + ":" + releaseAconfigValueSetsName + "_" + label.target } + result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:release_aconfig_value_sets=%s\n", releaseAconfigValueSets)) result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:release_version=%s\n", productVariables.ReleaseVersion)) result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:platform_sdk_version=%d\n", platform_sdk_version)) result.WriteString(fmt.Sprintf(" --//build/bazel/product_config:safestack=%t\n", proptools.Bool(productVariables.Safestack))) @@ -481,6 +484,7 @@ func starlarkMapToProductVariables(in map[string]starlark.Value) (android.Produc func createTargets(productLabelsToVariables map[bazelLabel]*android.ProductVariables, res map[string]BazelTargets) { createGeneratedAndroidCertificateDirectories(productLabelsToVariables, res) createAvbKeyFilegroups(productLabelsToVariables, res) + createReleaseAconfigValueSetsFilegroup(productLabelsToVariables, res) for label, variables := range productLabelsToVariables { createSystemPartition(label, &variables.PartitionVarsForBazelMigrationOnlyDoNotUse, res) } @@ -515,6 +519,40 @@ func createGeneratedAndroidCertificateDirectories(productLabelsToVariables map[b } } +func createReleaseAconfigValueSetsFilegroup(productLabelsToVariables map[bazelLabel]*android.ProductVariables, targets map[string]BazelTargets) { + for label, productVariables := range productLabelsToVariables { + if len(productVariables.ReleaseAconfigValueSets) > 0 { + key := label.target + dir := label.pkg + var value_sets strings.Builder + for _, value_set := range productVariables.ReleaseAconfigValueSets { + value_sets.WriteString(" \"" + value_set + "\",\n") + } + + name := releaseAconfigValueSetsName + "_" + key + content := "aconfig_value_sets(\n" + + " name = \"" + name + "\",\n" + + " value_sets = [\n" + + value_sets.String() + + " ],\n" + + " visibility = [\"//visibility:public\"],\n" + + ")" + targets[dir] = append(targets[dir], BazelTarget{ + name: name, + packageName: dir, + content: content, + ruleClass: "aconfig_value_sets", + loads: []BazelLoad{{ + file: "//build/bazel/rules/aconfig:aconfig_value_sets.bzl", + symbols: []BazelLoadSymbol{{ + symbol: "aconfig_value_sets", + }}, + }}, + }) + } + } +} + func createAvbKeyFilegroups(productLabelsToVariables map[bazelLabel]*android.ProductVariables, targets map[string]BazelTargets) { var allAvbKeys []string for _, productVariables := range productLabelsToVariables { diff --git a/cc/config/global.go b/cc/config/global.go index 62b008b06..0354b2537 100644 --- a/cc/config/global.go +++ b/cc/config/global.go @@ -170,6 +170,9 @@ var ( // Emit additional debug info for AutoFDO "-fdebug-info-for-profiling", + + // Enable Hot Cold splitting optimization. + "-mllvm -hot-cold-split=true", } commonGlobalLldflags = []string{ diff --git a/java/aar.go b/java/aar.go index e53653a92..85a6fbb96 100644 --- a/java/aar.go +++ b/java/aar.go @@ -311,7 +311,7 @@ type aaptBuildActionOptions struct { func (a *aapt) buildActions(ctx android.ModuleContext, opts aaptBuildActionOptions) { - staticResourcesNodesDepSet, staticRRODirsDepSet, staticManifestsDepSet, sharedDeps, libFlags := + staticResourcesNodesDepSet, sharedResourcesNodesDepSet, staticRRODirsDepSet, staticManifestsDepSet, sharedExportPackages, libFlags := aaptLibs(ctx, opts.sdkContext, opts.classLoaderContexts) // Exclude any libraries from the supplied list. @@ -335,6 +335,7 @@ func (a *aapt) buildActions(ctx android.ModuleContext, opts aaptBuildActionOptio }) staticDeps := transitiveAarDeps(staticResourcesNodesDepSet.ToList()) + sharedDeps := transitiveAarDeps(sharedResourcesNodesDepSet.ToList()) // Add additional manifest files to transitive manifests. additionalManifests := android.PathsForModuleSrc(ctx, a.aaptProperties.Additional_manifests) @@ -364,7 +365,7 @@ func (a *aapt) buildActions(ctx android.ModuleContext, opts aaptBuildActionOptio compileFlags, linkFlags, linkDeps, resDirs, overlayDirs, rroDirs, resZips := a.aapt2Flags(ctx, opts.sdkContext, manifestPath) linkFlags = append(linkFlags, libFlags...) - linkDeps = append(linkDeps, sharedDeps...) + linkDeps = append(linkDeps, sharedExportPackages...) linkDeps = append(linkDeps, staticDeps.resPackages()...) linkFlags = append(linkFlags, opts.extraLinkFlags...) if a.isLibrary { @@ -422,6 +423,11 @@ func (a *aapt) buildActions(ctx android.ModuleContext, opts aaptBuildActionOptio transitiveRJars = append(transitiveRJars, staticDep.rJar) } } + for _, sharedDep := range sharedDeps { + if sharedDep.usedResourceProcessor { + transitiveRJars = append(transitiveRJars, sharedDep.rJar) + } + } } else { // When building an app or building a library without ResourceProcessorBusyBox enabled all static // dependencies are compiled into this module's package-res.apk as overlays. @@ -630,7 +636,7 @@ func (t transitiveAarDeps) assets() android.Paths { // aaptLibs collects libraries from dependencies and sdk_version and converts them into paths func aaptLibs(ctx android.ModuleContext, sdkContext android.SdkContext, classLoaderContexts dexpreopt.ClassLoaderContextMap) ( - staticResourcesNodes *android.DepSet[*resourcesNode], staticRRODirs *android.DepSet[rroDir], + staticResourcesNodes, sharedResourcesNodes *android.DepSet[*resourcesNode], staticRRODirs *android.DepSet[rroDir], staticManifests *android.DepSet[android.Path], sharedLibs android.Paths, flags []string) { if classLoaderContexts == nil { @@ -644,7 +650,8 @@ func aaptLibs(ctx android.ModuleContext, sdkContext android.SdkContext, classLoa sharedLibs = append(sharedLibs, sdkDep.jars...) } - var resourcesNodeDepSets []*android.DepSet[*resourcesNode] + var staticResourcesNodeDepSets []*android.DepSet[*resourcesNode] + var sharedResourcesNodeDepSets []*android.DepSet[*resourcesNode] rroDirsDepSetBuilder := android.NewDepSetBuilder[rroDir](android.TOPOLOGICAL) manifestsDepSetBuilder := android.NewDepSetBuilder[android.Path](android.TOPOLOGICAL) @@ -662,6 +669,7 @@ func aaptLibs(ctx android.ModuleContext, sdkContext android.SdkContext, classLoa // Nothing, instrumentationForTag is treated as libTag for javac but not for aapt2. case sdkLibTag, libTag: if exportPackage != nil { + sharedResourcesNodeDepSets = append(sharedResourcesNodeDepSets, aarDep.ResourcesNodeDepSet()) sharedLibs = append(sharedLibs, exportPackage) } case frameworkResTag: @@ -670,7 +678,7 @@ func aaptLibs(ctx android.ModuleContext, sdkContext android.SdkContext, classLoa } case staticLibTag: if exportPackage != nil { - resourcesNodeDepSets = append(resourcesNodeDepSets, aarDep.ResourcesNodeDepSet()) + staticResourcesNodeDepSets = append(staticResourcesNodeDepSets, aarDep.ResourcesNodeDepSet()) rroDirsDepSetBuilder.Transitive(aarDep.RRODirsDepSet()) manifestsDepSetBuilder.Transitive(aarDep.ManifestsDepSet()) } @@ -686,7 +694,9 @@ func aaptLibs(ctx android.ModuleContext, sdkContext android.SdkContext, classLoa // dependencies) the highest priority dependency is listed first, but for resources the highest priority // dependency has to be listed last. staticResourcesNodes = android.NewDepSet(android.TOPOLOGICAL, nil, - android.ReverseSliceInPlace(resourcesNodeDepSets)) + android.ReverseSliceInPlace(staticResourcesNodeDepSets)) + sharedResourcesNodes = android.NewDepSet(android.TOPOLOGICAL, nil, + android.ReverseSliceInPlace(sharedResourcesNodeDepSets)) staticRRODirs = rroDirsDepSetBuilder.Build() staticManifests = manifestsDepSetBuilder.Build() @@ -699,7 +709,7 @@ func aaptLibs(ctx android.ModuleContext, sdkContext android.SdkContext, classLoa flags = append(flags, "-I "+sharedLib.String()) } - return staticResourcesNodes, staticRRODirs, staticManifests, sharedLibs, flags + return staticResourcesNodes, sharedResourcesNodes, staticRRODirs, staticManifests, sharedLibs, flags } type AndroidLibrary struct { @@ -1095,10 +1105,12 @@ func (a *AARImport) GenerateAndroidBuildActions(ctx android.ModuleContext) { linkFlags = append(linkFlags, "--manifest "+a.manifest.String()) linkDeps = append(linkDeps, a.manifest) - staticResourcesNodesDepSet, staticRRODirsDepSet, staticManifestsDepSet, sharedLibs, libFlags := + staticResourcesNodesDepSet, sharedResourcesNodesDepSet, staticRRODirsDepSet, staticManifestsDepSet, sharedLibs, libFlags := aaptLibs(ctx, android.SdkContext(a), nil) + _ = sharedResourcesNodesDepSet _ = staticRRODirsDepSet + staticDeps := transitiveAarDeps(staticResourcesNodesDepSet.ToList()) linkDeps = append(linkDeps, sharedLibs...) diff --git a/java/app_test.go b/java/app_test.go index fc57f444a..e38a7247b 100644 --- a/java/app_test.go +++ b/java/app_test.go @@ -722,10 +722,13 @@ func TestAppJavaResources(t *testing.T) { func TestAndroidResourceProcessor(t *testing.T) { testCases := []struct { - name string - appUsesRP bool - directLibUsesRP bool - transitiveLibUsesRP bool + name string + appUsesRP bool + directLibUsesRP bool + transitiveLibUsesRP bool + sharedLibUsesRP bool + sharedTransitiveStaticLibUsesRP bool + sharedTransitiveSharedLibUsesRP bool dontVerifyApp bool appResources []string @@ -760,6 +763,14 @@ func TestAndroidResourceProcessor(t *testing.T) { transitiveImportResources []string transitiveImportOverlays []string transitiveImportImports []string + + dontVerifyShared bool + sharedResources []string + sharedOverlays []string + sharedImports []string + sharedSrcJars []string + sharedClasspath []string + sharedCombined []string }{ { // Test with all modules set to use_resource_processor: false (except android_library_import modules, @@ -779,10 +790,14 @@ func TestAndroidResourceProcessor(t *testing.T) { "out/soong/.intermediates/direct_import/android_common/package-res.apk", "out/soong/.intermediates/app/android_common/aapt2/app/res/values_strings.arsc.flat", }, - appImports: []string{"out/soong/.intermediates/default/java/framework-res/android_common/package-res.apk"}, + appImports: []string{ + "out/soong/.intermediates/shared/android_common/package-res.apk", + "out/soong/.intermediates/default/java/framework-res/android_common/package-res.apk", + }, appSrcJars: []string{"out/soong/.intermediates/app/android_common/gen/android/R.srcjar"}, appClasspath: []string{ "out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine-combined/android_stubs_current.jar", + "out/soong/.intermediates/shared/android_common/turbine-combined/shared.jar", "out/soong/.intermediates/direct/android_common/turbine-combined/direct.jar", "out/soong/.intermediates/direct_import/android_common/aar/classes-combined.jar", }, @@ -819,6 +834,26 @@ func TestAndroidResourceProcessor(t *testing.T) { transitiveClasspath: []string{"out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine-combined/android_stubs_current.jar"}, transitiveCombined: nil, + sharedResources: nil, + sharedOverlays: []string{ + "out/soong/.intermediates/shared_transitive_static/android_common/package-res.apk", + "out/soong/.intermediates/shared/android_common/aapt2/shared/res/values_strings.arsc.flat", + }, + sharedImports: []string{ + "out/soong/.intermediates/shared_transitive_shared/android_common/package-res.apk", + "out/soong/.intermediates/default/java/framework-res/android_common/package-res.apk", + }, + sharedSrcJars: []string{"out/soong/.intermediates/shared/android_common/gen/android/R.srcjar"}, + sharedClasspath: []string{ + "out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine-combined/android_stubs_current.jar", + "out/soong/.intermediates/shared_transitive_shared/android_common/turbine-combined/shared_transitive_shared.jar", + "out/soong/.intermediates/shared_transitive_static/android_common/turbine-combined/shared_transitive_static.jar", + }, + sharedCombined: []string{ + "out/soong/.intermediates/shared/android_common/javac/shared.jar", + "out/soong/.intermediates/shared_transitive_static/android_common/javac/shared_transitive_static.jar", + }, + directImportResources: nil, directImportOverlays: []string{"out/soong/.intermediates/direct_import/android_common/flat-res/gen_res.flata"}, directImportImports: []string{ @@ -835,10 +870,13 @@ func TestAndroidResourceProcessor(t *testing.T) { }, { // Test with all modules set to use_resource_processor: true. - name: "resource_processor", - appUsesRP: true, - directLibUsesRP: true, - transitiveLibUsesRP: true, + name: "resource_processor", + appUsesRP: true, + directLibUsesRP: true, + transitiveLibUsesRP: true, + sharedLibUsesRP: true, + sharedTransitiveSharedLibUsesRP: true, + sharedTransitiveStaticLibUsesRP: true, appResources: nil, appOverlays: []string{ @@ -850,11 +888,15 @@ func TestAndroidResourceProcessor(t *testing.T) { "out/soong/.intermediates/direct_import/android_common/package-res.apk", "out/soong/.intermediates/app/android_common/aapt2/app/res/values_strings.arsc.flat", }, - appImports: []string{"out/soong/.intermediates/default/java/framework-res/android_common/package-res.apk"}, + appImports: []string{ + "out/soong/.intermediates/shared/android_common/package-res.apk", + "out/soong/.intermediates/default/java/framework-res/android_common/package-res.apk", + }, appSrcJars: nil, appClasspath: []string{ "out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine-combined/android_stubs_current.jar", "out/soong/.intermediates/app/android_common/busybox/R.jar", + "out/soong/.intermediates/shared/android_common/turbine-combined/shared.jar", "out/soong/.intermediates/direct/android_common/turbine-combined/direct.jar", "out/soong/.intermediates/direct_import/android_common/aar/classes-combined.jar", }, @@ -899,6 +941,27 @@ func TestAndroidResourceProcessor(t *testing.T) { }, transitiveCombined: nil, + sharedResources: nil, + sharedOverlays: []string{"out/soong/.intermediates/shared/android_common/aapt2/shared/res/values_strings.arsc.flat"}, + sharedImports: []string{ + "out/soong/.intermediates/shared_transitive_shared/android_common/package-res.apk", + "out/soong/.intermediates/default/java/framework-res/android_common/package-res.apk", + "out/soong/.intermediates/shared_transitive_static/android_common/package-res.apk", + }, + sharedSrcJars: nil, + sharedClasspath: []string{ + "out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine-combined/android_stubs_current.jar", + "out/soong/.intermediates/shared_transitive_static/android_common/busybox/R.jar", + "out/soong/.intermediates/shared_transitive_shared/android_common/busybox/R.jar", + "out/soong/.intermediates/shared/android_common/busybox/R.jar", + "out/soong/.intermediates/shared_transitive_shared/android_common/turbine-combined/shared_transitive_shared.jar", + "out/soong/.intermediates/shared_transitive_static/android_common/turbine-combined/shared_transitive_static.jar", + }, + sharedCombined: []string{ + "out/soong/.intermediates/shared/android_common/javac/shared.jar", + "out/soong/.intermediates/shared_transitive_static/android_common/javac/shared_transitive_static.jar", + }, + directImportResources: nil, directImportOverlays: []string{"out/soong/.intermediates/direct_import/android_common/flat-res/gen_res.flata"}, directImportImports: []string{ @@ -930,12 +993,16 @@ func TestAndroidResourceProcessor(t *testing.T) { "out/soong/.intermediates/direct_import/android_common/package-res.apk", "out/soong/.intermediates/app/android_common/aapt2/app/res/values_strings.arsc.flat", }, - appImports: []string{"out/soong/.intermediates/default/java/framework-res/android_common/package-res.apk"}, + appImports: []string{ + "out/soong/.intermediates/shared/android_common/package-res.apk", + "out/soong/.intermediates/default/java/framework-res/android_common/package-res.apk", + }, appSrcJars: nil, appClasspath: []string{ "out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine-combined/android_stubs_current.jar", // R.jar has to come before direct.jar "out/soong/.intermediates/app/android_common/busybox/R.jar", + "out/soong/.intermediates/shared/android_common/turbine-combined/shared.jar", "out/soong/.intermediates/direct/android_common/turbine-combined/direct.jar", "out/soong/.intermediates/direct_import/android_common/aar/classes-combined.jar", }, @@ -948,6 +1015,7 @@ func TestAndroidResourceProcessor(t *testing.T) { dontVerifyDirect: true, dontVerifyTransitive: true, + dontVerifyShared: true, dontVerifyDirectImport: true, dontVerifyTransitiveImport: true, }, @@ -968,10 +1036,14 @@ func TestAndroidResourceProcessor(t *testing.T) { "out/soong/.intermediates/direct_import/android_common/package-res.apk", "out/soong/.intermediates/app/android_common/aapt2/app/res/values_strings.arsc.flat", }, - appImports: []string{"out/soong/.intermediates/default/java/framework-res/android_common/package-res.apk"}, + appImports: []string{ + "out/soong/.intermediates/shared/android_common/package-res.apk", + "out/soong/.intermediates/default/java/framework-res/android_common/package-res.apk", + }, appSrcJars: []string{"out/soong/.intermediates/app/android_common/gen/android/R.srcjar"}, appClasspath: []string{ "out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine-combined/android_stubs_current.jar", + "out/soong/.intermediates/shared/android_common/turbine-combined/shared.jar", "out/soong/.intermediates/direct/android_common/turbine-combined/direct.jar", "out/soong/.intermediates/direct_import/android_common/aar/classes-combined.jar", }, @@ -1005,6 +1077,7 @@ func TestAndroidResourceProcessor(t *testing.T) { }, dontVerifyTransitive: true, + dontVerifyShared: true, dontVerifyDirectImport: true, dontVerifyTransitiveImport: true, }, @@ -1025,10 +1098,14 @@ func TestAndroidResourceProcessor(t *testing.T) { "out/soong/.intermediates/direct_import/android_common/package-res.apk", "out/soong/.intermediates/app/android_common/aapt2/app/res/values_strings.arsc.flat", }, - appImports: []string{"out/soong/.intermediates/default/java/framework-res/android_common/package-res.apk"}, + appImports: []string{ + "out/soong/.intermediates/shared/android_common/package-res.apk", + "out/soong/.intermediates/default/java/framework-res/android_common/package-res.apk", + }, appSrcJars: []string{"out/soong/.intermediates/app/android_common/gen/android/R.srcjar"}, appClasspath: []string{ "out/soong/.intermediates/default/java/android_stubs_current/android_common/turbine-combined/android_stubs_current.jar", + "out/soong/.intermediates/shared/android_common/turbine-combined/shared.jar", "out/soong/.intermediates/direct/android_common/turbine-combined/direct.jar", "out/soong/.intermediates/direct_import/android_common/aar/classes-combined.jar", }, @@ -1068,6 +1145,7 @@ func TestAndroidResourceProcessor(t *testing.T) { }, transitiveCombined: nil, + dontVerifyShared: true, dontVerifyDirectImport: true, dontVerifyTransitiveImport: true, }, @@ -1082,6 +1160,7 @@ func TestAndroidResourceProcessor(t *testing.T) { srcs: ["app/app.java"], resource_dirs: ["app/res"], manifest: "app/AndroidManifest.xml", + libs: ["shared"], static_libs: ["direct", "direct_import"], use_resource_processor: %v, } @@ -1105,6 +1184,35 @@ func TestAndroidResourceProcessor(t *testing.T) { use_resource_processor: %v, } + android_library { + name: "shared", + sdk_version: "current", + srcs: ["shared/shared.java"], + resource_dirs: ["shared/res"], + manifest: "shared/AndroidManifest.xml", + use_resource_processor: %v, + libs: ["shared_transitive_shared"], + static_libs: ["shared_transitive_static"], + } + + android_library { + name: "shared_transitive_shared", + sdk_version: "current", + srcs: ["shared_transitive_shared/shared_transitive_shared.java"], + resource_dirs: ["shared_transitive_shared/res"], + manifest: "shared_transitive_shared/AndroidManifest.xml", + use_resource_processor: %v, + } + + android_library { + name: "shared_transitive_static", + sdk_version: "current", + srcs: ["shared_transitive_static/shared.java"], + resource_dirs: ["shared_transitive_static/res"], + manifest: "shared_transitive_static/AndroidManifest.xml", + use_resource_processor: %v, + } + android_library_import { name: "direct_import", sdk_version: "current", @@ -1130,12 +1238,16 @@ func TestAndroidResourceProcessor(t *testing.T) { sdk_version: "current", aars: ["transitive_import_dep.aar"], } - `, testCase.appUsesRP, testCase.directLibUsesRP, testCase.transitiveLibUsesRP) + `, testCase.appUsesRP, testCase.directLibUsesRP, testCase.transitiveLibUsesRP, + testCase.sharedLibUsesRP, testCase.sharedTransitiveSharedLibUsesRP, testCase.sharedTransitiveStaticLibUsesRP) fs := android.MockFS{ - "app/res/values/strings.xml": nil, - "direct/res/values/strings.xml": nil, - "transitive/res/values/strings.xml": nil, + "app/res/values/strings.xml": nil, + "direct/res/values/strings.xml": nil, + "transitive/res/values/strings.xml": nil, + "shared/res/values/strings.xml": nil, + "shared_transitive_static/res/values/strings.xml": nil, + "shared_transitive_shared/res/values/strings.xml": nil, } result := android.GroupFixturePreparers( @@ -1182,6 +1294,7 @@ func TestAndroidResourceProcessor(t *testing.T) { app := getAaptInfo("app") direct := getAaptInfo("direct") transitive := getAaptInfo("transitive") + shared := getAaptInfo("shared") directImport := getAaptInfo("direct_import") transitiveImport := getAaptInfo("transitive_import") @@ -1212,6 +1325,15 @@ func TestAndroidResourceProcessor(t *testing.T) { android.AssertPathsRelativeToTopEquals(t, "transitive combined", testCase.transitiveCombined, transitive.combined) } + if !testCase.dontVerifyShared { + android.AssertPathsRelativeToTopEquals(t, "shared resources", testCase.sharedResources, shared.resources) + android.AssertPathsRelativeToTopEquals(t, "shared overlays", testCase.sharedOverlays, shared.overlays) + android.AssertPathsRelativeToTopEquals(t, "shared imports", testCase.sharedImports, shared.imports) + android.AssertPathsRelativeToTopEquals(t, "shared srcjars", testCase.sharedSrcJars, shared.srcJars) + android.AssertPathsRelativeToTopEquals(t, "shared classpath", testCase.sharedClasspath, shared.classpath) + android.AssertPathsRelativeToTopEquals(t, "shared combined", testCase.sharedCombined, shared.combined) + } + if !testCase.dontVerifyDirectImport { android.AssertPathsRelativeToTopEquals(t, "direct_import resources", testCase.directImportResources, directImport.resources) android.AssertPathsRelativeToTopEquals(t, "direct_import overlays", testCase.directImportOverlays, directImport.overlays) diff --git a/java/core-libraries/Android.bp b/java/core-libraries/Android.bp index 4380f4f5c..8b7387a85 100644 --- a/java/core-libraries/Android.bp +++ b/java/core-libraries/Android.bp @@ -66,6 +66,7 @@ java_api_library { libs: [ "stub-annotations", ], + enable_validation: false, } java_library { diff --git a/java/droidstubs.go b/java/droidstubs.go index 5432ce7f5..8ab2f2aca 100644 --- a/java/droidstubs.go +++ b/java/droidstubs.go @@ -171,6 +171,10 @@ type ApiStubsProvider interface { ApiStubsSrcProvider } +type currentApiTimestampProvider interface { + CurrentApiTimestamp() android.Path +} + // droidstubs passes sources files through Metalava to generate stub .java files that only contain the API to be // documented, filtering out hidden classes and methods. The resulting .java files are intended to be passed to // a droiddoc module to generate documentation. @@ -238,10 +242,15 @@ func (d *Droidstubs) StubsSrcJar() android.Path { return d.stubsSrcJar } +func (d *Droidstubs) CurrentApiTimestamp() android.Path { + return d.checkCurrentApiTimestamp +} + var metalavaMergeAnnotationsDirTag = dependencyTag{name: "metalava-merge-annotations-dir"} var metalavaMergeInclusionAnnotationsDirTag = dependencyTag{name: "metalava-merge-inclusion-annotations-dir"} var metalavaAPILevelsAnnotationsDirTag = dependencyTag{name: "metalava-api-levels-annotations-dir"} var metalavaAPILevelsModuleTag = dependencyTag{name: "metalava-api-levels-module-tag"} +var metalavaCurrentApiTimestampTag = dependencyTag{name: "metalava-current-api-timestamp-tag"} func (d *Droidstubs) DepsMutator(ctx android.BottomUpMutatorContext) { d.Javadoc.addDeps(ctx) diff --git a/java/droidstubs_test.go b/java/droidstubs_test.go index e149b9893..f86e1acef 100644 --- a/java/droidstubs_test.go +++ b/java/droidstubs_test.go @@ -392,7 +392,7 @@ func TestGeneratedApiContributionVisibilityTest(t *testing.T) { removed_api_file: "A/removed.txt", } }, - visibility: ["//a"], + visibility: ["//a", "//b"], } `, map[string][]byte{ diff --git a/java/java.go b/java/java.go index 3b20ea406..990a084f7 100644 --- a/java/java.go +++ b/java/java.go @@ -1664,6 +1664,8 @@ type ApiLibrary struct { extractedSrcJar android.WritablePath // .dex of stubs, used for hiddenapi processing dexJarFile OptionalDexJarPath + + validationPaths android.Paths } type JavaApiLibraryProperties struct { @@ -1699,6 +1701,12 @@ type JavaApiLibraryProperties struct { // The jar will also be passed to metalava as a classpath to // generate compilable stubs. System_modules *string + + // If true, the module runs validation on the API signature files provided + // by the modules passed via api_contributions by checking if the files are + // in sync with the source Java files. However, the environment variable + // DISABLE_STUB_VALIDATION has precedence over this property. + Enable_validation *bool } func ApiLibraryFactory() android.Module { @@ -1787,6 +1795,12 @@ func (al *ApiLibrary) stubsFlags(ctx android.ModuleContext, cmd *android.RuleBui } } +func (al *ApiLibrary) addValidation(ctx android.ModuleContext, cmd *android.RuleBuilderCommand, validationPaths android.Paths) { + for _, validationPath := range validationPaths { + cmd.Validation(validationPath) + } +} + // This method extracts the stub class files from the stub jar file provided // from full_api_surface_stub module instead of compiling the srcjar generated from invoking metalava. // This method is used because metalava can generate compilable from-text stubs only when @@ -1823,8 +1837,28 @@ func (al *ApiLibrary) extractApiSrcs(ctx android.ModuleContext, rule *android.Ru func (al *ApiLibrary) DepsMutator(ctx android.BottomUpMutatorContext) { apiContributions := al.properties.Api_contributions + addValidations := !ctx.Config().IsEnvTrue("DISABLE_STUB_VALIDATION") && + proptools.BoolDefault(al.properties.Enable_validation, true) for _, apiContributionName := range apiContributions { ctx.AddDependency(ctx.Module(), javaApiContributionTag, apiContributionName) + + // Add the java_api_contribution module generating droidstubs module + // as dependency when validation adding conditions are met and + // the java_api_contribution module name has ".api.contribution" suffix. + // All droidstubs-generated modules possess the suffix in the name, + // but there is no such guarantee for tests. + if addValidations { + if strings.HasSuffix(apiContributionName, ".api.contribution") { + ctx.AddDependency(ctx.Module(), metalavaCurrentApiTimestampTag, strings.TrimSuffix(apiContributionName, ".api.contribution")) + } else { + ctx.ModuleErrorf("Validation is enabled for module %s but a "+ + "current timestamp provider is not found for the api "+ + "contribution %s", + ctx.ModuleName(), + apiContributionName, + ) + } + } } ctx.AddVariationDependencies(nil, libTag, al.properties.Libs...) ctx.AddVariationDependencies(nil, staticLibTag, al.properties.Static_libs...) @@ -1862,8 +1896,7 @@ func (al *ApiLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) { android.PathForModuleOut(ctx, "metalava.sbox.textproto")). SandboxInputs() - var stubsDir android.OptionalPath - stubsDir = android.OptionalPathForPath(android.PathForModuleOut(ctx, "metalava", "stubsDir")) + stubsDir := android.OptionalPathForPath(android.PathForModuleOut(ctx, "metalava", "stubsDir")) rule.Command().Text("rm -rf").Text(stubsDir.String()) rule.Command().Text("mkdir -p").Text(stubsDir.String()) @@ -1895,6 +1928,10 @@ func (al *ApiLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) { case systemModulesTag: module := dep.(SystemModulesProvider) systemModulesPaths = append(systemModulesPaths, module.HeaderJars()...) + case metalavaCurrentApiTimestampTag: + if currentApiTimestampProvider, ok := dep.(currentApiTimestampProvider); ok { + al.validationPaths = append(al.validationPaths, currentApiTimestampProvider.CurrentApiTimestamp()) + } } }) @@ -1918,6 +1955,8 @@ func (al *ApiLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) { cmd.FlagWithInput("--migrate-nullness ", previousApi) } + al.addValidation(ctx, cmd, al.validationPaths) + al.stubsSrcJar = android.PathForModuleOut(ctx, "metalava", ctx.ModuleName()+"-"+"stubs.srcjar") al.stubsJarWithoutStaticLibs = android.PathForModuleOut(ctx, "metalava", "stubs.jar") al.stubsJar = android.PathForModuleOut(ctx, ctx.ModuleName(), fmt.Sprintf("%s.jar", ctx.ModuleName())) diff --git a/java/java_test.go b/java/java_test.go index 6b8b735f7..c4fc55bc4 100644 --- a/java/java_test.go +++ b/java/java_test.go @@ -1847,9 +1847,17 @@ func TestDeviceBinaryWrapperGeneration(t *testing.T) { } func TestJavaApiContributionEmptyApiFile(t *testing.T) { - testJavaError(t, + android.GroupFixturePreparers( + prepareForJavaTest, + android.FixtureMergeEnv( + map[string]string{ + "DISABLE_STUB_VALIDATION": "true", + }, + ), + ).ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern( "Error: foo has an empty api file.", - `java_api_contribution { + )).RunTestWithBp(t, ` + java_api_contribution { name: "foo", } java_api_library { @@ -1874,7 +1882,20 @@ func TestJavaApiLibraryAndProviderLink(t *testing.T) { api_surface: "public", } ` - ctx, _ := testJavaWithFS(t, ` + ctx := android.GroupFixturePreparers( + prepareForJavaTest, + android.FixtureMergeMockFs( + map[string][]byte{ + "a/Android.bp": []byte(provider_bp_a), + "b/Android.bp": []byte(provider_bp_b), + }, + ), + android.FixtureMergeEnv( + map[string]string{ + "DISABLE_STUB_VALIDATION": "true", + }, + ), + ).RunTestWithBp(t, ` java_api_library { name: "bar1", api_surface: "public", @@ -1886,11 +1907,7 @@ func TestJavaApiLibraryAndProviderLink(t *testing.T) { api_surface: "system", api_contributions: ["foo1", "foo2"], } - `, - map[string][]byte{ - "a/Android.bp": []byte(provider_bp_a), - "b/Android.bp": []byte(provider_bp_b), - }) + `) testcases := []struct { moduleName string @@ -1944,7 +1961,22 @@ func TestJavaApiLibraryAndDefaultsLink(t *testing.T) { api_surface: "system", } ` - ctx, _ := testJavaWithFS(t, ` + ctx := android.GroupFixturePreparers( + prepareForJavaTest, + android.FixtureMergeMockFs( + map[string][]byte{ + "a/Android.bp": []byte(provider_bp_a), + "b/Android.bp": []byte(provider_bp_b), + "c/Android.bp": []byte(provider_bp_c), + "d/Android.bp": []byte(provider_bp_d), + }, + ), + android.FixtureMergeEnv( + map[string]string{ + "DISABLE_STUB_VALIDATION": "true", + }, + ), + ).RunTestWithBp(t, ` java_defaults { name: "baz1", api_surface: "public", @@ -1975,13 +2007,7 @@ func TestJavaApiLibraryAndDefaultsLink(t *testing.T) { defaults:["baz1", "baz2"], api_contributions: ["foo4"], } - `, - map[string][]byte{ - "a/Android.bp": []byte(provider_bp_a), - "b/Android.bp": []byte(provider_bp_b), - "c/Android.bp": []byte(provider_bp_c), - "d/Android.bp": []byte(provider_bp_d), - }) + `) testcases := []struct { moduleName string @@ -2026,7 +2052,20 @@ func TestJavaApiLibraryJarGeneration(t *testing.T) { api_surface: "public", } ` - ctx, _ := testJavaWithFS(t, ` + ctx := android.GroupFixturePreparers( + prepareForJavaTest, + android.FixtureMergeMockFs( + map[string][]byte{ + "a/Android.bp": []byte(provider_bp_a), + "b/Android.bp": []byte(provider_bp_b), + }, + ), + android.FixtureMergeEnv( + map[string]string{ + "DISABLE_STUB_VALIDATION": "true", + }, + ), + ).RunTestWithBp(t, ` java_api_library { name: "bar1", api_surface: "public", @@ -2038,11 +2077,7 @@ func TestJavaApiLibraryJarGeneration(t *testing.T) { api_surface: "system", api_contributions: ["foo1", "foo2"], } - `, - map[string][]byte{ - "a/Android.bp": []byte(provider_bp_a), - "b/Android.bp": []byte(provider_bp_b), - }) + `) testcases := []struct { moduleName string @@ -2094,7 +2129,24 @@ func TestJavaApiLibraryLibsLink(t *testing.T) { } ` - ctx, _ := testJavaWithFS(t, ` + ctx := android.GroupFixturePreparers( + prepareForJavaTest, + android.FixtureMergeMockFs( + map[string][]byte{ + "a/Android.bp": []byte(provider_bp_a), + "b/Android.bp": []byte(provider_bp_b), + "c/Android.bp": []byte(lib_bp_a), + "c/Lib.java": {}, + "d/Android.bp": []byte(lib_bp_b), + "d/Lib.java": {}, + }, + ), + android.FixtureMergeEnv( + map[string]string{ + "DISABLE_STUB_VALIDATION": "true", + }, + ), + ).RunTestWithBp(t, ` java_api_library { name: "bar1", api_surface: "public", @@ -2108,15 +2160,7 @@ func TestJavaApiLibraryLibsLink(t *testing.T) { api_contributions: ["foo1", "foo2"], libs: ["lib1", "lib2", "bar1"], } - `, - map[string][]byte{ - "a/Android.bp": []byte(provider_bp_a), - "b/Android.bp": []byte(provider_bp_b), - "c/Android.bp": []byte(lib_bp_a), - "c/Lib.java": {}, - "d/Android.bp": []byte(lib_bp_b), - "d/Lib.java": {}, - }) + `) testcases := []struct { moduleName string @@ -2171,7 +2215,24 @@ func TestJavaApiLibraryStaticLibsLink(t *testing.T) { } ` - ctx, _ := testJavaWithFS(t, ` + ctx := android.GroupFixturePreparers( + prepareForJavaTest, + android.FixtureMergeMockFs( + map[string][]byte{ + "a/Android.bp": []byte(provider_bp_a), + "b/Android.bp": []byte(provider_bp_b), + "c/Android.bp": []byte(lib_bp_a), + "c/Lib.java": {}, + "d/Android.bp": []byte(lib_bp_b), + "d/Lib.java": {}, + }, + ), + android.FixtureMergeEnv( + map[string]string{ + "DISABLE_STUB_VALIDATION": "true", + }, + ), + ).RunTestWithBp(t, ` java_api_library { name: "bar1", api_surface: "public", @@ -2185,15 +2246,7 @@ func TestJavaApiLibraryStaticLibsLink(t *testing.T) { api_contributions: ["foo1", "foo2"], static_libs: ["lib1", "lib2", "bar1"], } - `, - map[string][]byte{ - "a/Android.bp": []byte(provider_bp_a), - "b/Android.bp": []byte(provider_bp_b), - "c/Android.bp": []byte(lib_bp_a), - "c/Lib.java": {}, - "d/Android.bp": []byte(lib_bp_b), - "d/Lib.java": {}, - }) + `) testcases := []struct { moduleName string @@ -2242,19 +2295,28 @@ func TestJavaApiLibraryFullApiSurfaceStub(t *testing.T) { } ` - ctx, _ := testJavaWithFS(t, ` + ctx := android.GroupFixturePreparers( + prepareForJavaTest, + android.FixtureMergeMockFs( + map[string][]byte{ + "a/Android.bp": []byte(provider_bp_a), + "b/Android.bp": []byte(provider_bp_b), + "c/Android.bp": []byte(lib_bp_a), + }, + ), + android.FixtureMergeEnv( + map[string]string{ + "DISABLE_STUB_VALIDATION": "true", + }, + ), + ).RunTestWithBp(t, ` java_api_library { name: "bar1", api_surface: "public", api_contributions: ["foo1"], full_api_surface_stub: "lib1", } - `, - map[string][]byte{ - "a/Android.bp": []byte(provider_bp_a), - "b/Android.bp": []byte(provider_bp_b), - "c/Android.bp": []byte(lib_bp_a), - }) + `) m := ctx.ModuleForTests("bar1", "android_common") manifest := m.Output("metalava.sbox.textproto") @@ -2402,7 +2464,14 @@ func TestHeadersOnly(t *testing.T) { } func TestJavaApiContributionImport(t *testing.T) { - ctx, _ := testJava(t, ` + ctx := android.GroupFixturePreparers( + prepareForJavaTest, + android.FixtureMergeEnv( + map[string]string{ + "DISABLE_STUB_VALIDATION": "true", + }, + ), + ).RunTestWithBp(t, ` java_api_library { name: "foo", api_contributions: ["bar"], @@ -2483,3 +2552,50 @@ func TestSdkLibraryProvidesSystemModulesToApiLibrary(t *testing.T) { classPathFlag := "--classpath __SBOX_SANDBOX_DIR__/out/.intermediates/bar/android_common/turbine-combined/bar.jar" android.AssertStringDoesContain(t, "command expected to contain classpath flag", manifestCommand, classPathFlag) } + +func TestApiLibraryDroidstubsDependency(t *testing.T) { + result := android.GroupFixturePreparers( + prepareForJavaTest, + PrepareForTestWithJavaSdkLibraryFiles, + FixtureWithLastReleaseApis("foo"), + android.FixtureModifyConfig(func(config android.Config) { + config.SetApiLibraries([]string{"foo"}) + }), + android.FixtureMergeMockFs( + map[string][]byte{ + "A.java": nil, + }, + ), + ).RunTestWithBp(t, ` + java_api_library { + name: "foo", + api_contributions: [ + "api-stubs-docs-non-updatable.api.contribution", + ], + enable_validation: true, + } + java_api_library { + name: "bar", + api_contributions: [ + "api-stubs-docs-non-updatable.api.contribution", + ], + enable_validation: false, + } + `) + + currentApiTimestampPath := "api-stubs-docs-non-updatable/android_common/metalava/check_current_api.timestamp" + foo := result.ModuleForTests("foo", "android_common").Module().(*ApiLibrary) + fooValidationPathsString := strings.Join(foo.validationPaths.Strings(), " ") + bar := result.ModuleForTests("bar", "android_common").Module().(*ApiLibrary) + barValidationPathsString := strings.Join(bar.validationPaths.Strings(), " ") + android.AssertStringDoesContain(t, + "Module expected to have validation", + fooValidationPathsString, + currentApiTimestampPath, + ) + android.AssertStringDoesNotContain(t, + "Module expected to not have validation", + barValidationPathsString, + currentApiTimestampPath, + ) +} diff --git a/java/sdk_library.go b/java/sdk_library.go index f72c6086f..041aeb786 100644 --- a/java/sdk_library.go +++ b/java/sdk_library.go @@ -1838,6 +1838,7 @@ func (module *SdkLibrary) createApiLibrary(mctx android.DefaultableHookContext, Static_libs []string Full_api_surface_stub *string System_modules *string + Enable_validation *bool }{} props.Name = proptools.StringPtr(module.apiLibraryModuleName(apiScope)) @@ -1876,7 +1877,16 @@ func (module *SdkLibrary) createApiLibrary(mctx android.DefaultableHookContext, props.Full_api_surface_stub = proptools.StringPtr(apiScope.kind.DefaultJavaLibraryName() + "_full.from-text") } + // java_sdk_library modules that set sdk_version as none does not depend on other api + // domains. Therefore, java_api_library created from such modules should not depend on + // full_api_surface_stubs but create and compile stubs by the java_api_library module + // itself. + if module.SdkVersion(mctx).Kind == android.SdkNone { + props.Full_api_surface_stub = nil + } + props.System_modules = module.deviceProperties.System_modules + props.Enable_validation = proptools.BoolPtr(true) mctx.CreateModule(ApiLibraryFactory, &props) } diff --git a/rust/builder.go b/rust/builder.go index bea8ff717..fe2d03a0b 100644 --- a/rust/builder.go +++ b/rust/builder.go @@ -278,7 +278,9 @@ func transformSrctoCrate(ctx ModuleContext, main android.Path, deps PathDeps, fl if ctx.Config().IsEnvTrue("SOONG_RUSTC_INCREMENTAL") { incrementalPath := android.PathForOutput(ctx, "rustc").String() - rustcFlags = append(rustcFlags, "-Cincremental="+incrementalPath) + rustcFlags = append(rustcFlags, "-C incremental="+incrementalPath) + } else { + rustcFlags = append(rustcFlags, "-C codegen-units=1") } // Disallow experimental features diff --git a/rust/config/global.go b/rust/config/global.go index 4397d585c..b94d92fd9 100644 --- a/rust/config/global.go +++ b/rust/config/global.go @@ -44,7 +44,6 @@ var ( GlobalRustFlags = []string{ "-Z stack-protector=strong", "-Z remap-cwd-prefix=.", - "-C codegen-units=1", "-C debuginfo=2", "-C opt-level=3", "-C relocation-model=pic", @@ -55,7 +54,7 @@ var ( // This flag requires to have no space so that when it's exported to bazel // it can be removed. See aosp/2768339 "--color=always", - "-Zdylib-lto", + "-Z dylib-lto", "-Z link-native-libraries=no", } diff --git a/scripts/manifest_check.py b/scripts/manifest_check.py index c8d4f76c8..c33b104bd 100755 --- a/scripts/manifest_check.py +++ b/scripts/manifest_check.py @@ -187,18 +187,17 @@ def extract_uses_libs_apk(badging): return required, optional, tags -def extract_uses_libs_xml(xml): #pylint: disable=inconsistent-return-statements +def extract_uses_libs_xml(xml): """Extract <uses-library> tags from the manifest.""" manifest = parse_manifest(xml) elems = get_children_with_tag(manifest, 'application') - application = elems[0] if len(elems) == 1 else None - if len(elems) > 1: #pylint: disable=no-else-raise + if len(elems) > 1: raise RuntimeError('found multiple <application> tags') - elif not elems: - if uses_libraries or optional_uses_libraries: #pylint: disable=undefined-variable - raise ManifestMismatchError('no <application> tag found') - return + if not elems: + return [], [], [] + + application = elems[0] libs = get_children_with_tag(application, 'uses-library') |