1// Copyright (C) 2020 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
15package {
16    default_visibility: ["//visibility:private"],
17    // See: http://go/android-license-faq
18    // A large-scale-change added 'default_applicable_licenses' to import
19    // all of the 'license_kinds' from "frameworks_base_license"
20    // to get the below license kinds:
21    //   SPDX-license-identifier-Apache-2.0
22    //   SPDX-license-identifier-MIT
23    //   SPDX-license-identifier-Unicode-DFS
24    default_applicable_licenses: ["frameworks_base_license"],
25}
26
27python_binary_host {
28    name: "api_versions_trimmer",
29    srcs: ["api_versions_trimmer.py"],
30    version: {
31        py2: {
32            enabled: false,
33        },
34        py3: {
35            enabled: true,
36            embedded_launcher: false,
37        },
38    },
39}
40
41python_test_host {
42    name: "api_versions_trimmer_unittests",
43    main: "api_versions_trimmer_unittests.py",
44    srcs: [
45        "api_versions_trimmer_unittests.py",
46        "api_versions_trimmer.py",
47    ],
48    test_options: {
49        unit_test: true,
50    },
51    version: {
52        py2: {
53            enabled: false,
54        },
55        py3: {
56            enabled: true,
57            embedded_launcher: false,
58        },
59    },
60}
61
62metalava_cmd = "$(location metalava)"
63// Silence reflection warnings. See b/168689341
64metalava_cmd += " -J--add-opens=java.base/java.util=ALL-UNNAMED "
65metalava_cmd += " --no-banner --format=v2 "
66
67genrule {
68    name: "current-api-xml",
69    tools: ["metalava"],
70    srcs: [":frameworks-base-api-current.txt"],
71    out: ["current.api"],
72    cmd: metalava_cmd + "-convert2xmlnostrip $(in) $(out)",
73    visibility: ["//visibility:public"],
74}
75
76genrule {
77    name: "frameworks-base-api-current.txt",
78    srcs: [
79        ":android.net.ipsec.ike{.public.api.txt}",
80        ":art.module.public.api{.public.api.txt}",
81        ":conscrypt.module.public.api{.public.api.txt}",
82        ":framework-appsearch{.public.api.txt}",
83        ":framework-connectivity{.public.api.txt}",
84        ":framework-graphics{.public.api.txt}",
85        ":framework-media{.public.api.txt}",
86        ":framework-mediaprovider{.public.api.txt}",
87        ":framework-permission{.public.api.txt}",
88        ":framework-permission-s{.public.api.txt}",
89        ":framework-scheduling{.public.api.txt}",
90        ":framework-sdkextensions{.public.api.txt}",
91        ":framework-statsd{.public.api.txt}",
92        ":framework-tethering{.public.api.txt}",
93        ":framework-wifi{.public.api.txt}",
94        ":i18n.module.public.api{.public.api.txt}",
95        ":non-updatable-current.txt",
96    ],
97    out: ["current.txt"],
98    tools: ["metalava"],
99    cmd: metalava_cmd + "$(in) --api $(out)",
100    dists: [
101        {
102            targets: ["droidcore"],
103            dir: "api",
104            dest: "current.txt",
105        },
106        {
107            targets: [
108                "sdk",
109                "win_sdk",
110            ],
111            dir: "apistubs/android/public/api",
112            dest: "android.txt",
113        },
114    ],
115    visibility: ["//visibility:public"],
116}
117
118genrule {
119    name: "frameworks-base-api-current-compat",
120    srcs: [
121        ":android.api.public.latest",
122        ":android-incompatibilities.api.public.latest",
123        ":frameworks-base-api-current.txt",
124    ],
125    out: ["stdout.txt"],
126    tools: ["metalava"],
127    cmd: metalava_cmd +
128        "--check-compatibility:api:released $(location :android.api.public.latest) " +
129        "--baseline:compatibility:released $(location :android-incompatibilities.api.public.latest) " +
130        "$(location :frameworks-base-api-current.txt) " +
131        "> $(genDir)/stdout.txt",
132}
133
134genrule {
135    name: "frameworks-base-api-current.srcjar",
136    srcs: [
137        ":android.net.ipsec.ike{.public.stubs.source}",
138        ":api-stubs-docs-non-updatable",
139        ":art.module.public.api{.public.stubs.source}",
140        ":conscrypt.module.public.api{.public.stubs.source}",
141        ":framework-appsearch{.public.stubs.source}",
142        ":framework-connectivity{.public.stubs.source}",
143        ":framework-graphics{.public.stubs.source}",
144        ":framework-media{.public.stubs.source}",
145        ":framework-mediaprovider{.public.stubs.source}",
146        ":framework-permission{.public.stubs.source}",
147        ":framework-permission-s{.public.stubs.source}",
148        ":framework-scheduling{.public.stubs.source}",
149        ":framework-sdkextensions{.public.stubs.source}",
150        ":framework-statsd{.public.stubs.source}",
151        ":framework-tethering{.public.stubs.source}",
152        ":framework-wifi{.public.stubs.source}",
153        ":i18n.module.public.api{.public.stubs.source}",
154    ],
155    out: ["current.srcjar"],
156    tools: ["merge_zips"],
157    cmd: "$(location merge_zips) $(out) $(in)",
158    visibility: ["//visibility:private"], // Used by make module in //development, mind.
159}
160
161genrule {
162    name: "frameworks-base-api-removed.txt",
163    srcs: [
164        ":android.net.ipsec.ike{.public.removed-api.txt}",
165        ":art.module.public.api{.public.removed-api.txt}",
166        ":conscrypt.module.public.api{.public.removed-api.txt}",
167        ":framework-appsearch{.public.removed-api.txt}",
168        ":framework-connectivity{.public.removed-api.txt}",
169        ":framework-graphics{.public.removed-api.txt}",
170        ":framework-media{.public.removed-api.txt}",
171        ":framework-mediaprovider{.public.removed-api.txt}",
172        ":framework-permission{.public.removed-api.txt}",
173        ":framework-permission-s{.public.removed-api.txt}",
174        ":framework-scheduling{.public.removed-api.txt}",
175        ":framework-sdkextensions{.public.removed-api.txt}",
176        ":framework-statsd{.public.removed-api.txt}",
177        ":framework-tethering{.public.removed-api.txt}",
178        ":framework-wifi{.public.removed-api.txt}",
179        ":i18n.module.public.api{.public.removed-api.txt}",
180        ":non-updatable-removed.txt",
181    ],
182    out: ["removed.txt"],
183    tools: ["metalava"],
184    cmd: metalava_cmd + "$(in) --api $(out)",
185    dists: [
186        {
187            targets: ["droidcore"],
188            dir: "api",
189            dest: "removed.txt",
190        },
191        {
192            targets: [
193                "sdk",
194                "win_sdk",
195            ],
196            dir: "apistubs/android/public/api",
197            dest: "removed.txt",
198        },
199    ],
200}
201
202genrule {
203    name: "frameworks-base-api-system-current.txt",
204    srcs: [
205        ":art.module.public.api{.system.api.txt}",
206        ":android.net.ipsec.ike{.system.api.txt}",
207        ":framework-appsearch{.system.api.txt}",
208        ":framework-connectivity{.system.api.txt}",
209        ":framework-graphics{.system.api.txt}",
210        ":framework-media{.system.api.txt}",
211        ":framework-mediaprovider{.system.api.txt}",
212        ":framework-permission{.system.api.txt}",
213        ":framework-permission-s{.system.api.txt}",
214        ":framework-scheduling{.system.api.txt}",
215        ":framework-sdkextensions{.system.api.txt}",
216        ":framework-statsd{.system.api.txt}",
217        ":framework-tethering{.system.api.txt}",
218        ":framework-wifi{.system.api.txt}",
219        ":non-updatable-system-current.txt",
220    ],
221    out: ["system-current.txt"],
222    tools: ["metalava"],
223    cmd: metalava_cmd + "$(in) --api $(out)",
224    dists: [
225        {
226            targets: ["droidcore"],
227            dir: "api",
228            dest: "system-current.txt",
229        },
230        {
231            targets: [
232                "sdk",
233                "win_sdk",
234            ],
235            dir: "apistubs/android/system/api",
236            dest: "android.txt",
237        },
238    ],
239    visibility: ["//visibility:public"],
240}
241
242genrule {
243    name: "frameworks-base-api-system-current-compat",
244    srcs: [
245        ":android.api.system.latest",
246        ":android-incompatibilities.api.system.latest",
247        ":frameworks-base-api-current.txt",
248        ":frameworks-base-api-system-current.txt",
249    ],
250    out: ["stdout.txt"],
251    tools: ["metalava"],
252    cmd: metalava_cmd +
253        "--check-compatibility:api:released $(location :android.api.system.latest) " +
254        "--check-compatibility:base $(location :frameworks-base-api-current.txt) " +
255        "--baseline:compatibility:released $(location :android-incompatibilities.api.system.latest) " +
256        "$(location :frameworks-base-api-system-current.txt) " +
257        "> $(genDir)/stdout.txt",
258}
259
260genrule {
261    name: "frameworks-base-api-system-removed.txt",
262    srcs: [
263        ":art.module.public.api{.system.removed-api.txt}",
264        ":android.net.ipsec.ike{.system.removed-api.txt}",
265        ":framework-appsearch{.system.removed-api.txt}",
266        ":framework-connectivity{.system.removed-api.txt}",
267        ":framework-graphics{.system.removed-api.txt}",
268        ":framework-media{.system.removed-api.txt}",
269        ":framework-mediaprovider{.system.removed-api.txt}",
270        ":framework-permission{.system.removed-api.txt}",
271        ":framework-permission-s{.system.removed-api.txt}",
272        ":framework-scheduling{.system.removed-api.txt}",
273        ":framework-sdkextensions{.system.removed-api.txt}",
274        ":framework-statsd{.system.removed-api.txt}",
275        ":framework-tethering{.system.removed-api.txt}",
276        ":framework-wifi{.system.removed-api.txt}",
277        ":non-updatable-system-removed.txt",
278    ],
279    out: ["system-removed.txt"],
280    tools: ["metalava"],
281    cmd: metalava_cmd + "$(in) --api $(out)",
282    dists: [
283        {
284            targets: ["droidcore"],
285            dir: "api",
286            dest: "system-removed.txt",
287        },
288        {
289            targets: [
290                "sdk",
291                "win_sdk",
292            ],
293            dir: "apistubs/android/system/api",
294            dest: "removed.txt",
295        },
296    ],
297    visibility: ["//visibility:public"],
298}
299
300genrule {
301    name: "frameworks-base-api-module-lib-current.txt",
302    srcs: [
303        ":art.module.public.api{.module-lib.api.txt}",
304        ":android.net.ipsec.ike{.module-lib.api.txt}",
305        ":framework-appsearch{.module-lib.api.txt}",
306        ":framework-connectivity{.module-lib.api.txt}",
307        ":framework-graphics{.module-lib.api.txt}",
308        ":framework-media{.module-lib.api.txt}",
309        ":framework-mediaprovider{.module-lib.api.txt}",
310        ":framework-permission{.module-lib.api.txt}",
311        ":framework-permission-s{.module-lib.api.txt}",
312        ":framework-scheduling{.module-lib.api.txt}",
313        ":framework-sdkextensions{.module-lib.api.txt}",
314        ":framework-statsd{.module-lib.api.txt}",
315        ":framework-tethering{.module-lib.api.txt}",
316        ":framework-wifi{.module-lib.api.txt}",
317        ":non-updatable-module-lib-current.txt",
318    ],
319    out: ["module-lib-current.txt"],
320    tools: ["metalava"],
321    cmd: metalava_cmd + "$(in) --api $(out)",
322    dists: [
323        {
324            targets: ["droidcore"],
325            dir: "api",
326            dest: "module-lib-current.txt",
327        },
328        {
329            targets: [
330                "sdk",
331                "win_sdk",
332            ],
333            dir: "apistubs/android/module-lib/api",
334            dest: "android.txt",
335        },
336    ],
337}
338
339genrule {
340    name: "frameworks-base-api-module-lib-current-compat",
341    srcs: [
342        ":android.api.module-lib.latest",
343        ":android-incompatibilities.api.module-lib.latest",
344        ":frameworks-base-api-current.txt",
345        ":frameworks-base-api-module-lib-current.txt",
346    ],
347    out: ["stdout.txt"],
348    tools: ["metalava"],
349    cmd: metalava_cmd +
350        "--check-compatibility:api:released $(location :android.api.module-lib.latest) " +
351        // Note: having "public" be the base of module-lib is not perfect -- it should
352        // ideally be a merged public+system), but this will  help when migrating from
353        // MODULE_LIBS -> public.
354        "--check-compatibility:base $(location :frameworks-base-api-current.txt) " +
355        "--baseline:compatibility:released $(location :android-incompatibilities.api.module-lib.latest) " +
356        "$(location :frameworks-base-api-module-lib-current.txt) " +
357        "> $(genDir)/stdout.txt",
358}
359
360genrule {
361    name: "frameworks-base-api-module-lib-removed.txt",
362    srcs: [
363        ":art.module.public.api{.module-lib.removed-api.txt}",
364        ":android.net.ipsec.ike{.module-lib.removed-api.txt}",
365        ":framework-appsearch{.module-lib.removed-api.txt}",
366        ":framework-connectivity{.module-lib.removed-api.txt}",
367        ":framework-graphics{.module-lib.removed-api.txt}",
368        ":framework-media{.module-lib.removed-api.txt}",
369        ":framework-mediaprovider{.module-lib.removed-api.txt}",
370        ":framework-permission{.module-lib.removed-api.txt}",
371        ":framework-permission-s{.module-lib.removed-api.txt}",
372        ":framework-scheduling{.module-lib.removed-api.txt}",
373        ":framework-sdkextensions{.module-lib.removed-api.txt}",
374        ":framework-statsd{.module-lib.removed-api.txt}",
375        ":framework-tethering{.module-lib.removed-api.txt}",
376        ":framework-wifi{.module-lib.removed-api.txt}",
377        ":non-updatable-module-lib-removed.txt",
378    ],
379    out: ["module-lib-removed.txt"],
380    tools: ["metalava"],
381    cmd: metalava_cmd + "$(in) --api $(out)",
382    dists: [
383        {
384            targets: ["droidcore"],
385            dir: "api",
386            dest: "module-lib-removed.txt",
387        },
388        {
389            targets: [
390                "sdk",
391                "win_sdk",
392            ],
393            dir: "apistubs/android/module-lib/api",
394            dest: "removed.txt",
395        },
396    ],
397}
398
399genrule {
400    name: "combined-removed-dex",
401    visibility: [
402        "//frameworks/base/boot",
403    ],
404    srcs: [
405        ":frameworks-base-api-removed.txt",
406        ":frameworks-base-api-system-removed.txt",
407        ":android.car-stubs-docs{.removed-api.txt}",
408        ":android.car-system-stubs-docs{.removed-api.txt}",
409    ],
410    tool_files: ["gen_combined_removed_dex.sh"],
411    tools: ["metalava"],
412    out: ["combined-removed-dex.txt"],
413    cmd: "$(location gen_combined_removed_dex.sh) $(location metalava) $(genDir) $(in) > $(out)",
414}
415
416genrule {
417    name: "services-system-server-current.txt",
418    srcs: [
419        ":service-media-s{.system-server.api.txt}",
420        ":service-permission{.system-server.api.txt}",
421        ":non-updatable-system-server-current.txt",
422    ],
423    out: ["system-server-current.txt"],
424    tools: ["metalava"],
425    cmd: metalava_cmd + "$(in) --api $(out)",
426    dists: [
427        {
428            targets: ["droidcore"],
429            dir: "api",
430            dest: "system-server-current.txt",
431        },
432        {
433            targets: [
434                "sdk",
435                "win_sdk",
436            ],
437            dir: "apistubs/android/system-server/api",
438            dest: "android.txt",
439        },
440    ],
441}
442
443genrule {
444    name: "services-system-server-removed.txt",
445    srcs: [
446        ":service-media-s{.system-server.removed-api.txt}",
447        ":service-permission{.system-server.removed-api.txt}",
448        ":non-updatable-system-server-removed.txt",
449    ],
450    out: ["system-server-removed.txt"],
451    tools: ["metalava"],
452    cmd: metalava_cmd + "$(in) --api $(out)",
453    dists: [
454        {
455            targets: ["droidcore"],
456            dir: "api",
457            dest: "system-server-removed.txt",
458        },
459        {
460            targets: [
461                "sdk",
462                "win_sdk",
463            ],
464            dir: "apistubs/android/system-server/api",
465            dest: "removed.txt",
466        },
467    ],
468}
469
470// This rule will filter classes present in the jar files of mainline modules
471// from the lint database in api-versions.xml.
472// This is done to reduce the number of false positive NewApi findings in
473// java libraries that compile against the module SDK
474genrule {
475    name: "api-versions-xml-public-filtered",
476    srcs: [
477        // Note: order matters: first parameter is the full api-versions.xml
478        // after that the stubs files in any order
479        // stubs files are all modules that export API surfaces EXCEPT ART
480        ":framework-doc-stubs{.api_versions.xml}",
481        ":android.net.ipsec.ike.stubs{.jar}",
482        ":conscrypt.module.public.api.stubs{.jar}",
483        ":framework-appsearch.stubs{.jar}",
484        ":framework-connectivity.stubs{.jar}",
485        ":framework-graphics.stubs{.jar}",
486        ":framework-media.stubs{.jar}",
487        ":framework-mediaprovider.stubs{.jar}",
488        ":framework-permission.stubs{.jar}",
489        ":framework-permission-s.stubs{.jar}",
490        ":framework-scheduling.stubs{.jar}",
491        ":framework-sdkextensions.stubs{.jar}",
492        ":framework-statsd.stubs{.jar}",
493        ":framework-tethering.stubs{.jar}",
494        ":framework-wifi.stubs{.jar}",
495        ":i18n.module.public.api.stubs{.jar}",
496    ],
497    out: ["api-versions-public-filtered.xml"],
498    tools: ["api_versions_trimmer"],
499    cmd: "$(location api_versions_trimmer) $(out) $(in)",
500    dist: {
501        targets: [
502            "sdk",
503            "win_sdk",
504        ],
505    },
506}
507