aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-02-14 22:44:43 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-02-14 22:44:43 +0000
commit522e7451e7c3c2b74fccdfe2b6f7f8ca0d531e21 (patch)
treed1111256222a22cbaa7ef23bbc768ce9904b4f50
parent0b4ec9055a5c80a05dd76f5b7bcad99753376f10 (diff)
parent6df607c0d0f0da31af014fde59e06ff762d0f64e (diff)
downloadcommon-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_OWNERS5
-rw-r--r--build/allowed_deps.txt165
-rwxr-xr-xbuild/build_unbundled_mainline_module.sh8
-rwxr-xr-xbuild/mainline_modules_sdks.py437
-rwxr-xr-xbuild/mainline_modules_sdks.sh29
-rw-r--r--build/mainline_modules_sdks_test.py122
-rw-r--r--proto/classpaths.proto1
-rw-r--r--sdk/ModuleDefaults.bp32
-rw-r--r--tools/Android.bp4
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)",