diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-02-14 22:44:43 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-02-14 22:44:43 +0000 |
commit | 522e7451e7c3c2b74fccdfe2b6f7f8ca0d531e21 (patch) | |
tree | d1111256222a22cbaa7ef23bbc768ce9904b4f50 | |
parent | 0b4ec9055a5c80a05dd76f5b7bcad99753376f10 (diff) | |
parent | 6df607c0d0f0da31af014fde59e06ff762d0f64e (diff) | |
download | common-android12-mainline-adbd-release.tar.gz |
Snap for 8183220 from 6df607c0d0f0da31af014fde59e06ff762d0f64e to mainline-adbd-releaseandroid-mainline-12.0.0_r85android12-mainline-adbd-release
Change-Id: I260f9a593e1628b67e8fe21d5b6c0d2842a84b91
-rw-r--r-- | MODULES_OWNERS | 5 | ||||
-rw-r--r-- | build/allowed_deps.txt | 165 | ||||
-rwxr-xr-x | build/build_unbundled_mainline_module.sh | 8 | ||||
-rwxr-xr-x | build/mainline_modules_sdks.py | 437 | ||||
-rwxr-xr-x | build/mainline_modules_sdks.sh | 29 | ||||
-rw-r--r-- | build/mainline_modules_sdks_test.py | 122 | ||||
-rw-r--r-- | proto/classpaths.proto | 1 | ||||
-rw-r--r-- | sdk/ModuleDefaults.bp | 32 | ||||
-rw-r--r-- | tools/Android.bp | 4 |
9 files changed, 570 insertions, 233 deletions
diff --git a/MODULES_OWNERS b/MODULES_OWNERS index 1db0ed04..d04cb101 100644 --- a/MODULES_OWNERS +++ b/MODULES_OWNERS @@ -7,5 +7,8 @@ # # See go/mainline-owners-policy for more details. -mathewi@google.com #{LAST_RESORT_SUGGESTION} hansson@google.com #{LAST_RESORT_SUGGESTION} +satayev@google.com #{LAST_RESORT_SUGGESTION} + +# backup: +dariofreni@google.com #{LAST_RESORT_SUGGESTION} diff --git a/build/allowed_deps.txt b/build/allowed_deps.txt index 8e17d599..a8d6f51d 100644 --- a/build/allowed_deps.txt +++ b/build/allowed_deps.txt @@ -42,6 +42,8 @@ android.hardware.media@1.0(minSdkVersion:29) android.hardware.neuralnetworks-V1-ndk(minSdkVersion:30) android.hardware.neuralnetworks-V1-ndk_platform(minSdkVersion:30) android.hardware.neuralnetworks-V2-ndk(minSdkVersion:30) +android.hardware.neuralnetworks-V3-ndk(minSdkVersion:30) +android.hardware.neuralnetworks-V4-ndk(minSdkVersion:30) android.hardware.neuralnetworks@1.0(minSdkVersion:30) android.hardware.neuralnetworks@1.1(minSdkVersion:30) android.hardware.neuralnetworks@1.2(minSdkVersion:30) @@ -56,6 +58,7 @@ android.hardware.wifi-V1.2-java(minSdkVersion:30) android.hardware.wifi-V1.3-java(minSdkVersion:30) android.hardware.wifi-V1.4-java(minSdkVersion:30) android.hardware.wifi-V1.5-java(minSdkVersion:30) +android.hardware.wifi-V1.6-java(minSdkVersion:30) android.hardware.wifi.hostapd-V1-java(minSdkVersion:30) android.hardware.wifi.hostapd-V1.0-java(minSdkVersion:30) android.hardware.wifi.hostapd-V1.1-java(minSdkVersion:30) @@ -104,8 +107,8 @@ androidx.customview_customview(minSdkVersion:14) androidx.documentfile_documentfile(minSdkVersion:14) androidx.drawerlayout_drawerlayout(minSdkVersion:14) androidx.dynamicanimation_dynamicanimation(minSdkVersion:14) -androidx.emoji2_emoji(minSdkVersion:14) -androidx.emoji2_emoji2-views-helpe(minSdkVersion:14) +androidx.emoji2_emoji2(minSdkVersion:14) +androidx.emoji2_emoji2-views-helper(minSdkVersion:14) androidx.exifinterface_exifinterface(minSdkVersion:14) androidx.fragment_fragment(minSdkVersion:14) androidx.fragment_fragment-ktx(minSdkVersion:14) @@ -177,11 +180,14 @@ bionic_libc_platform_headers(minSdkVersion:29) boringssl_self_test(minSdkVersion:29) bouncycastle(minSdkVersion:31) bouncycastle-unbundled(minSdkVersion:30) +bpf_connectivity_headers(minSdkVersion:30) +bpf_headers(minSdkVersion:30) bpf_syscall_wrappers(minSdkVersion:30) brotli-java(minSdkVersion:current) captiveportal-lib(minSdkVersion:29) car-rotary-lib(minSdkVersion:28) car-ui-lib(minSdkVersion:28) +clatd(minSdkVersion:30) codecs_g711dec(minSdkVersion:29) com.google.android.material_material(minSdkVersion:14) conscrypt(minSdkVersion:29) @@ -208,6 +214,8 @@ crtend_so(minSdkVersion:current) datastallprotosnano(minSdkVersion:29) dnsproxyd_protocol_headers(minSdkVersion:29) DocumentsUI-res-lib(minSdkVersion:29) +exoplayer2-annotation-stubs(minSdkVersion:16) +exoplayer2-extractor(minSdkVersion:16) exoplayer2.15.1(minSdkVersion:16) ExtServices(minSdkVersion:30) ExtServices(minSdkVersion:current) @@ -215,6 +223,7 @@ ExtServices-core(minSdkVersion:30) ExtServices-core(minSdkVersion:current) flatbuffer_headers(minSdkVersion:(no version)) fmtlib(minSdkVersion:29) +fmtlib_headers(minSdkVersion:29) fmtlib_ndk(minSdkVersion:29) fp16_headers(minSdkVersion:30) framework-mediaprovider(minSdkVersion:30) @@ -252,18 +261,23 @@ kotlinx_coroutines_android(minSdkVersion:28) ksoap2(minSdkVersion:30) libaacextractor(minSdkVersion:29) libadbconnection_server(minSdkVersion:(no version)) +libadbconnection_server(minSdkVersion:30) libadbd_core(minSdkVersion:(no version)) +libadbd_core(minSdkVersion:30) libadbd_services(minSdkVersion:(no version)) +libadbd_services(minSdkVersion:30) libaidlcommonsupport(minSdkVersion:29) -liballoc.rust_sysroot(minSdkVersion:(no version)) +liballoc.rust_sysroot(minSdkVersion:29) libamrextractor(minSdkVersion:29) -libandroid_log_sys(minSdkVersion:(no version)) -libandroid_logger(minSdkVersion:(no version)) -libanyhow(minSdkVersion:(no version)) +libandroid_log_sys(minSdkVersion:29) +libandroid_logger(minSdkVersion:29) +libanyhow(minSdkVersion:29) libapp_processes_protos_lite(minSdkVersion:(no version)) +libapp_processes_protos_lite(minSdkVersion:30) libarect(minSdkVersion:29) libasync_safe(minSdkVersion:apex_inherit) libasyncio(minSdkVersion:(no version)) +libasyncio(minSdkVersion:apex_inherit) libatomic(minSdkVersion:(no version)) libaudio_system_headers(minSdkVersion:29) libaudioclient_aidl_conversion_util(minSdkVersion:29) @@ -276,19 +290,24 @@ libavcenc(minSdkVersion:29) libavservices_minijail(minSdkVersion:29) libbacktrace(minSdkVersion:apex_inherit) libbacktrace_headers(minSdkVersion:apex_inherit) -libbacktrace_rs.rust_sysroot(minSdkVersion:(no version)) -libbacktrace_sys.rust_sysroot(minSdkVersion:(no version)) +libbacktrace_rs.rust_sysroot(minSdkVersion:29) +libbacktrace_sys.rust_sysroot(minSdkVersion:29) libbase(minSdkVersion:29) -libbase64_rust(minSdkVersion:(no version)) +libbase64_rust(minSdkVersion:29) libbase_headers(minSdkVersion:29) libbase_ndk(minSdkVersion:29) libbinder_headers(minSdkVersion:29) libbinder_headers_platform_shared(minSdkVersion:29) +libbinder_ndk_bindgen(minSdkVersion:Tiramisu) +libbinder_ndk_sys(minSdkVersion:Tiramisu) +libbinder_rs(minSdkVersion:Tiramisu) +libbinder_tokio_rs(minSdkVersion:Tiramisu) libbinderthreadstateutils(minSdkVersion:29) libbluetooth-types-header(minSdkVersion:29) libbrotli(minSdkVersion:(no version)) libbuildversion(minSdkVersion:(no version)) -libbytes(minSdkVersion:(no version)) +libbuildversion(minSdkVersion:26) +libbytes(minSdkVersion:29) libc++(minSdkVersion:apex_inherit) libc++_static(minSdkVersion:apex_inherit) libc++abi(minSdkVersion:apex_inherit) @@ -299,8 +318,8 @@ libc_headers_arch(minSdkVersion:apex_inherit) libc_llndk_headers(minSdkVersion:apex_inherit) libc_scudo(minSdkVersion:apex_inherit) libcap(minSdkVersion:29) -libcfg_if(minSdkVersion:(no version)) -libcfg_if.rust_sysroot(minSdkVersion:(no version)) +libcfg_if(minSdkVersion:29) +libcfg_if.rust_sysroot(minSdkVersion:29) libcodec2(minSdkVersion:29) libcodec2_headers(minSdkVersion:29) libcodec2_hidl@1.0(minSdkVersion:29) @@ -339,22 +358,25 @@ libcodec2_soft_vp8enc(minSdkVersion:29) libcodec2_soft_vp9dec(minSdkVersion:29) libcodec2_soft_vp9enc(minSdkVersion:29) libcodec2_vndk(minSdkVersion:29) -libcompiler_builtins.rust_sysroot(minSdkVersion:(no version)) -libcore.rust_sysroot(minSdkVersion:(no version)) +libcom_android_networkstack_tethering_util_jni(minSdkVersion:30) +libcompiler_builtins.rust_sysroot(minSdkVersion:29) +libcore.rust_sysroot(minSdkVersion:29) libcrypto(minSdkVersion:29) libcrypto_static(minSdkVersion:(no version)) libcrypto_utils(minSdkVersion:(no version)) +libcrypto_utils(minSdkVersion:apex_inherit) libcutils(minSdkVersion:29) libcutils_headers(minSdkVersion:29) libcutils_sockets(minSdkVersion:29) libdexfile_external_headers(minSdkVersion:31) libdexfile_support(minSdkVersion:31) libdiagnose_usb(minSdkVersion:(no version)) +libdiagnose_usb(minSdkVersion:apex_inherit) libdmabufheap(minSdkVersion:29) libdmabufinfo(minSdkVersion:S) -libdoh_ffi(minSdkVersion:(no version)) +libdoh_ffi(minSdkVersion:29) libeigen(minSdkVersion:(no version)) -libenv_logger(minSdkVersion:(no version)) +libenv_logger(minSdkVersion:29) libexpat(minSdkVersion:apex_inherit) libextservices(minSdkVersion:30) libextservices_jni(minSdkVersion:30) @@ -366,21 +388,21 @@ libFLAC-headers(minSdkVersion:29) libflacextractor(minSdkVersion:29) libfmq(minSdkVersion:29) libfmq-base(minSdkVersion:29) -libform_urlencoded(minSdkVersion:(no version)) +libform_urlencoded(minSdkVersion:29) libFraunhoferAAC(minSdkVersion:29) libfuse(minSdkVersion:30) libfuse_jni(minSdkVersion:30) -libfutures(minSdkVersion:(no version)) -libfutures_channel(minSdkVersion:(no version)) -libfutures_core(minSdkVersion:(no version)) -libfutures_executor(minSdkVersion:(no version)) -libfutures_io(minSdkVersion:(no version)) -libfutures_sink(minSdkVersion:(no version)) -libfutures_task(minSdkVersion:(no version)) -libfutures_util(minSdkVersion:(no version)) +libfutures(minSdkVersion:29) +libfutures_channel(minSdkVersion:29) +libfutures_core(minSdkVersion:29) +libfutures_executor(minSdkVersion:29) +libfutures_io(minSdkVersion:29) +libfutures_sink(minSdkVersion:29) +libfutures_task(minSdkVersion:29) +libfutures_util(minSdkVersion:29) libgav1(minSdkVersion:29) libgcc_stripped(minSdkVersion:(no version)) -libgetopts(minSdkVersion:(no version)) +libgetopts(minSdkVersion:29) libgralloctypes(minSdkVersion:29) libgrallocusage(minSdkVersion:29) libgsm(minSdkVersion:apex_inherit) @@ -390,31 +412,32 @@ libgui_bufferqueue_static(minSdkVersion:29) libgui_headers(minSdkVersion:29) libhardware(minSdkVersion:29) libhardware_headers(minSdkVersion:29) -libhashbrown.rust_sysroot(minSdkVersion:(no version)) +libhashbrown.rust_sysroot(minSdkVersion:29) libhevcdec(minSdkVersion:29) libhevcenc(minSdkVersion:29) libhidlbase(minSdkVersion:29) libhidlmemory(minSdkVersion:29) libhwbinder-impl-internal(minSdkVersion:29) libhwbinder_headers(minSdkVersion:29) -libidna(minSdkVersion:(no version)) +libidna(minSdkVersion:29) libion(minSdkVersion:29) +libip_checksum(minSdkVersion:30) libjsoncpp(minSdkVersion:29) libkll(minSdkVersion:30) libkll-encoder(minSdkVersion:30) libkll-protos(minSdkVersion:30) -liblazy_static(minSdkVersion:(no version)) -liblibc(minSdkVersion:(no version)) -liblibc.rust_sysroot(minSdkVersion:(no version)) +liblazy_static(minSdkVersion:29) +liblibc(minSdkVersion:29) +liblibc.rust_sysroot(minSdkVersion:29) libLibGuiProperties(minSdkVersion:29) -liblibm(minSdkVersion:(no version)) +liblibm(minSdkVersion:29) liblog_headers(minSdkVersion:29) -liblog_rust(minSdkVersion:(no version)) +liblog_rust(minSdkVersion:29) liblua(minSdkVersion:(no version)) liblua(minSdkVersion:30) liblz4(minSdkVersion:(no version)) liblzma(minSdkVersion:apex_inherit) -libmatches(minSdkVersion:(no version)) +libmatches(minSdkVersion:29) libmath(minSdkVersion:29) libmath_headers(minSdkVersion:apex_inherit) libmdnssd(minSdkVersion:(no version)) @@ -424,7 +447,7 @@ libmedia_headers(minSdkVersion:29) libmedia_helper_headers(minSdkVersion:29) libmedia_midiiowrapper(minSdkVersion:29) libmediaformatshaper(minSdkVersion:29) -libmemchr(minSdkVersion:(no version)) +libmemchr(minSdkVersion:29) libmeminfo(minSdkVersion:S) libminijail(minSdkVersion:29) libminijail_gen_constants(minSdkVersion:(no version)) @@ -432,7 +455,7 @@ libminijail_gen_constants_obj(minSdkVersion:29) libminijail_gen_syscall(minSdkVersion:(no version)) libminijail_gen_syscall_obj(minSdkVersion:29) libminijail_generated(minSdkVersion:29) -libmio(minSdkVersion:(no version)) +libmio(minSdkVersion:29) libmkvextractor(minSdkVersion:29) libmp3extractor(minSdkVersion:29) libmp4extractor(minSdkVersion:29) @@ -453,18 +476,18 @@ libnetworkstackutilsjni(minSdkVersion:29) libneuralnetworks_common(minSdkVersion:(no version)) libneuralnetworks_headers(minSdkVersion:(no version)) libneuralnetworks_shim_static(minSdkVersion:30) -libnum_cpus(minSdkVersion:(no version)) +libnum_cpus(minSdkVersion:29) liboggextractor(minSdkVersion:29) -libonce_cell(minSdkVersion:(no version)) +libonce_cell(minSdkVersion:29) libopenjdkjvmti_headers(minSdkVersion:31) libopus(minSdkVersion:29) -libpanic_abort.rust_sysroot(minSdkVersion:(no version)) -libpercent_encoding(minSdkVersion:(no version)) +libpanic_abort.rust_sysroot(minSdkVersion:29) +libpercent_encoding(minSdkVersion:29) libperfetto_client_experimental(minSdkVersion:S) -libpin_project_lite(minSdkVersion:(no version)) -libpin_utils(minSdkVersion:(no version)) +libpin_project_lite(minSdkVersion:29) +libpin_utils(minSdkVersion:29) libPlatformProperties(minSdkVersion:S) -libproc_macro_nested(minSdkVersion:(no version)) +libproc_macro_nested(minSdkVersion:29) libprocessgroup(minSdkVersion:29) libprocessgroup_headers(minSdkVersion:29) libprocinfo(minSdkVersion:apex_inherit) @@ -474,25 +497,25 @@ libprofile-clang-extras_cfi_support(minSdkVersion:(no version)) libprofile-clang-extras_ndk(minSdkVersion:(no version)) libprofile-extras(minSdkVersion:(no version)) libprofile-extras_ndk(minSdkVersion:(no version)) -libprofiler_builtins.rust_sysroot(minSdkVersion:(no version)) +libprofiler_builtins.rust_sysroot(minSdkVersion:29) libprotobuf-cpp-lite(minSdkVersion:29) libprotobuf-java-lite(minSdkVersion:current) libprotobuf-java-nano(minSdkVersion:9) libprotoutil(minSdkVersion:(no version)) libqemu_pipe(minSdkVersion:(no version)) -libquiche(minSdkVersion:(no version)) -libring(minSdkVersion:(no version)) +libquiche(minSdkVersion:29) +libring(minSdkVersion:29) libring-core(minSdkVersion:29) libring-test(minSdkVersion:29) librustc_demangle(minSdkVersion:(no version)) -librustc_demangle.rust_sysroot(minSdkVersion:(no version)) +librustc_demangle.rust_sysroot(minSdkVersion:29) librustc_demangle_static(minSdkVersion:(no version)) libruy_static(minSdkVersion:30) libsfplugin_ccodec_utils(minSdkVersion:29) -libslab(minSdkVersion:(no version)) +libslab(minSdkVersion:29) libsonivoxwithoutjet(minSdkVersion:29) libspeexresampler(minSdkVersion:29) -libspin(minSdkVersion:(no version)) +libspin(minSdkVersion:29) libssl(minSdkVersion:29) libstagefright_amrnb_common(minSdkVersion:29) libstagefright_amrnbdec(minSdkVersion:29) @@ -519,13 +542,14 @@ libstagefright_mp3dec_headers(minSdkVersion:29) libstagefright_mpeg2extractor(minSdkVersion:29) libstagefright_mpeg2support(minSdkVersion:29) libstatssocket_headers(minSdkVersion:29) -libstd(minSdkVersion:(no version)) -libstd_detect.rust_sysroot(minSdkVersion:(no version)) +libstd(minSdkVersion:29) +libstd_detect.rust_sysroot(minSdkVersion:29) libsync(minSdkVersion:(no version)) libsystem_headers(minSdkVersion:apex_inherit) libsysutils(minSdkVersion:apex_inherit) -libterm(minSdkVersion:(no version)) -libtest(minSdkVersion:(no version)) +libtcutils(minSdkVersion:30) +libterm(minSdkVersion:29) +libtest(minSdkVersion:29) libtextclassifier(minSdkVersion:(no version)) libtextclassifier(minSdkVersion:30) libtextclassifier-java(minSdkVersion:28) @@ -537,22 +561,22 @@ libtextclassifier_hash_static(minSdkVersion:(no version)) libtflite_kernel_utils(minSdkVersion:(no version)) libtflite_static(minSdkVersion:(no version)) libtflite_static(minSdkVersion:30) -libthiserror(minSdkVersion:(no version)) -libtinyvec(minSdkVersion:(no version)) -libtinyvec_macros(minSdkVersion:(no version)) +libthiserror(minSdkVersion:29) +libtinyvec(minSdkVersion:29) +libtinyvec_macros(minSdkVersion:29) libtinyxml2(minSdkVersion:S) -libtokio(minSdkVersion:(no version)) +libtokio(minSdkVersion:29) libui(minSdkVersion:29) libui-types(minSdkVersion:apex_inherit) libui_headers(minSdkVersion:29) -libunicode_bidi(minSdkVersion:(no version)) -libunicode_normalization(minSdkVersion:(no version)) -libunicode_width.rust_sysroot(minSdkVersion:(no version)) -libuntrusted(minSdkVersion:(no version)) -libunwind.rust_sysroot(minSdkVersion:(no version)) +libunicode_bidi(minSdkVersion:29) +libunicode_normalization(minSdkVersion:29) +libunicode_width.rust_sysroot(minSdkVersion:29) +libuntrusted(minSdkVersion:29) +libunwind.rust_sysroot(minSdkVersion:29) libunwind_llvm(minSdkVersion:apex_inherit) libunwindstack(minSdkVersion:29) -liburl(minSdkVersion:(no version)) +liburl(minSdkVersion:29) libutf(minSdkVersion:(no version)) libutils(minSdkVersion:apex_inherit) libutils_headers(minSdkVersion:apex_inherit) @@ -566,6 +590,8 @@ libyuv_static(minSdkVersion:29) libziparchive(minSdkVersion:apex_inherit) libzstd(minSdkVersion:(no version)) marisa-trie(minSdkVersion:30) +mdns_aidl_interface-lateststable-java(minSdkVersion:29) +mdns_aidl_interface-V1-java(minSdkVersion:29) media_ndk_headers(minSdkVersion:29) media_plugin_headers(minSdkVersion:29) MediaProvider(minSdkVersion:30) @@ -600,10 +626,13 @@ net-utils-services-common(minSdkVersion:30) netd-client(minSdkVersion:29) netd_aidl_interface-java(minSdkVersion:29) netd_aidl_interface-lateststable-java(minSdkVersion:29) +netd_aidl_interface-lateststable-ndk(minSdkVersion:29) netd_aidl_interface-V3-java(minSdkVersion:29) netd_aidl_interface-V5-java(minSdkVersion:29) netd_aidl_interface-V6-java(minSdkVersion:29) netd_aidl_interface-V7-java(minSdkVersion:29) +netd_aidl_interface-V8-java(minSdkVersion:29) +netd_aidl_interface-V8-ndk(minSdkVersion:29) netd_event_listener_interface-java(minSdkVersion:29) netd_event_listener_interface-lateststable-java(minSdkVersion:29) netd_event_listener_interface-ndk_platform(minSdkVersion:29) @@ -614,12 +643,14 @@ netlink-client(minSdkVersion:29) networkstack-aidl-interfaces-V10-java(minSdkVersion:29) networkstack-aidl-interfaces-V11-java(minSdkVersion:29) networkstack-aidl-interfaces-V12-java(minSdkVersion:29) +networkstack-aidl-interfaces-V13-java(minSdkVersion:29) +networkstack-aidl-interfaces-V14-java(minSdkVersion:29) networkstack-aidl-latest(minSdkVersion:29) networkstack-client(minSdkVersion:29) NetworkStackApi29Shims(minSdkVersion:29) NetworkStackApi30Shims(minSdkVersion:29) NetworkStackApi31Shims(minSdkVersion:29) -NetworkStackApi32Shims(minSdkVersion:29) +NetworkStackApi33Shims(minSdkVersion:29) NetworkStackApiCurrentShims(minSdkVersion:29) NetworkStackApiStableLib(minSdkVersion:29) NetworkStackApiStableShims(minSdkVersion:29) @@ -695,7 +726,9 @@ prebuilt_androidx.drawerlayout_drawerlayout-nodeps(minSdkVersion:(no version)) prebuilt_androidx.drawerlayout_drawerlayout-nodeps(minSdkVersion:14) prebuilt_androidx.dynamicanimation_dynamicanimation-nodeps(minSdkVersion:14) prebuilt_androidx.emoji2_emoji-nodeps(minSdkVersion:14) +prebuilt_androidx.emoji2_emoji2-nodeps(minSdkVersion:14) prebuilt_androidx.emoji2_emoji2-views-helpe-nodeps(minSdkVersion:14) +prebuilt_androidx.emoji2_emoji2-views-helper-nodeps(minSdkVersion:14) prebuilt_androidx.exifinterface_exifinterface-nodeps(minSdkVersion:14) prebuilt_androidx.fragment_fragment-ktx-nodeps(minSdkVersion:(no version)) prebuilt_androidx.fragment_fragment-ktx-nodeps(minSdkVersion:14) @@ -809,6 +842,7 @@ prebuilt_crtbegin_so(minSdkVersion:(no version)) prebuilt_crtend_android(minSdkVersion:(no version)) prebuilt_crtend_so(minSdkVersion:(no version)) prebuilt_error_prone_annotations(minSdkVersion:(no version)) +prebuilt_error_prone_annotations(minSdkVersion:29) prebuilt_error_prone_annotations(minSdkVersion:current) prebuilt_glide-annotation-and-compiler-prebuilt(minSdkVersion:14) prebuilt_glide-disklrucache-prebuilt(minSdkVersion:14) @@ -816,16 +850,19 @@ prebuilt_glide-gifdecoder-prebuilt(minSdkVersion:14) prebuilt_glide-prebuilt(minSdkVersion:14) prebuilt_guava-listenablefuture-prebuilt-jar(minSdkVersion:29) prebuilt_guava-listenablefuture-prebuilt-jar(minSdkVersion:current) +prebuilt_jni_headers(minSdkVersion:(no version)) prebuilt_kotlin-stdlib(minSdkVersion:current) prebuilt_kotlinx-coroutines-android-nodeps(minSdkVersion:(no version)) prebuilt_kotlinx-coroutines-android-nodeps(minSdkVersion:current) prebuilt_kotlinx-coroutines-core-nodeps(minSdkVersion:(no version)) prebuilt_kotlinx-coroutines-core-nodeps(minSdkVersion:current) prebuilt_libasync_safe(minSdkVersion:(no version)) +prebuilt_libc_headers(minSdkVersion:(no version)) prebuilt_libclang_rt.builtins-aarch64-android(minSdkVersion:(no version)) prebuilt_libclang_rt.builtins-arm-android(minSdkVersion:(no version)) prebuilt_libclang_rt.builtins-i686-android(minSdkVersion:(no version)) prebuilt_libclang_rt.builtins-x86_64-android(minSdkVersion:(no version)) +prebuilt_libnativehelper_header_only(minSdkVersion:(no version)) prebuilt_libperfetto_client_experimental(minSdkVersion:(no version)) prebuilt_libunwind(minSdkVersion:(no version)) prebuilt_perfetto_trace_protos(minSdkVersion:(no version)) diff --git a/build/build_unbundled_mainline_module.sh b/build/build_unbundled_mainline_module.sh index 6c775923..7c2478f9 100755 --- a/build/build_unbundled_mainline_module.sh +++ b/build/build_unbundled_mainline_module.sh @@ -44,7 +44,8 @@ readonly -a DEFAULT_MODULES=( com.android.conscrypt com.android.extservices com.android.i18n - com.android.ipsec + # TODO(b/210694291): include ipsec module in the build + # com.android.ipsec com.android.media com.android.mediaprovider com.android.media.swcodec @@ -54,8 +55,10 @@ readonly -a DEFAULT_MODULES=( com.android.resolv com.android.runtime com.android.sdkext + com.android.sepolicy com.android.telephony - com.android.tethering + # TODO(b/210694291): include tethering module in the build + # com.android.tethering com.android.tzdata com.android.wifi test1_com.android.tzdata @@ -67,7 +70,6 @@ readonly -a DEFAULT_MODULES=( ExtServices NetworkPermissionConfig NetworkStack - NetworkStackNext PermissionController ) diff --git a/build/mainline_modules_sdks.py b/build/mainline_modules_sdks.py index c6be7d40..7e694b52 100755 --- a/build/mainline_modules_sdks.py +++ b/build/mainline_modules_sdks.py @@ -13,7 +13,6 @@ # 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. - """Builds SDK snapshots. If the environment variable TARGET_BUILD_APPS is nonempty then only the SDKs for @@ -28,6 +27,8 @@ import shutil import subprocess import sys import tempfile +import typing +from typing import Callable, List import zipfile @@ -175,6 +176,235 @@ soong_config_module_type_import {{ file.write("\n".join(header_lines + content_lines) + "\n") +@dataclasses.dataclass() +class SubprocessRunner: + """Runs subprocesses""" + + # Destination for stdout from subprocesses. + # + # This (and the following stderr) are needed to allow the tests to be run + # in Intellij. This ensures that the tests are run with stdout/stderr + # objects that work when passed to subprocess.run(stdout/stderr). Without it + # the tests are run with a FlushingStringIO object that has no fileno + # attribute - https://youtrack.jetbrains.com/issue/PY-27883. + stdout: io.TextIOBase = sys.stdout + + # Destination for stderr from subprocesses. + stderr: io.TextIOBase = sys.stderr + + def run(self, *args, **kwargs): + return subprocess.run( + *args, check=True, stdout=self.stdout, stderr=self.stderr, **kwargs) + + +@dataclasses.dataclass() +class SnapshotBuilder: + """Builds sdk snapshots""" + + # Used to run subprocesses for building snapshots. + subprocess_runner: SubprocessRunner + + # The OUT_DIR environment variable. + out_dir: str + + def get_mainline_sdks_path(self): + """Get the path to the Soong mainline-sdks directory""" + return os.path.join(self.out_dir, "soong/mainline-sdks") + + def get_sdk_path(self, sdk_name, sdk_version): + """Get the path to the sdk snapshot zip file produced by soong""" + return os.path.join(self.get_mainline_sdks_path(), + f"{sdk_name}-{sdk_version}.zip") + + def build_snapshots(self, build_release, sdk_versions, modules): + # Build the SDKs once for each version. + for sdk_version in sdk_versions: + # Compute the paths to all the Soong generated sdk snapshot files + # required by this script. + paths = [ + self.get_sdk_path(sdk, sdk_version) + for module in modules + for sdk in module.sdks + ] + + # Extra environment variables to pass to the build process. + extraEnv = { + # TODO(ngeoffray): remove SOONG_ALLOW_MISSING_DEPENDENCIES, but + # we currently break without it. + "SOONG_ALLOW_MISSING_DEPENDENCIES": "true", + # Set SOONG_SDK_SNAPSHOT_USE_SRCJAR to generate .srcjars inside + # sdk zip files as expected by prebuilt drop. + "SOONG_SDK_SNAPSHOT_USE_SRCJAR": "true", + # Set SOONG_SDK_SNAPSHOT_VERSION to generate the appropriately + # tagged version of the sdk. + "SOONG_SDK_SNAPSHOT_VERSION": sdk_version, + } + extraEnv.update(build_release.soong_env) + + # Unless explicitly specified in the calling environment set + # TARGET_BUILD_VARIANT=user. + # This MUST be identical to the TARGET_BUILD_VARIANT used to build + # the corresponding APEXes otherwise it could result in different + # hidden API flags, see http://b/202398851#comment29 for more info. + targetBuildVariant = os.environ.get("TARGET_BUILD_VARIANT", "user") + cmd = [ + "build/soong/soong_ui.bash", + "--make-mode", + "--soong-only", + f"TARGET_BUILD_VARIANT={targetBuildVariant}", + "TARGET_PRODUCT=mainline_sdk", + "MODULE_BUILD_FROM_SOURCE=true", + "out/soong/apex/depsinfo/new-allowed-deps.txt.check", + ] + paths + print_command(extraEnv, cmd) + env = os.environ.copy() + env.update(extraEnv) + self.subprocess_runner.run(cmd, env=env) + + +# A list of the sdk versions to build. Usually just current but can include a +# numeric version too. +SDK_VERSIONS = [ + # Suitable for overriding the source modules with prefer:true. + # Unlike "unversioned" this mode also adds "@current" suffixed modules + # with the same prebuilts (which are never preferred). + "current", + # Insert additional sdk versions needed for the latest build release. +] + +# The initially empty list of build releases. Every BuildRelease that is created +# automatically appends itself to this list. +ALL_BUILD_RELEASES = [] + + +@dataclasses.dataclass(frozen=True) +class BuildRelease: + """Represents a build release""" + + # The name of the build release, e.g. Q, R, S, T, etc. + name: str + + # The function to call to create the snapshot in the dist, that covers + # building and copying the snapshot into the dist. + creator: Callable[ + ["BuildRelease", "SdkDistProducer", List["MainlineModule"]], None] + + # The sub-directory of dist/mainline-sdks into which the build release + # specific snapshots will be copied. + # + # Defaults to for-<name>-build. + sub_dir: str = None + + # Additional environment variables to pass to Soong when building the + # snapshots for this build release. + # + # Defaults to { + # "SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE": <name>, + # } + soong_env: typing.Dict[str, str] = None + + # The sdk versions that need to be generated for this build release. + sdk_versions: List[str] = \ + dataclasses.field(default_factory=lambda: SDK_VERSIONS) + + # The position of this instance within the BUILD_RELEASES list. + ordinal: int = dataclasses.field(default=-1, init=False) + + def __post_init__(self): + # The following use object.__setattr__ as this object is frozen and + # attempting to set the fields directly would cause an exception to be + # thrown. + object.__setattr__(self, "ordinal", len(ALL_BUILD_RELEASES)) + # Add this to the end of the list of all build releases. + ALL_BUILD_RELEASES.append(self) + # If no sub_dir was specified then set the default. + if self.sub_dir is None: + object.__setattr__(self, "sub_dir", f"for-{self.name}-build") + # If no soong_env was specified then set the default. + if self.soong_env is None: + object.__setattr__( + self, + "soong_env", + { + # Set SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE to generate a + # snapshot suitable for a specific target build release. + "SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE": self.name, + }) + + def __le__(self, other): + return self.ordinal <= other.ordinal + + +def create_no_dist_snapshot(build_release: BuildRelease, + producer: "SdkDistProducer", + modules: List["MainlineModule"]): + """A place holder dist snapshot creation function that does nothing.""" + print(f"create_no_dist_snapshot for modules {[m.apex for m in modules]}") + return + + +def create_sdk_snapshots_in_Soong(build_release: BuildRelease, + producer: "SdkDistProducer", + modules: List["MainlineModule"]): + """Builds sdks and populates the dist.""" + producer.produce_dist_for_build_release(build_release, modules) + return + + +def reuse_latest_sdk_snapshots(build_release: BuildRelease, + producer: "SdkDistProducer", + modules: List["MainlineModule"]): + """Copies the snapshots from the latest build.""" + producer.populate_dist(build_release, build_release.sdk_versions, modules) + return + + +Q = BuildRelease( + name="Q", + # At the moment we do not generate a snapshot for Q. + creator=create_no_dist_snapshot, +) +R = BuildRelease( + name="R", + # At the moment we do not generate a snapshot for R. + creator=create_no_dist_snapshot, +) +S = BuildRelease( + name="S", + # Generate a snapshot for S using Soong. + creator=create_sdk_snapshots_in_Soong, +) + +# Insert additional BuildRelease definitions for following releases here, +# before LATEST. + +# The build release for the latest build supported by this build, i.e. the +# current build. This must be the last BuildRelease defined in this script, +# before LEGACY_BUILD_RELEASE. +LATEST = BuildRelease( + name="latest", + creator=create_sdk_snapshots_in_Soong, + # There are no build release specific environment variables to pass to + # Soong. + soong_env={}, +) + +# The build release to populate the legacy dist structure that does not specify +# a particular build release. This MUST come after LATEST so that it includes +# all the modules for which sdk snapshot source is available. +LEGACY_BUILD_RELEASE = BuildRelease( + name="legacy", + # There is no build release specific sub directory. + sub_dir="", + # There are no build release specific environment variables to pass to + # Soong. + soong_env={}, + # Do not create new snapshots, simply use the snapshots generated for + # latest. + creator=reuse_latest_sdk_snapshots, +) + + @dataclasses.dataclass(frozen=True) class MainlineModule: """Represents a mainline module""" @@ -184,6 +414,19 @@ class MainlineModule: # The names of the sdk and module_exports. sdks: list[str] + # The first build release in which the SDK snapshot for this module is + # needed. + # + # Note: This is not necessarily the same build release in which the SDK + # source was first included. So, a module that was added in build T + # could potentially be used in an S release and so its SDK will need + # to be made available for S builds. + # + # Defaults to the latest build, i.e. the build on which this script is run + # as the snapshot is assumed to be needed in the build containing the sdk + # source. + first_release: BuildRelease = LATEST + # The configuration variable, defaults to ANDROID:module_build_from_source configVar: ConfigVar = ConfigVar( namespace="ANDROID", @@ -207,6 +450,10 @@ class MainlineModule: configBpDefFile=self.configBpDefFile), ] + def is_required_for(self, target_build_release): + """True if this module is required for the target build release.""" + return self.first_release <= target_build_release + # List of mainline modules. MAINLINE_MODULES = [ @@ -217,6 +464,7 @@ MAINLINE_MODULES = [ "art-module-test-exports", "art-module-host-exports", ], + first_release=S, # Override the config... fields. configVar=ConfigVar( namespace="art_module", @@ -232,53 +480,54 @@ MAINLINE_MODULES = [ "conscrypt-module-test-exports", "conscrypt-module-host-exports", ], + first_release=Q, ), MainlineModule( apex="com.android.ipsec", sdks=["ipsec-module-sdk"], + first_release=S, ), MainlineModule( apex="com.android.media", sdks=["media-module-sdk"], + first_release=R, ), MainlineModule( apex="com.android.mediaprovider", sdks=["mediaprovider-module-sdk"], + first_release=R, ), MainlineModule( apex="com.android.permission", sdks=["permission-module-sdk"], + first_release=R, + ), + MainlineModule( + apex="com.android.scheduling", + sdks=["scheduling-sdk"], ), MainlineModule( apex="com.android.sdkext", sdks=["sdkextensions-sdk"], + first_release=R, ), MainlineModule( apex="com.android.os.statsd", sdks=["statsd-module-sdk"], + first_release=R, ), MainlineModule( apex="com.android.tethering", sdks=["tethering-module-sdk"], + first_release=R, ), MainlineModule( apex="com.android.wifi", sdks=["wifi-module-sdk"], + first_release=R, ), ] -# Only used by the test. -MAINLINE_MODULES_BY_APEX = dict((m.apex, m) for m in MAINLINE_MODULES) - -# A list of the sdk versions to build. Usually just current but can include a -# numeric version too. -SDK_VERSIONS = [ - # Suitable for overriding the source modules with prefer:true. - # Unlike "unversioned" this mode also adds "@current" suffixed modules - # with the same prebuilts (which are never preferred). - "current", -] - @dataclasses.dataclass class SdkDistProducer: @@ -290,20 +539,11 @@ class SdkDistProducer: directory. """ - # Destination for stdout from subprocesses. - # - # This (and the following stderr) are needed to allow the tests to be run - # in Intellij. This ensures that the tests are run with stdout/stderr - # objects that work when passed to subprocess.run(stdout/stderr). Without it - # the tests are run with a FlushingStringIO object that has no fileno - # attribute - https://youtrack.jetbrains.com/issue/PY-27883. - stdout: io.TextIOBase = sys.stdout - - # Destination for stderr from subprocesses. - stderr: io.TextIOBase = sys.stderr + # Used to run subprocesses for this. + subprocess_runner: SubprocessRunner - # The OUT_DIR environment variable. - out_dir: str = "uninitialized-out" + # Builds sdk snapshots + snapshot_builder: SnapshotBuilder # The DIST_DIR environment variable. dist_dir: str = "uninitialized-dist" @@ -312,64 +552,43 @@ class SdkDistProducer: # transformed to document where the changes came from. script: str = sys.argv[0] - def get_sdk_path(self, sdk_name, sdk_version): - """Get the path to the sdk snapshot zip file produced by soong""" - return os.path.join(self.out_dir, "soong/mainline-sdks", - f"{sdk_name}-{sdk_version}.zip") + # The path to the mainline-sdks dist directory. + # + # Initialized in __post_init__(). + mainline_sdks_dir: str = dataclasses.field(init=False) - def produce_dist(self, sdk_versions, modules): - self.build_sdks(sdk_versions, modules) - self.populate_dist(sdk_versions, modules) + def __post_init__(self): + self.mainline_sdks_dir = os.path.join(self.dist_dir, "mainline-sdks") - def build_sdks(self, sdk_versions, modules): - # Build the SDKs once for each version. - for sdk_version in sdk_versions: - # Compute the paths to all the Soong generated sdk snapshot files - # required by this script. - paths = [ - self.get_sdk_path(sdk, sdk_version) - for module in modules - for sdk in module.sdks + def prepare(self): + # Clear the mainline-sdks dist directory. + shutil.rmtree(self.mainline_sdks_dir, ignore_errors=True) + + def produce_dist(self, modules, build_releases): + # Prepare the dist directory for the sdks. + self.prepare() + + for build_release in build_releases: + # Only build modules that are required for this build release. + filtered_modules = [ + m for m in modules if m.is_required_for(build_release) ] + if filtered_modules: + print(f"Building SDK snapshots for {build_release.name}" + f" build release") + build_release.creator(build_release, self, filtered_modules) - # TODO(ngeoffray): remove SOONG_ALLOW_MISSING_DEPENDENCIES, but we - # currently break without it. - # - # Set SOONG_SDK_SNAPSHOT_USE_SRCJAR to generate .srcjars inside sdk - # zip files as expected by prebuilt drop. - extraEnv = { - "SOONG_ALLOW_MISSING_DEPENDENCIES": "true", - "SOONG_SDK_SNAPSHOT_USE_SRCJAR": "true", - "SOONG_SDK_SNAPSHOT_VERSION": sdk_version, - } - # Unless explicitly specified in the calling environment set - # TARGET_BUILD_VARIANT=user. - # This MUST be identical to the TARGET_BUILD_VARIANT used to build - # the corresponding APEXes otherwise it could result in different - # hidden API flags, see http://b/202398851#comment29 for more info. - targetBuildVariant = os.environ.get("TARGET_BUILD_VARIANT", "user") - cmd = [ - "build/soong/soong_ui.bash", - "--make-mode", - "--soong-only", - f"TARGET_BUILD_VARIANT={targetBuildVariant}", - "TARGET_PRODUCT=mainline_sdk", - "MODULE_BUILD_FROM_SOURCE=true", - "out/soong/apex/depsinfo/new-allowed-deps.txt.check", - ] + paths - print_command(extraEnv, cmd) - env = os.environ.copy() - env.update(extraEnv) - subprocess.run( - cmd, - env=env, - check=True, - stdout=self.stdout, - stderr=self.stderr) + self.populate_stubs(modules) + + def produce_dist_for_build_release(self, build_release, modules): + sdk_versions = build_release.sdk_versions + self.snapshot_builder.build_snapshots(build_release, sdk_versions, + modules) + self.populate_dist(build_release, sdk_versions, modules) def unzip_current_stubs(self, sdk_name, apex_name): """Unzips stubs for "current" into {producer.dist_dir}/stubs/{apex}.""" - sdk_path = self.get_sdk_path(sdk_name, "current") + sdk_path = self.snapshot_builder.get_sdk_path(sdk_name, "current") dest_dir = os.path.join(self.dist_dir, "stubs", apex_name) print( f"Extracting java_sdk_library files from {sdk_path} to {dest_dir}") @@ -377,7 +596,7 @@ class SdkDistProducer: extract_matching_files_from_zip( sdk_path, dest_dir, r"sdk_library/[^/]+/[^/]+\.(txt|jar|srcjar)") - def populate_dist(self, sdk_versions, modules): + def populate_stubs(self, modules): # TODO(b/199759953): Remove stubs once it is no longer used by gantry. # Clear and populate the stubs directory. stubs_dir = os.path.join(self.dist_dir, "stubs") @@ -391,9 +610,9 @@ class SdkDistProducer: if sdk.endswith("-sdk"): self.unzip_current_stubs(sdk, apex) - # Clear and populate the mainline-sdks dist directory. - sdks_dist_dir = os.path.join(self.dist_dir, "mainline-sdks") - shutil.rmtree(sdks_dist_dir, ignore_errors=True) + def populate_dist(self, build_release, sdk_versions, modules): + build_release_dist_dir = os.path.join(self.mainline_sdks_dir, + build_release.sub_dir) for module in modules: apex = module.apex @@ -407,9 +626,10 @@ class SdkDistProducer: f" ^[^-]+-(module-)?(sdk|host-exports|test-exports)" ) - sdk_dist_dir = os.path.join(sdks_dist_dir, sdk_version, - apex, subdir) - sdk_path = self.get_sdk_path(sdk, sdk_version) + sdk_dist_dir = os.path.join(build_release_dist_dir, + sdk_version, apex, subdir) + sdk_path = self.snapshot_builder.get_sdk_path( + sdk, sdk_version) self.dist_sdk_snapshot_zip(sdk_path, sdk_dist_dir, module.transformations()) @@ -479,13 +699,10 @@ def copy_zip_and_replace(producer, src_zip_path, dest_zip_path, src_dir, paths): # not affected by a change of directory. abs_src_zip_path = os.path.abspath(src_zip_path) abs_dest_zip_path = os.path.abspath(dest_zip_path) - subprocess.run( + producer.subprocess_runner.run( ["zip", "-q", abs_src_zip_path, "--out", abs_dest_zip_path] + paths, # Change into the source directory before running zip. - cwd=src_dir, - stdout=producer.stdout, - stderr=producer.stderr, - check=True) + cwd=src_dir) def apply_transformations(producer, tmp_dir, transformations): @@ -503,26 +720,42 @@ def apply_transformations(producer, tmp_dir, transformations): os.utime(path, (modified, modified)) -def main(): - """Program entry point.""" - if not os.path.exists("build/make/core/Makefile"): - sys.exit("This script must be run from the top of the tree.") +def create_producer(): + # Variables initialized from environment variables that are set by the + # calling mainline_modules_sdks.sh. + out_dir = os.environ["OUT_DIR"] + dist_dir = os.environ["DIST_DIR"] - producer = SdkDistProducer( - # Variables initialized from environment variables that are set by the - # calling mainline_modules_sdks.sh. - out_dir=os.environ["OUT_DIR"], - dist_dir=os.environ["DIST_DIR"], + subprocess_runner = SubprocessRunner() + snapshot_builder = SnapshotBuilder( + subprocess_runner=subprocess_runner, + out_dir=out_dir, + ) + return SdkDistProducer( + subprocess_runner=subprocess_runner, + snapshot_builder=snapshot_builder, + dist_dir=dist_dir, ) + +def filter_modules(modules): target_build_apps = os.environ.get("TARGET_BUILD_APPS") if target_build_apps: - build_mainline_modules = [m for m in MAINLINE_MODULES - if m.apex in target_build_apps.split()] + target_build_apps = target_build_apps.split() + return [m for m in modules if m.apex in target_build_apps] else: - build_mainline_modules = MAINLINE_MODULES + return modules + + +def main(): + """Program entry point.""" + if not os.path.exists("build/make/core/Makefile"): + sys.exit("This script must be run from the top of the tree.") + + producer = create_producer() + modules = filter_modules(MAINLINE_MODULES) - producer.produce_dist(SDK_VERSIONS, build_mainline_modules) + producer.produce_dist(modules, ALL_BUILD_RELEASES) if __name__ == "__main__": diff --git a/build/mainline_modules_sdks.sh b/build/mainline_modules_sdks.sh index 2cf17f3f..fb5cfd36 100755 --- a/build/mainline_modules_sdks.sh +++ b/build/mainline_modules_sdks.sh @@ -15,6 +15,27 @@ # limitations under the License. # +function init() { + declare -ga ARGV + while (($# > 0)); do + case $1 in + --py3script) + declare -gr py3script="$2" + shift 2 + ;; + *) + ARGV+=("$1") + shift 1 + ;; + esac + done + readonly ARGV + + if [ -z "${py3script}" ]; then + declare -gr py3script="packages/modules/common/build/mainline_modules_sdks.py" + fi +} + function main() { if [ ! -e "build/make/core/Makefile" ]; then echo "$0 must be run from the top of the tree" @@ -34,7 +55,11 @@ function main() { # Delegate the SDK generation to the python script. Use the python version # provided by the build to ensure consistency across build environments. export DIST_DIR OUT_DIR - prebuilts/build-tools/linux-x86/bin/py3-cmd packages/modules/common/build/mainline_modules_sdks.py "$@" + + prebuilts/build-tools/linux-x86/bin/py3-cmd -u "${py3script}" } -main "${@}" +init "$@" +# The wacky ${foo[@]+"${foo[@]}"}, makes bash correctly pass nothing when an +# array is empty (necessary prior to bash 4.4). +main ${ARGV[@]+"${ARGV[@]}"} diff --git a/build/mainline_modules_sdks_test.py b/build/mainline_modules_sdks_test.py index 8a54ab8e..d4d6faaa 100644 --- a/build/mainline_modules_sdks_test.py +++ b/build/mainline_modules_sdks_test.py @@ -14,7 +14,7 @@ # See the License for the specific language governing permissions and # limitations under the License. """Unit tests for mainline_modules_sdks.py.""" - +import dataclasses from pathlib import Path import os import tempfile @@ -23,13 +23,18 @@ import zipfile import mainline_modules_sdks as mm +MAINLINE_MODULES_BY_APEX = dict((m.apex, m) for m in mm.MAINLINE_MODULES) -class TestPopulateDist(unittest.TestCase): - def create_snapshot_file(self, out_dir, name, version): - sdks_out_dir = Path(out_dir, "soong/mainline-sdks") - sdks_out_dir.mkdir(parents=True, exist_ok=True) - zip_file = Path(sdks_out_dir, f"{name}-{version}.zip") +class FakeSnapshotBuilder(mm.SnapshotBuilder): + """A fake snapshot builder that does not run the build. + + This skips the whole build process and just creates some fake sdk + modules. + """ + + def create_snapshot_file(self, name, version): + zip_file = Path(self.get_sdk_path(name, version)) with zipfile.ZipFile(zip_file, "w") as z: z.writestr("Android.bp", "") if name.endswith("-sdk"): @@ -38,6 +43,19 @@ class TestPopulateDist(unittest.TestCase): z.writestr("sdk_library/public/lib.jar", "") z.writestr("sdk_library/public/api.txt", "") + def build_snapshots(self, build_release, sdk_versions, modules): + # Create input file structure. + sdks_out_dir = Path(self.get_mainline_sdks_path()) + sdks_out_dir.mkdir(parents=True, exist_ok=True) + # Create a fake sdk zip file for each module. + for module in modules: + for sdk in module.sdks: + for sdk_version in sdk_versions: + self.create_snapshot_file(sdk, sdk_version) + + +class TestProduceDist(unittest.TestCase): + def test(self): """Verify the dist/mainline-sdks directory is populated correctly""" with tempfile.TemporaryDirectory() as tmp_dir: @@ -47,22 +65,32 @@ class TestPopulateDist(unittest.TestCase): os.mkdir(tmp_dist_dir) modules = [ - mm.MAINLINE_MODULES_BY_APEX["com.android.art"], - mm.MAINLINE_MODULES_BY_APEX["com.android.ipsec"], + MAINLINE_MODULES_BY_APEX["com.android.art"], + MAINLINE_MODULES_BY_APEX["com.android.ipsec"], ] - # Create input file structure. - for module in modules: - for sdk in module.sdks: - self.create_snapshot_file(tmp_out_dir, sdk, "current") + subprocess_runner = mm.SubprocessRunner() - producer = mm.SdkDistProducer( + snapshot_builder = FakeSnapshotBuilder( + subprocess_runner=subprocess_runner, out_dir=tmp_out_dir, + ) + + build_releases = [ + mm.Q, + mm.R, + mm.S, + mm.LATEST, + mm.LEGACY_BUILD_RELEASE, + ] + + producer = mm.SdkDistProducer( + subprocess_runner=subprocess_runner, + snapshot_builder=snapshot_builder, dist_dir=tmp_dist_dir, ) - sdk_versions = ["current"] - producer.populate_dist(sdk_versions, modules) + producer.produce_dist(modules, build_releases) files = [] for abs_dir, _, filenames in os.walk(tmp_dist_dir): @@ -70,20 +98,33 @@ class TestPopulateDist(unittest.TestCase): for f in filenames: files.append(os.path.join(rel_dir, f)) # pylint: disable=line-too-long - self.assertEqual([ - "mainline-sdks/current/com.android.art/host-exports/art-module-host-exports-current.zip", - "mainline-sdks/current/com.android.art/sdk/art-module-sdk-current.zip", - "mainline-sdks/current/com.android.art/test-exports/art-module-test-exports-current.zip", - "mainline-sdks/current/com.android.ipsec/sdk/ipsec-module-sdk-current.zip", - "stubs/com.android.art/sdk_library/public/api.txt", - "stubs/com.android.art/sdk_library/public/lib.jar", - "stubs/com.android.art/sdk_library/public/removed.txt", - "stubs/com.android.art/sdk_library/public/source.srcjar", - "stubs/com.android.ipsec/sdk_library/public/api.txt", - "stubs/com.android.ipsec/sdk_library/public/lib.jar", - "stubs/com.android.ipsec/sdk_library/public/removed.txt", - "stubs/com.android.ipsec/sdk_library/public/source.srcjar", - ], sorted(files)) + self.assertEqual( + [ + # Legacy copy of the snapshots, for use by tools that don't support build specific snapshots. + "mainline-sdks/current/com.android.art/host-exports/art-module-host-exports-current.zip", + "mainline-sdks/current/com.android.art/sdk/art-module-sdk-current.zip", + "mainline-sdks/current/com.android.art/test-exports/art-module-test-exports-current.zip", + "mainline-sdks/current/com.android.ipsec/sdk/ipsec-module-sdk-current.zip", + # Build specific snapshots. + "mainline-sdks/for-S-build/current/com.android.art/host-exports/art-module-host-exports-current.zip", + "mainline-sdks/for-S-build/current/com.android.art/sdk/art-module-sdk-current.zip", + "mainline-sdks/for-S-build/current/com.android.art/test-exports/art-module-test-exports-current.zip", + "mainline-sdks/for-S-build/current/com.android.ipsec/sdk/ipsec-module-sdk-current.zip", + "mainline-sdks/for-latest-build/current/com.android.art/host-exports/art-module-host-exports-current.zip", + "mainline-sdks/for-latest-build/current/com.android.art/sdk/art-module-sdk-current.zip", + "mainline-sdks/for-latest-build/current/com.android.art/test-exports/art-module-test-exports-current.zip", + "mainline-sdks/for-latest-build/current/com.android.ipsec/sdk/ipsec-module-sdk-current.zip", + # Legacy stubs directory containing unpacked java_sdk_library artifacts. + "stubs/com.android.art/sdk_library/public/api.txt", + "stubs/com.android.art/sdk_library/public/lib.jar", + "stubs/com.android.art/sdk_library/public/removed.txt", + "stubs/com.android.art/sdk_library/public/source.srcjar", + "stubs/com.android.ipsec/sdk_library/public/api.txt", + "stubs/com.android.ipsec/sdk_library/public/lib.jar", + "stubs/com.android.ipsec/sdk_library/public/removed.txt", + "stubs/com.android.ipsec/sdk_library/public/source.srcjar", + ], + sorted(files)) def pathToTestData(relative_path): @@ -114,7 +155,11 @@ def readTestData(relative_path): class TestSoongConfigBoilerplateInserter(unittest.TestCase): def apply_transformations(self, src, transformations, expected): - producer = mm.SdkDistProducer(script=self._testMethodName) + producer = mm.SdkDistProducer( + subprocess_runner=None, + snapshot_builder=None, + script=self._testMethodName, + ) with tempfile.TemporaryDirectory() as tmp_dir: path = os.path.join(tmp_dir, "Android.bp") @@ -140,7 +185,7 @@ class TestSoongConfigBoilerplateInserter(unittest.TestCase): expected = readTestData("ipsec_Android.bp.expected") - module = mm.MAINLINE_MODULES_BY_APEX["com.android.ipsec"] + module = MAINLINE_MODULES_BY_APEX["com.android.ipsec"] transformations = module.transformations() self.apply_transformations(src, transformations, expected) @@ -156,11 +201,24 @@ class TestSoongConfigBoilerplateInserter(unittest.TestCase): expected = readTestData("art_Android.bp.expected") - module = mm.MAINLINE_MODULES_BY_APEX["com.android.art"] + module = MAINLINE_MODULES_BY_APEX["com.android.art"] transformations = module.transformations() self.apply_transformations(src, transformations, expected) +class TestFilterModules(unittest.TestCase): + + def test_no_filter(self): + modules = mm.filter_modules(mm.MAINLINE_MODULES) + self.assertEqual(modules, mm.MAINLINE_MODULES) + + def test_with_filter(self): + os.environ["TARGET_BUILD_APPS"] = "com.android.art" + modules = mm.filter_modules(mm.MAINLINE_MODULES) + expected = MAINLINE_MODULES_BY_APEX["com.android.art"] + self.assertEqual(modules, [expected]) + + if __name__ == "__main__": unittest.main(verbosity=2) diff --git a/proto/classpaths.proto b/proto/classpaths.proto index 829c14ca..97f288e9 100644 --- a/proto/classpaths.proto +++ b/proto/classpaths.proto @@ -21,6 +21,7 @@ enum Classpath { BOOTCLASSPATH = 1; SYSTEMSERVERCLASSPATH = 2; DEX2OATBOOTCLASSPATH = 3; + STANDALONE_SYSTEMSERVER_JARS = 4; } // Individual entry in a classpath variable. diff --git a/sdk/ModuleDefaults.bp b/sdk/ModuleDefaults.bp index e89d676e..7dea5460 100644 --- a/sdk/ModuleDefaults.bp +++ b/sdk/ModuleDefaults.bp @@ -19,34 +19,11 @@ package { 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 " + "--enhance-documentation " -// TODO: modularize this so not every module has the same list -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 + @@ -126,6 +103,7 @@ java_defaults { impl_library_visibility: [ ":__pkg__", "//frameworks/base", // For framework-all + "//frameworks/base/api", // For framework-all ], stubs_source_visibility: ["//visibility:private"], @@ -155,8 +133,8 @@ java_defaults { ":__subpackages__", "//frameworks/base/apex:__subpackages__", "//frameworks/base/libs/hwui", - // TODO: remove after moving connectivity to packages/modules - "//frameworks/base/packages/Connectivity:__subpackages__", + // TODO(b/208914639): remove after moving files to packages/modules/Connectivity + "//frameworks/base/packages/ConnectivityT:__subpackages__", "//frameworks/base/wifi", "//packages/modules:__subpackages__", "//packages/providers/MediaProvider:__subpackages__", @@ -202,7 +180,7 @@ stubs_defaults { }, }, dist: { - targets: ["sdk", "win_sdk"], + targets: ["sdk"], dir: "apistubs/android/system-server/api", }, } @@ -212,7 +190,7 @@ stubs_defaults { java_defaults { name: "service-module-stubs-defaults", dist: { - targets: ["sdk", "win_sdk"], + targets: ["sdk"], dir: "apistubs/android/system-server", }, } diff --git a/tools/Android.bp b/tools/Android.bp index 8f0f5296..642c2f8a 100644 --- a/tools/Android.bp +++ b/tools/Android.bp @@ -45,10 +45,10 @@ python_binary_host { libs: ["sdk_proto_python"], } -gensrcs { +genrule { name: "cur_sdkinfo_src", - srcs: [""], tools: [ "gen_sdkinfo" ], + out: ["sdkinfo.pb"], product_variables: { platform_sdk_extension_version: { cmd: "$(location) -v %d -o $(out)", |