From e7a9d09ac576191f9123a7321ca344b0f61b1d77 Mon Sep 17 00:00:00 2001 From: Anton Hansson Date: Tue, 2 Feb 2021 17:30:21 +0000 Subject: [PATCH] Move shared module build rules to common repo This decouples modules from frameworks/base, and this repo also has a different automerger strategy. Add //frameworks/base/apex:__subpackages__ to the defaults_visibility to preserve the existing behavior. Test: m Merged-In: I1cf8cbbccf042a8503bf751ab057742cca357585 Change-Id: I1cf8cbbccf042a8503bf751ab057742cca357585 --- sdk/Android.bp | 205 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 205 insertions(+) create mode 100644 sdk/Android.bp diff --git a/sdk/Android.bp b/sdk/Android.bp new file mode 100644 index 0000000..0969e3a --- /dev/null +++ b/sdk/Android.bp @@ -0,0 +1,205 @@ +// Copyright (C) 2019 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package { + default_visibility: [":__subpackages__"], +} + +mainline_stubs_args = + "--error UnhiddenSystemApi " + + "--hide BroadcastBehavior " + + "--hide CallbackInterface " + + "--hide DeprecationMismatch " + + "--hide HiddenSuperclass " + + "--hide HiddenTypedefConstant " + + "--hide HiddenTypeParameter " + + "--hide MissingPermission " + + "--hide RequiresPermission " + + "--hide SdkConstant " + + "--hide Todo " + + "--hide Typo " + + "--hide UnavailableSymbol " + +// TODO: modularize this so not every module has the same whitelist +framework_packages_to_document = [ + "android", + "dalvik", + "java", + "javax", + "junit", + "org.apache.http", + "org.json", + "org.w3c.dom", + "org.xml.sax", + "org.xmlpull", +] + +// TODO: remove the hiding when server classes are cleaned up. +mainline_framework_stubs_args = + mainline_stubs_args + + "--hide-package com.android.server " + +priv_apps = " " + + "--show-annotation android.annotation.SystemApi\\(" + + "client=android.annotation.SystemApi.Client.PRIVILEGED_APPS" + + "\\) " + +module_libs = " " + + " --show-annotation android.annotation.SystemApi\\(" + + "client=android.annotation.SystemApi.Client.MODULE_LIBRARIES" + + "\\)" + + " --show-for-stub-purposes-annotation android.annotation.SystemApi\\(" + + "client=android.annotation.SystemApi.Client.PRIVILEGED_APPS" + + "\\) " + +mainline_service_stubs_args = + mainline_stubs_args + + "--show-annotation android.annotation.SystemApi\\(" + + "client=android.annotation.SystemApi.Client.SYSTEM_SERVER" + + "\\) " + + "--hide-annotation android.annotation.Hide " + + "--hide InternalClasses " // com.android.* classes are okay in this interface + +// Defaults common to all mainline module java_sdk_library instances. +java_defaults { + name: "framework-module-common-defaults", + + // Additional annotations used for compiling both the implementation and the + // stubs libraries. + libs: ["framework-annotations-lib"], + + // Framework modules are not generally shared libraries, i.e. they are not + // intended, and must not be allowed, to be used in a manifest + // entry. + shared_library: false, + + // Prevent dependencies that do not specify an sdk_version from accessing the + // implementation library by default and force them to use stubs instead. + default_to_stubs: true, + + // Enable api lint. This will eventually become the default for java_sdk_library + // but it cannot yet be turned on because some usages have not been cleaned up. + // TODO(b/156126315) - Remove when no longer needed. + api_lint: { + enabled: true, + }, + + // The API scope specific properties. + public: { + enabled: true, + sdk_version: "module_current", + }, + + // installable implies we'll create a non-apex (platform) variant, which + // we shouldn't ordinarily need (and it can create issues), so disable that. + installable: false, + + // Configure framework module specific metalava options. + droiddoc_options: [mainline_stubs_args], + + annotations_enabled: true, + + // Allow access to the stubs from anywhere + visibility: ["//visibility:public"], + stubs_library_visibility: ["//visibility:public"], + + // Hide impl library and stub sources + impl_library_visibility: [ + ":__pkg__", + "//frameworks/base", // For framework-all + ], + stubs_source_visibility: ["//visibility:private"], + + defaults_visibility: ["//visibility:private"], + + // Collates API usages from each module for further analysis. + plugins: ["java_api_finder"], + + // Mainline modules should only rely on 'module_lib' APIs provided by other modules + // and the non updatable parts of the platform. + sdk_version: "module_current", +} + +// Defaults for mainline module provided java_sdk_library instances. +java_defaults { + name: "framework-module-defaults", + defaults: ["framework-module-common-defaults"], + + system: { + enabled: true, + sdk_version: "module_current", + }, + module_lib: { + enabled: true, + sdk_version: "module_current", + }, + defaults_visibility: [ + ":__subpackages__", + "//frameworks/base/apex:__subpackages__", + "//frameworks/base/libs/hwui", + "//frameworks/base/wifi", + "//packages/modules:__subpackages__", + "//packages/providers/MediaProvider:__subpackages__", + ], +} + +// Defaults for mainline module system server provided java_sdk_library instances. +java_defaults { + name: "framework-system-server-module-defaults", + defaults: ["framework-module-common-defaults"], + + system_server: { + enabled: true, + sdk_version: "module_current", + }, + defaults_visibility: [ + ":__subpackages__", + "//frameworks/base/apex:__subpackages__", + "//packages/modules:__subpackages__", + ], +} + +stubs_defaults { + name: "service-module-stubs-srcs-defaults", + args: mainline_service_stubs_args, + installable: false, + annotations_enabled: true, + merge_annotations_dirs: [ + "metalava-manual", + ], + filter_packages: ["com.android."], + check_api: { + current: { + api_file: "api/current.txt", + removed_api_file: "api/removed.txt", + }, + api_lint: { + enabled: true, + }, + }, + dist: { + targets: ["sdk", "win_sdk"], + dir: "apistubs/android/system-server/api", + }, +} + +// Empty for now, but a convenient place to add rules for all +// module java_library system_server stub libs. +java_defaults { + name: "service-module-stubs-defaults", + dist: { + targets: ["sdk", "win_sdk"], + dir: "apistubs/android/system-server", + }, +}