1// Copyright (C) 2019 The Android Open Source Project 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15// How stubs are generated: 16// 17// raw source files --(metalava)--> stub source files --(javac)--> stub jar files 18// 19// The metalava conversion is done by droidstub modules *-api-stubs-docs. 20// The javac compilation is done by java_library modules android_*_stubs_current. 21// The metalava conversion is also responsible for creating API signature files 22// and comparing them against the last API signature in api/*-current.txt files 23// and also against the latest frozen API signature in prebuilts/sdk/*/*/api/android.txt 24// files. 25 26///////////////////////////////////////////////////////////////////// 27// Common metalava configs 28///////////////////////////////////////////////////////////////////// 29 30packages_to_document = [ 31 "android", 32 "dalvik", 33 "java", 34 "javax", 35 "junit", 36 "org.apache.http", 37 "org.json", 38 "org.w3c.dom", 39 "org.xml.sax", 40 "org.xmlpull", 41] 42 43stubs_defaults { 44 name: "metalava-base-api-stubs-default", 45 srcs: [ 46 ":framework-non-updatable-sources", 47 "core/java/**/*.logtags", 48 ":opt-telephony-srcs", 49 ":opt-net-voip-srcs", 50 ":art-module-public-api-stubs-source", 51 ":android_icu4j_public_api_files", 52 ], 53 // TODO(b/147699819): remove below aidl includes. 54 aidl: { 55 local_include_dirs: ["telephony/java"], 56 }, 57 libs: ["framework-internal-utils"], 58 installable: false, 59 annotations_enabled: true, 60 previous_api: ":android.api.public.latest", 61 merge_annotations_dirs: [ 62 "metalava-manual", 63 ], 64 api_levels_annotations_enabled: false, 65 filter_packages: packages_to_document, 66} 67 68stubs_defaults { 69 name: "metalava-full-api-stubs-default", 70 defaults: ["metalava-base-api-stubs-default"], 71 srcs: [ 72 ":conscrypt.module.public.api{.public.stubs.source}", 73 ":framework-updatable-sources", 74 ], 75 sdk_version: "core_platform", 76} 77 78stubs_defaults { 79 name: "metalava-non-updatable-api-stubs-default", 80 defaults: ["metalava-base-api-stubs-default"], 81 sdk_version: "core_platform", 82 // There are a few classes from modules used as type arguments that 83 // need to be resolved by metalava. For now, we can use a previously 84 // finalized stub library to resolve them. If a new class gets added, 85 // this may be need to be revisited to use a manually maintained stub 86 // library with empty classes in order to resolve those references. 87 libs: ["sdk_system_30_android"], 88 aidl: { 89 local_include_dirs: ["apex/media/aidl/stable"], 90 }, 91} 92 93///////////////////////////////////////////////////////////////////// 94// *-api-stubs-docs modules providing source files for the stub libraries 95///////////////////////////////////////////////////////////////////// 96 97// api-stubs-docs, system-api-stubs-docs, and test-api-stubs-docs have APIs 98// from the non-updatable part of the platform as well as from the updatable 99// modules 100droidstubs { 101 name: "api-stubs-docs", 102 defaults: ["metalava-full-api-stubs-default"], 103 removed_dex_api_filename: "removed-dex.txt", 104 arg_files: [ 105 "core/res/AndroidManifest.xml", 106 ], 107 args: metalava_framework_docs_args, 108 check_api: { 109 current: { 110 api_file: "api/current.txt", 111 removed_api_file: "api/removed.txt", 112 }, 113 last_released: { 114 api_file: ":android.api.public.latest", 115 removed_api_file: ":removed.api.public.latest", 116 baseline_file: ":public-api-incompatibilities-with-last-released", 117 }, 118 api_lint: { 119 enabled: true, 120 new_since: ":android.api.public.latest", 121 baseline_file: "api/lint-baseline.txt", 122 }, 123 }, 124 dist: { 125 targets: ["sdk", "win_sdk"], 126 dir: "apistubs/android/public/api", 127 dest: "android.txt", 128 }, 129 jdiff_enabled: true, 130} 131 132droidstubs { 133 name: "api-stubs-docs-non-updatable", 134 defaults: ["metalava-non-updatable-api-stubs-default"], 135 arg_files: ["core/res/AndroidManifest.xml"], 136 args: metalava_framework_docs_args, 137 check_api: { 138 current: { 139 api_file: "non-updatable-api/current.txt", 140 removed_api_file: "non-updatable-api/removed.txt", 141 }, 142 api_lint: { 143 enabled: true, 144 new_since: ":android-non-updatable.api.public.latest", 145 }, 146 }, 147} 148 149priv_apps = " " + 150 "--show-annotation android.annotation.SystemApi\\(" + 151 "client=android.annotation.SystemApi.Client.PRIVILEGED_APPS" + 152 "\\) " 153 154module_libs = " " + 155 " --show-annotation android.annotation.SystemApi\\(" + 156 "client=android.annotation.SystemApi.Client.MODULE_LIBRARIES" + 157 "\\) " 158 159droidstubs { 160 name: "system-api-stubs-docs", 161 defaults: ["metalava-full-api-stubs-default"], 162 removed_dex_api_filename: "system-removed-dex.txt", 163 arg_files: [ 164 "core/res/AndroidManifest.xml", 165 ], 166 args: metalava_framework_docs_args + priv_apps, 167 check_api: { 168 current: { 169 api_file: "api/system-current.txt", 170 removed_api_file: "api/system-removed.txt", 171 }, 172 last_released: { 173 api_file: ":android.api.system.latest", 174 removed_api_file: ":removed.api.system.latest", 175 baseline_file: ":system-api-incompatibilities-with-last-released" 176 }, 177 api_lint: { 178 enabled: true, 179 new_since: ":android.api.system.latest", 180 baseline_file: "api/system-lint-baseline.txt", 181 }, 182 }, 183 dist: { 184 targets: ["sdk", "win_sdk"], 185 dir: "apistubs/android/system/api", 186 dest: "android.txt", 187 }, 188 jdiff_enabled: true, 189} 190 191droidstubs { 192 name: "system-api-stubs-docs-non-updatable", 193 defaults: ["metalava-non-updatable-api-stubs-default"], 194 arg_files: ["core/res/AndroidManifest.xml"], 195 args: metalava_framework_docs_args + priv_apps, 196 check_api: { 197 current: { 198 api_file: "non-updatable-api/system-current.txt", 199 removed_api_file: "non-updatable-api/system-removed.txt", 200 }, 201 api_lint: { 202 enabled: true, 203 new_since: ":android-non-updatable.api.system.latest", 204 baseline_file: "non-updatable-api/system-lint-baseline.txt", 205 }, 206 }, 207} 208 209droidstubs { 210 name: "test-api-stubs-docs", 211 defaults: ["metalava-full-api-stubs-default"], 212 arg_files: [ 213 "core/res/AndroidManifest.xml", 214 ], 215 args: metalava_framework_docs_args + " --show-annotation android.annotation.TestApi", 216 check_api: { 217 current: { 218 api_file: "api/test-current.txt", 219 removed_api_file: "api/test-removed.txt", 220 }, 221 api_lint: { 222 enabled: true, 223 baseline_file: "api/test-lint-baseline.txt", 224 }, 225 }, 226 dist: { 227 targets: ["sdk", "win_sdk"], 228 dir: "apistubs/android/test/api", 229 dest: "android.txt", 230 }, 231} 232 233///////////////////////////////////////////////////////////////////// 234// Following droidstubs modules are for extra APIs for modules. 235// The framework currently have two more API surfaces for modules: 236// @SystemApi(client=MODULE_APPS) and @SystemApi(client=MODULE_LIBRARIES) 237///////////////////////////////////////////////////////////////////// 238 239// TODO(b/146727827) remove the *-api module when we can teach metalava 240// about the relationship among the API surfaces. Currently, these modules are only to generate 241// the API signature files and ensure that the APIs evolve in a backwards compatible manner. 242// They however are NOT used for building the API stub. 243 244droidstubs { 245 name: "module-lib-api", 246 defaults: ["metalava-full-api-stubs-default"], 247 arg_files: ["core/res/AndroidManifest.xml"], 248 args: metalava_framework_docs_args + module_libs, 249 check_api: { 250 current: { 251 api_file: "api/module-lib-current.txt", 252 removed_api_file: "api/module-lib-removed.txt", 253 }, 254 last_released: { 255 api_file: ":android.api.module-lib.latest", 256 removed_api_file: ":removed.api.module-lib.latest", 257 baseline_file: ":module-lib-api-incompatibilities-with-last-released" 258 }, 259 api_lint: { 260 enabled: true, 261 new_since: ":android.api.module-lib.latest", 262 baseline_file: "api/module-lib-lint-baseline.txt", 263 }, 264 }, 265 dist: { 266 targets: ["sdk", "win_sdk"], 267 dir: "apistubs/android/module-lib/api", 268 dest: "android.txt", 269 }, 270} 271 272droidstubs { 273 name: "module-lib-api-stubs-docs-non-updatable", 274 defaults: ["metalava-non-updatable-api-stubs-default"], 275 arg_files: ["core/res/AndroidManifest.xml"], 276 args: metalava_framework_docs_args + module_libs, 277 check_api: { 278 current: { 279 api_file: "non-updatable-api/module-lib-current.txt", 280 removed_api_file: "non-updatable-api/module-lib-removed.txt", 281 }, 282 api_lint: { 283 enabled: true, 284 new_since: ":android-non-updatable.api.module-lib.latest", 285 }, 286 }, 287} 288 289// The following droidstub module generates source files for the API stub library for 290// modules. Note that it not only includes its own APIs but also other APIs that have 291// narrower scope (all @SystemApis, not just the ones with 'client=MODULE_LIBRARIES'). 292 293droidstubs { 294 name: "module-lib-api-stubs-docs", 295 defaults: ["metalava-non-updatable-api-stubs-default"], 296 arg_files: ["core/res/AndroidManifest.xml"], 297 args: metalava_framework_docs_args + priv_apps + module_libs, 298} 299 300///////////////////////////////////////////////////////////////////// 301// android_*_stubs_current modules are the stubs libraries compiled 302// from *-api-stubs-docs 303///////////////////////////////////////////////////////////////////// 304 305java_defaults { 306 name: "android_defaults_stubs_current", 307 libs: [ "stub-annotations" ], 308 static_libs: [ 309 "framework-res-package-jar", // Export package of framework-res 310 ], 311 errorprone: { 312 javacflags: [ 313 "-XepDisableAllChecks", 314 ], 315 }, 316 java_resources: [":notices-for-framework-stubs"], 317 sdk_version: "none", 318 system_modules: "none", 319 java_version: "1.8", 320 compile_dex: true, 321} 322 323java_library_static { 324 name: "android_monolith_stubs_current", 325 srcs: [ ":api-stubs-docs" ], 326 static_libs: [ "private-stub-annotations-jar" ], 327 defaults: ["android_defaults_stubs_current"], 328} 329 330java_library_static { 331 name: "android_merged_stubs_current", 332 srcs: [ ":api-stubs-docs-non-updatable" ], 333 static_libs: [ 334 "conscrypt.module.public.api.stubs", 335 "framework-media.stubs", 336 "framework-mediaprovider.stubs", 337 "framework-permission.stubs", 338 "framework-sdkextensions.stubs", 339 "framework-statsd.stubs", 340 "framework-tethering.stubs", 341 "framework-wifi.stubs", 342 "private-stub-annotations-jar", 343 ], 344 defaults: ["android_defaults_stubs_current"], 345} 346 347java_library_static { 348 name: "android_stubs_current", 349 static_libs: ["android_merged_stubs_current"], 350 defaults: ["android_defaults_stubs_current"], 351} 352 353java_library_static { 354 name: "android_system_monolith_stubs_current", 355 srcs: [ ":system-api-stubs-docs" ], 356 static_libs: [ "private-stub-annotations-jar" ], 357 defaults: ["android_defaults_stubs_current"], 358} 359 360java_library_static { 361 name: "android_system_merged_stubs_current", 362 srcs: [ ":system-api-stubs-docs-non-updatable" ], 363 static_libs: [ 364 "conscrypt.module.public.api.stubs", 365 "framework-media.stubs.system", 366 "framework-mediaprovider.stubs.system", 367 "framework-permission.stubs.system", 368 "framework-sdkextensions.stubs.system", 369 "framework-statsd.stubs.system", 370 "framework-tethering.stubs.system", 371 "framework-wifi.stubs.system", 372 "private-stub-annotations-jar", 373 ], 374 defaults: ["android_defaults_stubs_current"], 375} 376 377java_library_static { 378 name: "android_system_stubs_current", 379 static_libs: ["android_system_merged_stubs_current"], 380 defaults: ["android_defaults_stubs_current"], 381} 382 383java_library_static { 384 name: "android_test_stubs_current", 385 srcs: [ ":test-api-stubs-docs" ], 386 static_libs: [ "private-stub-annotations-jar" ], 387 defaults: ["android_defaults_stubs_current"], 388} 389 390java_library_static { 391 name: "android_module_lib_stubs_current", 392 srcs: [ ":module-lib-api-stubs-docs" ], 393 defaults: ["android_defaults_stubs_current"], 394 libs: ["sdk_system_29_android"], 395} 396 397java_library_static { 398 name: "android_non_updatable_stubs_current", 399 srcs: [":api-stubs-docs-non-updatable"], 400 defaults: ["android_defaults_stubs_current"], 401 libs: ["sdk_system_29_android"], 402} 403 404java_library_static { 405 name: "android_system_non_updatable_stubs_current", 406 srcs: [":system-api-stubs-docs-non-updatable"], 407 defaults: ["android_defaults_stubs_current"], 408 libs: ["sdk_system_29_android"], 409} 410 411///////////////////////////////////////////////////////////////////// 412// hwbinder.stubs provides APIs required for building HIDL Java 413// libraries. 414///////////////////////////////////////////////////////////////////// 415 416droidstubs { 417 name: "hwbinder-stubs-docs", 418 srcs: [ 419 "core/java/android/os/HidlSupport.java", 420 "core/java/android/annotation/IntDef.java", 421 "core/java/android/annotation/IntRange.java", 422 "core/java/android/annotation/NonNull.java", 423 "core/java/android/annotation/SystemApi.java", 424 "core/java/android/os/HidlMemory.java", 425 "core/java/android/os/HwBinder.java", 426 "core/java/android/os/HwBlob.java", 427 "core/java/android/os/HwParcel.java", 428 "core/java/android/os/IHwBinder.java", 429 "core/java/android/os/IHwInterface.java", 430 "core/java/android/os/DeadObjectException.java", 431 "core/java/android/os/DeadSystemException.java", 432 "core/java/android/os/NativeHandle.java", 433 "core/java/android/os/RemoteException.java", 434 "core/java/android/util/AndroidException.java", 435 ], 436 installable: false, 437 sdk_version: "core_platform", 438 annotations_enabled: true, 439 previous_api: ":android.api.public.latest", 440 merge_annotations_dirs: [ 441 "metalava-manual", 442 ], 443 args: priv_apps, 444} 445 446java_library_static { 447 name: "hwbinder.stubs", 448 sdk_version: "core_current", 449 srcs: [ 450 ":hwbinder-stubs-docs", 451 ], 452} 453 454///////////////////////////////////////////////////////////////////// 455// api/*-current.txt files for use by modules in other directories 456// like the CTS test 457///////////////////////////////////////////////////////////////////// 458 459filegroup { 460 name: "frameworks-base-api-current.txt", 461 srcs: [ 462 "api/current.txt", 463 ], 464} 465 466filegroup { 467 name: "frameworks-base-api-system-current.txt", 468 srcs: [ 469 "api/system-current.txt", 470 ], 471} 472 473filegroup { 474 name: "frameworks-base-api-system-removed.txt", 475 srcs: [ 476 "api/system-removed.txt", 477 ], 478} 479