• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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