aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build/allowed_deps.txt139
-rwxr-xr-xbuild/mainline_modules_sdks.py29
-rw-r--r--javatests/com/android/modules/apkinapex/Android.bp41
-rw-r--r--javatests/com/android/modules/apkinapex/ApkInApexTest.java82
-rw-r--r--javatests/com/android/modules/apkinapex/OWNERS5
-rw-r--r--javatests/com/android/modules/apkinapex/TEST_MAPPING7
-rw-r--r--javatests/com/android/modules/apkinapex/apex/Android.bp43
-rw-r--r--javatests/com/android/modules/apkinapex/apex/manifest.json4
-rw-r--r--javatests/com/android/modules/apkinapex/apex/test_com.android.modules.apkinapex.avbpubkeybin0 -> 1032 bytes
-rw-r--r--javatests/com/android/modules/apkinapex/apex/test_com.android.modules.apkinapex.pem51
-rw-r--r--javatests/com/android/modules/apkinapex/apex/test_com.android.modules.apkinapex.pk8bin0 -> 2376 bytes
-rw-r--r--javatests/com/android/modules/apkinapex/apex/test_com.android.modules.apkinapex.x509.pem34
-rw-r--r--javatests/com/android/modules/apkinapex/apps/Android.bp50
-rw-r--r--javatests/com/android/modules/apkinapex/apps/FutureMinSdkAndroidManifest.xml24
-rw-r--r--javatests/com/android/modules/apkinapex/apps/FutureTargetSdkAndroidManifest.xml24
-rw-r--r--javatests/com/android/modules/apkinapex/apps/InstallableAndroidManifest.xml19
-rw-r--r--javatests/com/android/modules/apkinapex/apps/PastMaxSdkAndroidManifest.xml22
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/Android.bp46
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/OWNERS5
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/TEST_MAPPING7
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/UpdatableSharedLibsTest.java91
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/apex/Android.bp40
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/apex/com.android.modules.updatablesharedlibs.avbpubkeybin0 -> 1032 bytes
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/apex/com.android.modules.updatablesharedlibs.pem51
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/apex/com.android.modules.updatablesharedlibs.pk8bin0 -> 2375 bytes
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/apex/com.android.modules.updatablesharedlibs.x509.pem34
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/apex/manifest.json4
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/apps/targetS/Android.bp29
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/apps/targetS/AndroidManifest.xml24
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/apps/targetS/UpdatableSharedLibraryTargetSTest.java77
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/apps/targetT/Android.bp29
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/apps/targetT/AndroidManifest.xml24
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/apps/targetT/UpdatableSharedLibraryTargetTTest.java66
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/apps/targetTWithLib/Android.bp33
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/apps/targetTWithLib/AndroidManifest.xml24
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/apps/targetTWithLib/UpdatableSharedLibraryTargetTWithLibraryTest.java59
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/libs/before/t/Android.bp38
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/libs/before/t/Api.java27
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/libs/before/t/api_dir/current.txt10
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/libs/before/t/api_dir/module-lib-current.txt0
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/libs/before/t/api_dir/module-lib-removed.txt0
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/libs/before/t/api_dir/removed.txt1
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/libs/before/t/api_dir/system-current.txt1
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/libs/before/t/api_dir/system-removed.txt1
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/libs/before/t/api_dir/test-current.txt1
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/libs/before/t/api_dir/test-removed.txt1
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/libs/since/t/Android.bp38
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/libs/since/t/Api.java27
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/libs/since/t/api_dir/current.txt10
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/libs/since/t/api_dir/module-lib-current.txt0
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/libs/since/t/api_dir/module-lib-removed.txt0
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/libs/since/t/api_dir/removed.txt1
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/libs/since/t/api_dir/system-current.txt1
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/libs/since/t/api_dir/system-removed.txt1
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/libs/since/t/api_dir/test-current.txt1
-rw-r--r--javatests/com/android/modules/updatablesharedlibs/libs/since/t/api_dir/test-removed.txt1
-rw-r--r--proto/sdk.proto5
-rw-r--r--sdk/ModuleDefaults.bp1
-rw-r--r--tools/Android.bp3
59 files changed, 1380 insertions, 6 deletions
diff --git a/build/allowed_deps.txt b/build/allowed_deps.txt
index d491781a..d83e4f02 100644
--- a/build/allowed_deps.txt
+++ b/build/allowed_deps.txt
@@ -13,11 +13,22 @@
# See go/apex-allowed-deps-error for more details.
# TODO(b/157465465): introduce automated quality signals and remove this list.
+android.hardware.audio.common-V1-ndk(minSdkVersion:31)
+android.hardware.audio.common@5.0(minSdkVersion:30)
+android.hardware.bluetooth.a2dp@1.0(minSdkVersion:30)
+android.hardware.bluetooth.audio-V1-ndk(minSdkVersion:31)
+android.hardware.bluetooth.audio-V2-ndk(minSdkVersion:31)
+android.hardware.bluetooth.audio@2.0(minSdkVersion:30)
+android.hardware.bluetooth.audio@2.1(minSdkVersion:30)
+android.hardware.bluetooth@1.0(minSdkVersion:30)
+android.hardware.bluetooth@1.1(minSdkVersion:30)
android.hardware.cas.native@1.0(minSdkVersion:29)
android.hardware.cas@1.0(minSdkVersion:29)
android.hardware.common-ndk_platform(minSdkVersion:29)
android.hardware.common-V2-ndk(minSdkVersion:29)
android.hardware.common-V2-ndk_platform(minSdkVersion:29)
+android.hardware.common.fmq-V1-ndk(minSdkVersion:29)
+android.hardware.graphics.allocator-V1-ndk(minSdkVersion:29)
android.hardware.graphics.allocator@2.0(minSdkVersion:29)
android.hardware.graphics.allocator@3.0(minSdkVersion:29)
android.hardware.graphics.allocator@4.0(minSdkVersion:29)
@@ -26,6 +37,7 @@ android.hardware.graphics.bufferqueue@2.0(minSdkVersion:29)
android.hardware.graphics.common-ndk_platform(minSdkVersion:29)
android.hardware.graphics.common-V2-ndk(minSdkVersion:29)
android.hardware.graphics.common-V2-ndk_platform(minSdkVersion:29)
+android.hardware.graphics.common-V3-ndk(minSdkVersion:29)
android.hardware.graphics.common@1.0(minSdkVersion:29)
android.hardware.graphics.common@1.1(minSdkVersion:29)
android.hardware.graphics.common@1.2(minSdkVersion:29)
@@ -48,9 +60,12 @@ android.hardware.neuralnetworks@1.0(minSdkVersion:30)
android.hardware.neuralnetworks@1.1(minSdkVersion:30)
android.hardware.neuralnetworks@1.2(minSdkVersion:30)
android.hardware.neuralnetworks@1.3(minSdkVersion:30)
+android.hardware.radio-V1.0-java(minSdkVersion:current)
android.hardware.tetheroffload.config-V1.0-java(minSdkVersion:current)
android.hardware.tetheroffload.control-V1.0-java(minSdkVersion:current)
android.hardware.tetheroffload.control-V1.1-java(minSdkVersion:current)
+android.hardware.uwb-V1-ndk(minSdkVersion:Tiramisu)
+android.hardware.uwb-V1-rust(minSdkVersion:Tiramisu)
android.hardware.wifi-V1.0-java(minSdkVersion:30)
android.hardware.wifi-V1.0-java-constants(minSdkVersion:30)
android.hardware.wifi-V1.1-java(minSdkVersion:30)
@@ -81,7 +96,11 @@ android.hidl.safe_union@1.0(minSdkVersion:29)
android.hidl.token@1.0(minSdkVersion:29)
android.hidl.token@1.0-utils(minSdkVersion:29)
android.media.audio.common.types-V1-cpp(minSdkVersion:29)
+android.media.audio.common.types-V1-ndk(minSdkVersion:29)
android.net.ipsec.ike.xml(minSdkVersion:(no version))
+android.system.suspend-V1-ndk(minSdkVersion:30)
+android.system.suspend-V1-ndk(minSdkVersion:Tiramisu)
+android.system.suspend.control-V1-ndk(minSdkVersion:30)
android_downloader_lib(minSdkVersion:30)
androidx-constraintlayout_constraintlayout(minSdkVersion:14)
androidx-constraintlayout_constraintlayout-solver(minSdkVersion:24)
@@ -109,6 +128,7 @@ androidx.drawerlayout_drawerlayout(minSdkVersion:14)
androidx.dynamicanimation_dynamicanimation(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)
androidx.interpolator_interpolator(minSdkVersion:14)
@@ -176,6 +196,7 @@ audiopolicy-aidl-cpp(minSdkVersion:29)
auto_value_annotations(minSdkVersion:19)
av-headers(minSdkVersion:29)
av-types-aidl-cpp(minSdkVersion:29)
+avrcp_headers(minSdkVersion:30)
bcm_object(minSdkVersion:29)
bionic_libc_platform_headers(minSdkVersion:29)
boringssl_self_test(minSdkVersion:29)
@@ -191,8 +212,10 @@ car-rotary-lib(minSdkVersion:28)
car-rotary-lib-resources(minSdkVersion:28)
car-ui-lib(minSdkVersion:28)
car-ui-lib-resources(minSdkVersion:28)
+census(minSdkVersion:30)
clatd(minSdkVersion:30)
codecs_g711dec(minSdkVersion:29)
+com.android.vcard(minSdkVersion:9)
com.google.android.material_material(minSdkVersion:14)
connectivity_native_aidl_interface-V1-java(minSdkVersion:30)
conscrypt(minSdkVersion:29)
@@ -219,9 +242,9 @@ 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)
+exoplayer-annotation_stubs(minSdkVersion:16)
+exoplayer-mediaprovider-core(minSdkVersion:16)
+exoplayer-mediaprovider-ui(minSdkVersion:16)
ExtServices(minSdkVersion:30)
ExtServices(minSdkVersion:current)
ExtServices-core(minSdkVersion:30)
@@ -232,13 +255,15 @@ fmtlib(minSdkVersion:29)
fmtlib_headers(minSdkVersion:29)
fmtlib_ndk(minSdkVersion:29)
fp16_headers(minSdkVersion:30)
+framework-bluetooth(minSdkVersion:current)
framework-mediaprovider(minSdkVersion:30)
framework-permission(minSdkVersion:30)
framework-permission(minSdkVersion:current)
framework-statsd(minSdkVersion:30)
framework-statsd(minSdkVersion:current)
framework-tethering(minSdkVersion:30)
-framework-uwb(minSdkVersion:current)
+framework-uwb(minSdkVersion:33)
+framework-uwb(minSdkVersion:Tiramisu)
framework-wifi(minSdkVersion:30)
framework-wifi-util-lib(minSdkVersion:30)
gemmlowp_headers(minSdkVersion:(no version))
@@ -249,14 +274,15 @@ geotz_s2storage_ro(minSdkVersion:31)
GoogleCellBroadcastApp(minSdkVersion:29)
GoogleCellBroadcastServiceModule(minSdkVersion:29)
GoogleExtServices(minSdkVersion:30)
-GoogleExtServices(minSdkVersion:current)
GooglePermissionController(minSdkVersion:28)
GooglePermissionController(minSdkVersion:30)
+gpr_base(minSdkVersion:30)
guava(minSdkVersion:current)
gwp_asan_headers(minSdkVersion:S)
icing-java-proto-lite(minSdkVersion:current)
iconloader(minSdkVersion:21)
iconloader(minSdkVersion:26)
+internal_include_headers(minSdkVersion:30)
ipmemorystore-aidl-interfaces-java(minSdkVersion:29)
ipmemorystore-aidl-interfaces-V10-java(minSdkVersion:29)
jacocoagent(minSdkVersion:9)
@@ -277,8 +303,11 @@ libadbd_core(minSdkVersion:(no version))
libadbd_core(minSdkVersion:30)
libadbd_services(minSdkVersion:(no version))
libadbd_services(minSdkVersion:30)
+libaddress_sorting(minSdkVersion:30)
libaidlcommonsupport(minSdkVersion:29)
liballoc.rust_sysroot(minSdkVersion:29)
+libalts_frame_protector(minSdkVersion:30)
+libalts_util(minSdkVersion:30)
libamrextractor(minSdkVersion:29)
libandroid_log_sys(minSdkVersion:29)
libandroid_logger(minSdkVersion:29)
@@ -291,6 +320,7 @@ libasync_safe(minSdkVersion:apex_inherit)
libasyncio(minSdkVersion:(no version))
libasyncio(minSdkVersion:apex_inherit)
libatomic(minSdkVersion:(no version))
+libaudio-a2dp-hw-utils(minSdkVersion:29)
libaudio_system_headers(minSdkVersion:29)
libaudioclient_aidl_conversion_util(minSdkVersion:29)
libaudioclient_headers(minSdkVersion:29)
@@ -315,9 +345,16 @@ libbinder_ndk_sys(minSdkVersion:Tiramisu)
libbinder_rs(minSdkVersion:Tiramisu)
libbinder_tokio_rs(minSdkVersion:Tiramisu)
libbinderthreadstateutils(minSdkVersion:29)
+libbitflags(minSdkVersion:29)
+libbluetooth-types(minSdkVersion:29)
libbluetooth-types-header(minSdkVersion:29)
+libbluetooth_headers(minSdkVersion:30)
libbrotli(minSdkVersion:(no version))
libbrotli(minSdkVersion:apex_inherit)
+libbt-platform-protos-lite(minSdkVersion:30)
+libbt_keystore_cc(minSdkVersion:30)
+libbt_keystore_cc_headers(minSdkVersion:30)
+libbtcore_headers(minSdkVersion:30)
libbuildversion(minSdkVersion:(no version))
libbuildversion(minSdkVersion:26)
libbytes(minSdkVersion:29)
@@ -331,8 +368,10 @@ libc_headers_arch(minSdkVersion:apex_inherit)
libc_llndk_headers(minSdkVersion:apex_inherit)
libc_scudo(minSdkVersion:apex_inherit)
libcap(minSdkVersion:29)
+libcesu8(minSdkVersion:29)
libcfg_if(minSdkVersion:29)
libcfg_if.rust_sysroot(minSdkVersion:29)
+libchrome(minSdkVersion:30)
libcodec2(minSdkVersion:29)
libcodec2_headers(minSdkVersion:29)
libcodec2_hidl@1.0(minSdkVersion:29)
@@ -372,6 +411,7 @@ libcodec2_soft_vp9dec(minSdkVersion:29)
libcodec2_soft_vp9enc(minSdkVersion:29)
libcodec2_vndk(minSdkVersion:29)
libcom_android_networkstack_tethering_util_jni(minSdkVersion:30)
+libcombine(minSdkVersion:29)
libcompiler_builtins.rust_sysroot(minSdkVersion:29)
libcore.rust_sysroot(minSdkVersion:29)
libcrypto(minSdkVersion:29)
@@ -380,8 +420,11 @@ libcrypto_static(minSdkVersion:29)
libcrypto_utils(minSdkVersion:(no version))
libcrypto_utils(minSdkVersion:apex_inherit)
libcutils(minSdkVersion:29)
+libcutils_bindgen(minSdkVersion:29)
libcutils_headers(minSdkVersion:29)
libcutils_sockets(minSdkVersion:29)
+libcxx(minSdkVersion:29)
+libcxxbridge05(minSdkVersion:29)
libdexfile_external_headers(minSdkVersion:31)
libdexfile_support(minSdkVersion:31)
libdiagnose_usb(minSdkVersion:(no version))
@@ -389,10 +432,14 @@ libdiagnose_usb(minSdkVersion:apex_inherit)
libdmabufheap(minSdkVersion:29)
libdmabufinfo(minSdkVersion:S)
libdoh_ffi(minSdkVersion:29)
+libdowncast_rs(minSdkVersion:29)
libeigen(minSdkVersion:(no version))
libeigen(minSdkVersion:apex_inherit)
libenv_logger(minSdkVersion:29)
+liberror_headers(minSdkVersion:29)
+libevent(minSdkVersion:30)
libexpat(minSdkVersion:apex_inherit)
+libexpectedutils_headers(minSdkVersion:29)
libextservices(minSdkVersion:30)
libextservices_jni(minSdkVersion:30)
libfft2d(minSdkVersion:30)
@@ -401,6 +448,7 @@ libFLAC(minSdkVersion:29)
libFLAC-config(minSdkVersion:29)
libFLAC-headers(minSdkVersion:29)
libflacextractor(minSdkVersion:29)
+libflatbuffers-cpp(minSdkVersion:30)
libfmq(minSdkVersion:29)
libfmq-base(minSdkVersion:29)
libform_urlencoded(minSdkVersion:29)
@@ -420,6 +468,41 @@ libgcc_stripped(minSdkVersion:(no version))
libgetopts(minSdkVersion:29)
libgralloctypes(minSdkVersion:29)
libgrallocusage(minSdkVersion:29)
+libgrpc(minSdkVersion:30)
+libgrpc++(minSdkVersion:30)
+libgrpc++_base(minSdkVersion:30)
+libgrpc++_codegen_base_src(minSdkVersion:30)
+libgrpc_base(minSdkVersion:30)
+libgrpc_base_c(minSdkVersion:30)
+libgrpc_bindgen(minSdkVersion:29)
+libgrpc_client_authority_filter(minSdkVersion:30)
+libgrpc_client_channel(minSdkVersion:30)
+libgrpc_deadline_filter(minSdkVersion:30)
+libgrpc_http_filters(minSdkVersion:30)
+libgrpc_lb_policy_grpclb_secure(minSdkVersion:30)
+libgrpc_lb_policy_pick_first(minSdkVersion:30)
+libgrpc_lb_policy_round_robin(minSdkVersion:30)
+libgrpc_max_age_filter(minSdkVersion:30)
+libgrpc_message_size_filter(minSdkVersion:30)
+libgrpc_resolver_dns_ares(minSdkVersion:30)
+libgrpc_resolver_dns_native(minSdkVersion:30)
+libgrpc_resolver_fake(minSdkVersion:30)
+libgrpc_resolver_sockaddr(minSdkVersion:30)
+libgrpc_secure(minSdkVersion:30)
+libgrpc_server_backward_compatibility(minSdkVersion:30)
+libgrpc_trace(minSdkVersion:30)
+libgrpc_transport_chttp2(minSdkVersion:30)
+libgrpc_transport_chttp2_alpn(minSdkVersion:30)
+libgrpc_transport_chttp2_client_connector(minSdkVersion:30)
+libgrpc_transport_chttp2_client_insecure(minSdkVersion:30)
+libgrpc_transport_chttp2_client_secure(minSdkVersion:30)
+libgrpc_transport_chttp2_server_insecure(minSdkVersion:30)
+libgrpc_transport_chttp2_server_secure(minSdkVersion:30)
+libgrpc_transport_inproc(minSdkVersion:30)
+libgrpc_workaround_cronet_compression_filter(minSdkVersion:30)
+libgrpc_wrap(minSdkVersion:29)
+libgrpcio(minSdkVersion:29)
+libgrpcio_sys(minSdkVersion:29)
libgsm(minSdkVersion:apex_inherit)
libgtest_prod(minSdkVersion:apex_inherit)
libgtest_prod_headers(minSdkVersion:apex_inherit)
@@ -437,6 +520,8 @@ libhwbinder_headers(minSdkVersion:29)
libidna(minSdkVersion:29)
libion(minSdkVersion:29)
libip_checksum(minSdkVersion:30)
+libjni(minSdkVersion:29)
+libjni_sys(minSdkVersion:29)
libjsoncpp(minSdkVersion:29)
libkll(minSdkVersion:30)
libkll-encoder(minSdkVersion:30)
@@ -448,8 +533,11 @@ liblibc(minSdkVersion:29)
liblibc.rust_sysroot(minSdkVersion:29)
libLibGuiProperties(minSdkVersion:29)
liblibm(minSdkVersion:29)
+liblibz_sys(minSdkVersion:29)
+liblock_api(minSdkVersion:29)
liblog_headers(minSdkVersion:29)
liblog_rust(minSdkVersion:29)
+liblogger(minSdkVersion:29)
liblua(minSdkVersion:(no version))
liblua(minSdkVersion:30)
liblz4(minSdkVersion:(no version))
@@ -469,6 +557,7 @@ libmedia_midiiowrapper(minSdkVersion:29)
libmediaformatshaper(minSdkVersion:29)
libmemchr(minSdkVersion:29)
libmeminfo(minSdkVersion:S)
+libmemoffset(minSdkVersion:29)
libminijail(minSdkVersion:29)
libminijail_gen_constants(minSdkVersion:(no version))
libminijail_gen_constants_obj(minSdkVersion:29)
@@ -477,6 +566,7 @@ libminijail_gen_syscall_obj(minSdkVersion:29)
libminijail_generated(minSdkVersion:29)
libmio(minSdkVersion:29)
libmkvextractor(minSdkVersion:29)
+libmodpb64(minSdkVersion:30)
libmodules-utils-build(minSdkVersion:29)
libmp3extractor(minSdkVersion:29)
libmp4extractor(minSdkVersion:29)
@@ -500,17 +590,22 @@ libneuralnetworks_common(minSdkVersion:30)
libneuralnetworks_headers(minSdkVersion:(no version))
libneuralnetworks_headers(minSdkVersion:30)
libneuralnetworks_shim_static(minSdkVersion:30)
+libnix(minSdkVersion:29)
libnum_cpus(minSdkVersion:29)
+libnum_traits(minSdkVersion:29)
liboggextractor(minSdkVersion:29)
libonce_cell(minSdkVersion:29)
libopenjdkjvmti_headers(minSdkVersion:31)
libopus(minSdkVersion:29)
libpanic_abort.rust_sysroot(minSdkVersion:29)
+libparking_lot(minSdkVersion:29)
+libparking_lot_core(minSdkVersion:29)
libpercent_encoding(minSdkVersion:29)
libperfetto_client_experimental(minSdkVersion:S)
libpin_project_lite(minSdkVersion:29)
libpin_utils(minSdkVersion:29)
libPlatformProperties(minSdkVersion:S)
+libpower(minSdkVersion:Tiramisu)
libproc_macro_nested(minSdkVersion:29)
libprocessgroup(minSdkVersion:29)
libprocessgroup_headers(minSdkVersion:29)
@@ -523,8 +618,14 @@ libprofile-clang-extras_ndk(minSdkVersion:(no version))
libprofile-extras(minSdkVersion:(no version))
libprofile-extras_ndk(minSdkVersion:(no version))
libprofiler_builtins.rust_sysroot(minSdkVersion:29)
+libprotobuf(minSdkVersion:29)
+libprotobuf-c-nano(minSdkVersion:30)
+libprotobuf-cpp-full(minSdkVersion:29)
libprotobuf-cpp-lite(minSdkVersion:29)
+libprotobuf-cpp-lite-ndk(minSdkVersion:(no version))
+libprotobuf-cpp-lite-ndk(minSdkVersion:33)
libprotobuf-java-lite(minSdkVersion:current)
+libprotobuf-java-micro(minSdkVersion:8)
libprotobuf-java-nano(minSdkVersion:9)
libprotoutil(minSdkVersion:(no version))
libprotoutil(minSdkVersion:30)
@@ -536,9 +637,12 @@ libring-test(minSdkVersion:29)
librustc_demangle(minSdkVersion:(no version))
librustc_demangle.rust_sysroot(minSdkVersion:29)
librustc_demangle_static(minSdkVersion:(no version))
+librustutils(minSdkVersion:29)
libruy_static(minSdkVersion:30)
+libscopeguard(minSdkVersion:29)
libsfplugin_ccodec_utils(minSdkVersion:29)
libslab(minSdkVersion:29)
+libsmallvec(minSdkVersion:29)
libsonivoxwithoutjet(minSdkVersion:29)
libspeexresampler(minSdkVersion:29)
libspin(minSdkVersion:29)
@@ -572,6 +676,7 @@ libstd(minSdkVersion:29)
libstd_detect.rust_sysroot(minSdkVersion:29)
libsync(minSdkVersion:(no version))
libsystem_headers(minSdkVersion:apex_inherit)
+libsystem_properties_bindgen(minSdkVersion:29)
libsysutils(minSdkVersion:apex_inherit)
libtcutils(minSdkVersion:30)
libterm(minSdkVersion:29)
@@ -581,6 +686,7 @@ libtextclassifier(minSdkVersion:30)
libtextclassifier-java(minSdkVersion:28)
libtextclassifier-java(minSdkVersion:current)
libtextclassifier_abseil(minSdkVersion:30)
+libtextclassifier_bert_tokenizer(minSdkVersion:30)
libtextclassifier_flatbuffer_headers(minSdkVersion:30)
libtextclassifier_hash_headers(minSdkVersion:(no version))
libtextclassifier_hash_headers(minSdkVersion:apex_inherit)
@@ -595,6 +701,9 @@ libtinyvec(minSdkVersion:29)
libtinyvec_macros(minSdkVersion:29)
libtinyxml2(minSdkVersion:S)
libtokio(minSdkVersion:29)
+libtokio_stream(minSdkVersion:29)
+libtsi(minSdkVersion:30)
+libtsi_interface(minSdkVersion:30)
libui(minSdkVersion:29)
libui-types(minSdkVersion:apex_inherit)
libui_headers(minSdkVersion:29)
@@ -610,6 +719,7 @@ libutf(minSdkVersion:(no version))
libutf(minSdkVersion:14)
libutils(minSdkVersion:apex_inherit)
libutils_headers(minSdkVersion:apex_inherit)
+libuwb_uci_packets(minSdkVersion:Tiramisu)
libvorbisidec(minSdkVersion:29)
libvpx(minSdkVersion:29)
libwavextractor(minSdkVersion:29)
@@ -633,6 +743,7 @@ metrics-constants-protos(minSdkVersion:current)
modules-utils-backgroundthread(minSdkVersion:29)
modules-utils-build(minSdkVersion:29)
modules-utils-build_system(minSdkVersion:29)
+modules-utils-bytesmatcher(minSdkVersion:29)
modules-utils-handlerexecutor(minSdkVersion:29)
modules-utils-list-slice(minSdkVersion:30)
modules-utils-locallog(minSdkVersion:30)
@@ -640,6 +751,8 @@ modules-utils-os(minSdkVersion:30)
modules-utils-preconditions(minSdkVersion:29)
modules-utils-shell-command-handler(minSdkVersion:29)
modules-utils-statemachine(minSdkVersion:29)
+modules-utils-synchronous-result-receiver(minSdkVersion:29)
+modules-utils-uieventlogger-interface(minSdkVersion:29)
ndk_crtbegin_so.21(minSdkVersion:(no version))
ndk_crtbegin_so.27(minSdkVersion:(no version))
ndk_crtend_so.21(minSdkVersion:(no version))
@@ -773,6 +886,7 @@ 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)
prebuilt_androidx.fragment_fragment-nodeps(minSdkVersion:(no version))
@@ -882,6 +996,7 @@ prebuilt_asm-commons-9.2(minSdkVersion:current)
prebuilt_asm-tree-7.0(minSdkVersion:current)
prebuilt_asm-tree-9.2(minSdkVersion:current)
prebuilt_bionic_libc_platform_headers(minSdkVersion:(no version))
+prebuilt_car-ui-lib-nodeps(minSdkVersion:28)
prebuilt_com.google.android.material_material-nodeps(minSdkVersion:(no version))
prebuilt_com.google.android.material_material-nodeps(minSdkVersion:14)
prebuilt_crtbegin_dynamic(minSdkVersion:(no version))
@@ -891,6 +1006,9 @@ 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)
+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)
@@ -918,6 +1036,7 @@ prebuilt_test_framework-sdkextensions(minSdkVersion:(no version))
resourceobserver_aidl_interface-V1-ndk(minSdkVersion:29)
resourceobserver_aidl_interface-V1-ndk_platform(minSdkVersion:29)
s2-geometry-library-java(minSdkVersion:30)
+sap-api-java-static(minSdkVersion:30)
server_configurable_flags(minSdkVersion:29)
ServiceWifiResourcesGoogle(minSdkVersion:30)
SettingsLibActionBarShadow(minSdkVersion:21)
@@ -933,8 +1052,10 @@ SettingsLibProgressBar(minSdkVersion:21)
SettingsLibRadioButtonPreference(minSdkVersion:21)
SettingsLibRestrictedLockUtils(minSdkVersion:21)
SettingsLibSearchWidget(minSdkVersion:21)
+SettingsLibSelectorWithWidgetPreference(minSdkVersion:21)
SettingsLibSettingsTheme(minSdkVersion:21)
SettingsLibSettingsTransition(minSdkVersion:29)
+SettingsLibTopIntroPreference(minSdkVersion:21)
SettingsLibTwoTargetPreference(minSdkVersion:21)
SettingsLibUtils(minSdkVersion:21)
spatializer-aidl-cpp(minSdkVersion:29)
@@ -944,6 +1065,7 @@ statsd-aidl-ndk_platform(minSdkVersion:30)
statsprotos(minSdkVersion:29)
tensorflow_headers(minSdkVersion:(no version))
tensorflow_headers(minSdkVersion:apex_inherit)
+tensorflowlite_java(minSdkVersion:30)
TetheringApiCurrentLib(minSdkVersion:30)
textclassifier-java-proto-lite(minSdkVersion:30)
textclassifier-statsd(minSdkVersion:30)
@@ -953,6 +1075,13 @@ TextClassifierNotificationLibNoManifest(minSdkVersion:30)
TextClassifierServiceLibNoManifest(minSdkVersion:28)
TextClassifierServiceLibNoManifest(minSdkVersion:30)
tflite_support(minSdkVersion:30)
+tflite_support_base_task_api_java(minSdkVersion:30)
+tflite_support_classifiers_java(minSdkVersion:30)
+tflite_support_java(minSdkVersion:30)
+tflite_support_libz(minSdkVersion:30)
+tflite_support_metadata_extractor(minSdkVersion:30)
+tflite_support_task_core_proto(minSdkVersion:30)
+tflite_support_tokenizers(minSdkVersion:30)
wifi-lite-protos(minSdkVersion:30)
wifi-nano-protos(minSdkVersion:30)
wifi-service-pre-jarjar(minSdkVersion:30)
diff --git a/build/mainline_modules_sdks.py b/build/mainline_modules_sdks.py
index e1c9228c..eaa4639c 100755
--- a/build/mainline_modules_sdks.py
+++ b/build/mainline_modules_sdks.py
@@ -816,6 +816,16 @@ class BundledMainlineModule(MainlineModule):
# List of mainline modules.
MAINLINE_MODULES = [
MainlineModule(
+ apex="com.android.adservices",
+ sdks=["adservices-module-sdk"],
+ first_release=Tiramisu,
+ ),
+ MainlineModule(
+ apex="com.android.appsearch",
+ sdks=["appsearch-sdk"],
+ first_release=Tiramisu,
+ ),
+ MainlineModule(
apex="com.android.art",
sdks=[
"art-module-sdk",
@@ -832,6 +842,13 @@ MAINLINE_MODULES = [
configModuleTypePrefix="art_prebuilt_",
),
MainlineModule(
+ apex="com.android.btservices",
+ sdks=["btservices-module-sdk"],
+ first_release=Tiramisu,
+ # Bluetooth has always been and is still optional.
+ last_optional_release=LATEST,
+ ),
+ MainlineModule(
apex="com.android.conscrypt",
sdks=[
"conscrypt-module-sdk",
@@ -872,6 +889,11 @@ MAINLINE_MODULES = [
]),
),
MainlineModule(
+ apex="com.android.ondevicepersonalization",
+ sdks=["ondevicepersonalization-module-sdk"],
+ first_release=Tiramisu,
+ ),
+ MainlineModule(
apex="com.android.permission",
sdks=["permission-module-sdk"],
first_release=R,
@@ -912,6 +934,13 @@ MAINLINE_MODULES = [
]),
),
MainlineModule(
+ apex="com.android.uwb",
+ sdks=["uwb-module-sdk"],
+ first_release=Tiramisu,
+ # Uwb has always been and is still optional.
+ last_optional_release=LATEST,
+ ),
+ MainlineModule(
apex="com.android.wifi",
sdks=["wifi-module-sdk"],
first_release=R,
diff --git a/javatests/com/android/modules/apkinapex/Android.bp b/javatests/com/android/modules/apkinapex/Android.bp
new file mode 100644
index 00000000..ea5e0a8d
--- /dev/null
+++ b/javatests/com/android/modules/apkinapex/Android.bp
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * 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.
+ */
+
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+java_test_host {
+ name: "ApkInApexTest",
+ srcs: [
+ "ApkInApexTest.java"
+ ],
+ libs: ["tradefed"],
+ java_resources: [
+ ":test_com.android.modules.apkinapex",
+ ],
+ static_libs: [
+ "compatibility-host-util",
+ "cts-install-lib-host",
+ "frameworks-base-hostutils",
+ "modules-utils-build-testing",
+ "truth-prebuilt",
+ ],
+ test_suites: [
+ "general-tests",
+ "mts-core",
+ ],
+}
diff --git a/javatests/com/android/modules/apkinapex/ApkInApexTest.java b/javatests/com/android/modules/apkinapex/ApkInApexTest.java
new file mode 100644
index 00000000..f5c28fa1
--- /dev/null
+++ b/javatests/com/android/modules/apkinapex/ApkInApexTest.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * 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.
+ */
+
+package com.android.modules.apkinapex;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.junit.Assume.assumeTrue;
+import static org.junit.Assert.assertThrows;
+
+import com.android.modules.utils.build.testing.DeviceSdkLevel;
+import com.android.tradefed.device.DeviceNotAvailableException;
+import com.android.tradefed.testtype.DeviceJUnit4ClassRunner;
+import com.android.tradefed.testtype.junit4.BaseHostJUnit4Test;
+import com.android.internal.util.test.SystemPreparer;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.RuleChain;
+import org.junit.rules.TemporaryFolder;
+import org.junit.runner.RunWith;
+
+import android.cts.install.lib.host.InstallUtilsHost;
+
+import java.util.Set;
+
+/**
+ * Collection of tests to test functionality of APKs in apexes.
+ *
+ * <p>This test installs an apex which contains APKs and then performs the tests.
+ */
+@RunWith(DeviceJUnit4ClassRunner.class)
+public class ApkInApexTest extends BaseHostJUnit4Test {
+
+ private final InstallUtilsHost mHostUtils = new InstallUtilsHost(this);
+ private final TemporaryFolder mTemporaryFolder = new TemporaryFolder();
+ private final SystemPreparer mPreparer = new SystemPreparer(mTemporaryFolder, this::getDevice);
+
+ @Rule
+ public final RuleChain ruleChain = RuleChain.outerRule(mTemporaryFolder).around(mPreparer);
+
+ @Test
+ public void installApexAndRunTests() throws Exception {
+ if (!getDevice().isAdbRoot()) {
+ getDevice().enableAdbRoot();
+ }
+ assumeTrue("Device does not support updating APEX", mHostUtils.isApexUpdateSupported());
+ assumeTrue("Device requires root", getDevice().isAdbRoot());
+ DeviceSdkLevel deviceSdkLevel = new DeviceSdkLevel(getDevice());
+ assumeTrue("Test requires atLeastT", deviceSdkLevel.isDeviceAtLeastT());
+
+ String apex = "test_com.android.modules.apkinapex.apex";
+ mPreparer.pushResourceFile(apex, "/system/apex/" + apex);
+ mPreparer.reboot();
+
+ Set<String> packages = getDevice().getInstalledPackageNames();
+
+ assertThat(packages)
+ .containsAtLeast(
+ "com.android.modules.apkinapex.apps.installable",
+ "com.android.modules.apkinapex.apps.futuretargetsdk"
+ );
+
+ assertThat(packages)
+ .containsNoneOf(
+ "com.android.modules.apkinapex.apps.futureminsdk",
+ "com.android.modules.apkinapex.apps.pastmaxsdk"
+ );
+ }
+}
diff --git a/javatests/com/android/modules/apkinapex/OWNERS b/javatests/com/android/modules/apkinapex/OWNERS
new file mode 100644
index 00000000..55f5b971
--- /dev/null
+++ b/javatests/com/android/modules/apkinapex/OWNERS
@@ -0,0 +1,5 @@
+# Mainline modularization team
+
+andreionea@google.com
+pedroql@google.com
+satayev@google.com
diff --git a/javatests/com/android/modules/apkinapex/TEST_MAPPING b/javatests/com/android/modules/apkinapex/TEST_MAPPING
new file mode 100644
index 00000000..6db4d77f
--- /dev/null
+++ b/javatests/com/android/modules/apkinapex/TEST_MAPPING
@@ -0,0 +1,7 @@
+{
+ "postsubmit": [
+ {
+ "name": "ApkInApexTest"
+ }
+ ]
+}
diff --git a/javatests/com/android/modules/apkinapex/apex/Android.bp b/javatests/com/android/modules/apkinapex/apex/Android.bp
new file mode 100644
index 00000000..c57280eb
--- /dev/null
+++ b/javatests/com/android/modules/apkinapex/apex/Android.bp
@@ -0,0 +1,43 @@
+// Copyright (C) 2022 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// 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.
+
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+apex_key {
+ name: "test_com.android.modules.apkinapex.key",
+ public_key: "test_com.android.modules.apkinapex.avbpubkey",
+ private_key: "test_com.android.modules.apkinapex.pem",
+}
+
+android_app_certificate {
+ name: "test_com.android.modules.apkinapex.certificate",
+ certificate: "test_com.android.modules.apkinapex",
+}
+
+apex_test {
+ name: "test_com.android.modules.apkinapex",
+ manifest: "manifest.json",
+ file_contexts: ":apex.test-file_contexts",
+ key: "test_com.android.modules.apkinapex.key",
+ certificate: ":test_com.android.modules.apkinapex.certificate",
+ updatable: false,
+ apps: [
+ "com.android.modules.apkinapex.apps.installable",
+ "com.android.modules.apkinapex.apps.futureminsdk",
+ "com.android.modules.apkinapex.apps.futuretargetsdk",
+ "com.android.modules.apkinapex.apps.pastmaxsdk",
+ ],
+}
diff --git a/javatests/com/android/modules/apkinapex/apex/manifest.json b/javatests/com/android/modules/apkinapex/apex/manifest.json
new file mode 100644
index 00000000..e022bbcf
--- /dev/null
+++ b/javatests/com/android/modules/apkinapex/apex/manifest.json
@@ -0,0 +1,4 @@
+{
+ "name": "test_com.android.modules.apkinapex",
+ "version": 1
+}
diff --git a/javatests/com/android/modules/apkinapex/apex/test_com.android.modules.apkinapex.avbpubkey b/javatests/com/android/modules/apkinapex/apex/test_com.android.modules.apkinapex.avbpubkey
new file mode 100644
index 00000000..8048e32e
--- /dev/null
+++ b/javatests/com/android/modules/apkinapex/apex/test_com.android.modules.apkinapex.avbpubkey
Binary files differ
diff --git a/javatests/com/android/modules/apkinapex/apex/test_com.android.modules.apkinapex.pem b/javatests/com/android/modules/apkinapex/apex/test_com.android.modules.apkinapex.pem
new file mode 100644
index 00000000..b674ca5e
--- /dev/null
+++ b/javatests/com/android/modules/apkinapex/apex/test_com.android.modules.apkinapex.pem
@@ -0,0 +1,51 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIJJwIBAAKCAgEAnWpEHbsXLFO4bkjLgKGNfqBFPgnOHgK3YjK2bRTZ9qF3HYyo
+41EmBubFfKZOYjY9aHMOvn/LiAdmQTGU9/DB2m/Z1dDrao/f7lli+6yUYvdvHGKv
+5PcRHKSqSGNFdW/5M3bzO/Pz74zodJcpnL4ymuEd4xTBPC6g+Bdq09ZnVt7S2kNC
+xWrLOHSSXyrAIQQllsQtiDq/o0hC3vIvsnzMT3zFA/fsBLj4nyoVjt1Giu+m1kVX
+P2HNXV284pvrjWFFrFw4DgL/3Vz78Z/wLDCHn6mIy9D0otlgSy3+SCgPB3gEukTH
+f+e7Cvp4A9Gu7a7muweBIZ4kAcg0u5ZdoXze/yq8GzGWLVeKxe1TQWCNlqxnhaaI
+BvpRAu+QhkhZ7hgOYUtHhJYFpXDdhhiE3GDAgLmBnfZDw0YMQiWN9y3XjRgbA0p7
+jZgehkoadf0NlV+/HSB6elYfSqa7FzLvhys6GWEi8Pkiqfq1nBPTU0EFCxLxrkrx
+IZ6H+LkeAyPEj/lEzrVR2eSE8PKyst+/qFXCghiFMVQHNnG0R8G0t91epyx71rFR
+CVnNUMNPuxsI5c/ee90LfE6m69J1YGJ6a5dT+BG3Ezc21hjdnFFWnX+mTzgpujlb
+RuUc+t0b+kTEbUZNjA28iLKtOpDoLbxNzBt9hng/dad0bgPLoqWpMAI6PnECAwEA
+AQKCAgAYecNplAOAYuwUScFKmNP1Ulox0Th5Nhbpb9UplMpnLKfmsk44Og/dltgy
+D3G0l5ZovSsXt6sf1XaywFDXVFnv6uBF/Jv+D6zT1JYtZ6IS2UIvebC7uyav+3J2
+mujb37Mxq1cahU3ye0hRiIdx1ajsqAALpNh+0Qk6SfnUQkwDF9ZVFYw2QeqjNozj
+uzPwbkKh9JLX0bqmWr/7BlEgQYNLAK1pdoz+FvyhUtvTQNiNFcItIs70DfLuh3qt
+CW1QqEU7DYOxugmqk6Cg6yte05Ti4GtitXS0NXRhfB9DfOcJVEH37GXQn2lXxaYP
+gfTfBAjgH8SWQ455sHVyjWi1iULqz3DtTxudUMRscItg4IEXMyN67swOsayNE98n
+nFbjuxl39dF7AkJllIEt/lMjdmUbFZAq41D5NQx84daYE3uMUqHyQPszxzmSL3NS
+Up4g+aZ31k8jYKgRnkJqtUocjldGEjyXj8tNZuW2j+k4W77gIs3B8DC4EdAqjse0
+2huPPqEsqRUeqOZSrdrAsSDZF0mDa+LdbJzUJWBUejF4xclLEFOt3eZz2GtZzmne
+/bColrqhHGo4/JvWh6TzjQmbBy8nKj+fkHqSLIQzVRKSSl/T/M0Kwpq2WOn09s0O
+DJNf+6fO8VMs9H7I8hXC0CTw6xpQICypzSzYdT0QpZ4Eh61jIQKCAQEA0WGQn7w6
+1VuBzfETc0+1ytarkm0YMa4/rQh+GxsfhfoOPZn1oL7IbvveeNPMDxDX7UmKR7Fd
+5uqkDf5z02OCKVB7CHMMtZdYzv8DjSFn8AricBZZTR0T0UgSofDRB/JDblsz+1aI
+5SlyRE319PmZSPmk26twMuofA5NZ80kmPJw4fzR9JaOQAlvXbwrhCclnwUkBuxoi
+i7lqGQ4RZB+5ObKONVmMzpSsQU6910fLjkATLK13D4/QD23wo8XNdrfTdPyKGIXd
+lGOKtthO0YD67l8gp284OgT8PRM3dDsCW2EgOGEP+02BeEUH7wBmLWJv4UWAm44U
+wjiJFAapxhTnRQKCAQEAwHa1x6QS22BtDFhYiagBCEmz4pazJjYp5oa9EppNSiXv
+FUdwal0GiaASdTS2PaybhCLC81x4NopuWcwPlg2/go5Q6h4XAdjkMpC5r8XmmJFF
+eOVRU3x0Roz4ahWgkjoCBpxH9dY/rbZu6Ewg0+CJtrpERfQ9I6jLamsQ2aXWHIQg
+YS4zcYcy6N30A2JFKG82PfRaN/I743SqCy7xDmwt3rg+v0mYAZG40Bfdq98XjvdM
+BdnwxpTLLmqXPPFps5+NCX1xJnnV0iWPVekx92aJ4lxSiDAQybxZppDN094RJ1Lb
+P8Yip4C/jlgot/RJVuL7y/ck4lSleelfvpZ2Nt9HPQKCAQB5hp1AeSnUqBYBCAl4
+Bi3Hmy1eAX/nZfGDZsh6xxVW17noOzH7qIABGqMXkiaAIBCTovllfya3Xjz1+lgT
+u0/S1ulyEASyaTOcgRr4kQkYo9ilofMW9OeJssFNyM4qRIyqwri7CpDOIW43AuDc
+3PoBBxSOg0TN6GEz3BR7RluxFiMcgcSZUgPFurShuLjAy2szHkKo7BRc8LMJ88ZY
+TKlfOamcgWteg6AvD5rUFtGosLvwVIYkPB5QtkjTZX1JiIxs/B7S+O+Qru3WDlpA
+8xGxxPjY9Y627inQ8RRgm9dUXl0rG/sAqw2YVsiyCZNEiDvTjlmE78RQriuxueRU
+GdHZAoIBAC1IwSSkGju7yGyrLMnW2cdVcBnUU3qeK+Wttjb2T1Eu874R/QVJtgwT
+ucQSDv8b6cuBUlVoYHCUybofJVutCG5zhd5QDiHFIowzOT1+Vu923t2/Nw9prQIc
+kSaEyC8frvJXOydAreL1lcrafq7bmguAcCf1e500TghQALr1Jhe3jtbOxBPmN7hK
+4Osa6CLHZ//TypZ3TFgMTyYqeVVnZrOMrlbbvgRAgTeVJfcWmrhsv1pxGRHgWJ4n
+PkZ8lt5IoCqndUQUTpcPd1ZDdBo96ht0lYatqIWO55klYQiEq4yRFj0/JVA8HtYj
+MBF4TPlAlvY6xFbsi7LPklOJm271whECggEADVaKctJjo0di17JBn+QyKUPXr+To
+myarnVsi3PI1sP8DwIi5T0khx52xjt+yFXxU3u/+5L1pgpXX2eFXUZRhklk2V6O0
+hWdfQe2I20qNvVFZTNnsMCERInaxt3mT5jhH4hvYvlJ5CzcC6h5KOnQ9sq+LJh0o
+r32MOEfaJhQ0rkxRSm3gci19LSyZqRtLq3Z/GR8kH/eHL3HriP/88m4o8uSdXJ79
+DXeq2vMqf/mUfCUC4mmi60WMGEAn3WXbIT1v3BTZN1+/t9RzEFLnQrSNFgXKuU/t
+rwgF1RNJypEXDlO9RzCr/gB7Gd8MPZYD+f6w1ee4FO/IX/yQ9ffrxQygJw==
+-----END RSA PRIVATE KEY-----
diff --git a/javatests/com/android/modules/apkinapex/apex/test_com.android.modules.apkinapex.pk8 b/javatests/com/android/modules/apkinapex/apex/test_com.android.modules.apkinapex.pk8
new file mode 100644
index 00000000..a7fdf218
--- /dev/null
+++ b/javatests/com/android/modules/apkinapex/apex/test_com.android.modules.apkinapex.pk8
Binary files differ
diff --git a/javatests/com/android/modules/apkinapex/apex/test_com.android.modules.apkinapex.x509.pem b/javatests/com/android/modules/apkinapex/apex/test_com.android.modules.apkinapex.x509.pem
new file mode 100644
index 00000000..250ca497
--- /dev/null
+++ b/javatests/com/android/modules/apkinapex/apex/test_com.android.modules.apkinapex.x509.pem
@@ -0,0 +1,34 @@
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9ECFD53ZcG0C3ytBE7VKpvEYvgrm30+MA0GCSqGSIb3DQEBCwUAMIGv
+MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91
+bnRhaW4gVmlldzEQMA4GA1UECgwHQW5kcm9pZDEQMA4GA1UECwwHQW5kcm9pZDEi
+MCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTErMCkGA1UEAwwidGVz
+dF9jb20uYW5kcm9pZC5tb2R1bGVzLmFwa2luYXBleDAgFw0yMjA0MjAxMzI4MjNa
+GA80NzYwMDMxNjEzMjgyM1owga8xCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxp
+Zm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3MRAwDgYDVQQKDAdBbmRyb2lk
+MRAwDgYDVQQLDAdBbmRyb2lkMSIwIAYJKoZIhvcNAQkBFhNhbmRyb2lkQGFuZHJv
+aWQuY29tMSswKQYDVQQDDCJ0ZXN0X2NvbS5hbmRyb2lkLm1vZHVsZXMuYXBraW5h
+cGV4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAyKYGS+TPbDsOAMi/
+BIuOmWteJ1JvbLHVRYdXvLQuaT/x8Y6DCvaHbkh0WTOdytP3+ggJBcHW2SaRtvZg
+bjoluXLVsNkyKSCHo/oBZbsL6Fcba/fePcEfQgJSwMPfMZPTfxn6e6f6QgpWPYiY
+EF4XoJB0d48Im2Vj6kVSmngiGV93EVs+hJgaKdmt81LzrQyIuHmPP+LOS80KB2YS
+V5wNkSViX9UKEXjG0IejJGsG+5FXiZI06NIERM4lAJ8OBuGTPXRNrej+N8YsaOIb
+gPOMUJnEOyUeds4C6hTDZ+hqKbMBdLtXL3c3Jv/xYqXgB552HWS7jD/TdaHD9OmP
+mAE9VLFFMmChUcW3/fCzrPG/jU9YE1TJlhjvwWKueL1topHTMy684Finb01I1wPi
+gSNxBCnb58ejp2fbd6igR4J5GJomXxAOnWZjIjW4Xvq/LbCF+UrHoppdGUBVCr7Q
+sKd2ErnW5bu/6PCdTXNuUj1TstBOi0fM0mMHFawRhJmxwPzW2N4DjwtHoFOt1gEm
+OHZg85G7CVddA1rqzpU0y0GU8nDNGFvM04lxEuyJjXoT4ttVm9ye9YV+B6D+xE2B
+0PxAVMZPXHgriA2hUuCHX6Wq3tgR+pYYCyZIzHHgkHrGobYanc6WyaBVYKrIoO4z
+07c3VWDF5CK9+Sr2rY4eOYERCNECAwEAATANBgkqhkiG9w0BAQsFAAOCAgEAZcOG
+fle0l9KLwzDGXNYo5XaLppF891uphE2JaaHKrWIXNpKqFkg8iC0+Rxc4vpEGOj3x
+DwBQElB2dCYLlfsTdlszATSf3EeKfKFFnF7yf82zjqDyBiTnYn9V+oi85gBC/DCl
+PenCeTIv43qWAW660iR4wHVV87WLxlSPNo9HnV2ANwCfth4GBFmz9Shb54T9PiGJ
+GPjOzZU9yaNOt7XaScL4AFS9CSF6npkpUXpZ1Zo8jjLdk/JGkDbLbm9fVLPmpHq4
+ObkYAzIaApx5Oq0aVXQGAd1woDwT7EXpodv3swY3fSIc3rVkc9PmYAZZEH/X/7Ne
+oVS7xMRWQTowrxrtypeshKtu6S2+8ioJa1g6sVM5k0B9qnhJTDnCJFzqGwdb2gLv
+H8o1ZoRrp+w3CLFDySuy/4ty2Hv4kggyVO/ivhO7inMRDH0BVyFO6oKs5I2aVvQB
+kOxzPy6Isln3gdEW2Ckrd5Cg2QfpidJ7catDpnbN979F+YVM8v0gIyKOb4gEGFQU
+ZfjELGJZ2UNQdpmlcvrPJfvRS0g85szgISr5K+bO2g6DUcSbCpgnvvZh4javt1Cv
+Nmba1fpWvL+J8QdXtYYHFtCt/qc3M9WOgNmFNHqpSj+qQAMVG0O+Y3pXzX4crBqR
+h+Xiai9DFq4fJJoRGD6xp+j+5s6g3UcF2zA8Mv0=
+-----END CERTIFICATE-----
diff --git a/javatests/com/android/modules/apkinapex/apps/Android.bp b/javatests/com/android/modules/apkinapex/apps/Android.bp
new file mode 100644
index 00000000..04b56f29
--- /dev/null
+++ b/javatests/com/android/modules/apkinapex/apps/Android.bp
@@ -0,0 +1,50 @@
+// Copyright (C) 2022 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// 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.
+
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+android_test_helper_app {
+ name: "com.android.modules.apkinapex.apps.futureminsdk",
+ target_sdk_version: "Tiramisu",
+
+ // min sdk is overridden in the AndroidManifest.xml - but it is required to have a value here
+ // so the build system uses the value from the manifest!
+ min_sdk_version: "23",
+ apex_available: [ "test_com.android.modules.apkinapex" ],
+ manifest: "FutureMinSdkAndroidManifest.xml"
+}
+
+android_test_helper_app {
+ name: "com.android.modules.apkinapex.apps.futuretargetsdk",
+ target_sdk_version: "Tiramisu",
+ apex_available: [ "test_com.android.modules.apkinapex" ],
+ manifest: "FutureTargetSdkAndroidManifest.xml"
+}
+
+android_test_helper_app {
+ name: "com.android.modules.apkinapex.apps.pastmaxsdk",
+ target_sdk_version: "Tiramisu",
+ apex_available: [ "test_com.android.modules.apkinapex" ],
+ manifest: "PastMaxSdkAndroidManifest.xml"
+}
+
+android_test_helper_app {
+ name: "com.android.modules.apkinapex.apps.installable",
+ target_sdk_version: "Tiramisu",
+ min_sdk_version: "23",
+ apex_available: [ "test_com.android.modules.apkinapex" ],
+ manifest: "InstallableAndroidManifest.xml"
+}
diff --git a/javatests/com/android/modules/apkinapex/apps/FutureMinSdkAndroidManifest.xml b/javatests/com/android/modules/apkinapex/apps/FutureMinSdkAndroidManifest.xml
new file mode 100644
index 00000000..b81e3587
--- /dev/null
+++ b/javatests/com/android/modules/apkinapex/apps/FutureMinSdkAndroidManifest.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2022 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ 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.
+ -->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.modules.apkinapex.apps.futureminsdk">
+ <!-- on purpose we use a non-existing minSdkVersion to simulate a future API codename that
+ was not known when this system image was compiled -->
+ <uses-sdk
+ android:minSdkVersion="FutureSdkCodename"
+ />
+</manifest>
diff --git a/javatests/com/android/modules/apkinapex/apps/FutureTargetSdkAndroidManifest.xml b/javatests/com/android/modules/apkinapex/apps/FutureTargetSdkAndroidManifest.xml
new file mode 100644
index 00000000..962d846c
--- /dev/null
+++ b/javatests/com/android/modules/apkinapex/apps/FutureTargetSdkAndroidManifest.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2022 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ 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.
+ -->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.modules.apkinapex.apps.futuretargetsdk">
+ <!-- on purpose we use a non-existing targetSdkVersion to simulate a future API codename that
+ was not known when this system image was compiled -->
+ <uses-sdk
+ android:targetSdkVersion="FutureSdkCodename"
+ />
+</manifest>
diff --git a/javatests/com/android/modules/apkinapex/apps/InstallableAndroidManifest.xml b/javatests/com/android/modules/apkinapex/apps/InstallableAndroidManifest.xml
new file mode 100644
index 00000000..ee8ef927
--- /dev/null
+++ b/javatests/com/android/modules/apkinapex/apps/InstallableAndroidManifest.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2022 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ 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.
+ -->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.modules.apkinapex.apps.installable">
+</manifest>
diff --git a/javatests/com/android/modules/apkinapex/apps/PastMaxSdkAndroidManifest.xml b/javatests/com/android/modules/apkinapex/apps/PastMaxSdkAndroidManifest.xml
new file mode 100644
index 00000000..720a9b4f
--- /dev/null
+++ b/javatests/com/android/modules/apkinapex/apps/PastMaxSdkAndroidManifest.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2022 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ 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.
+ -->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.modules.apkinapex.apps.pastmaxsdk">
+ <uses-sdk
+ android:maxSdkVersion="30"
+ />
+</manifest>
diff --git a/javatests/com/android/modules/updatablesharedlibs/Android.bp b/javatests/com/android/modules/updatablesharedlibs/Android.bp
new file mode 100644
index 00000000..f469f95e
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/Android.bp
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * 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.
+ */
+
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+java_test_host {
+ name: "UpdatableSharedLibsTest",
+ srcs: [
+ "UpdatableSharedLibsTest.java"
+ ],
+ libs: ["tradefed"],
+ java_resources: [
+ ":test_com.android.modules.updatablesharedlibs",
+ ],
+ data: [
+ ":com.android.modules.updatablesharedlibs.apps.targetS",
+ ":com.android.modules.updatablesharedlibs.apps.targetT",
+ ":com.android.modules.updatablesharedlibs.apps.targetTWithLib",
+ ],
+ static_libs: [
+ "compatibility-host-util",
+ "cts-install-lib-host",
+ "frameworks-base-hostutils",
+ "modules-utils-build-testing",
+ "truth-prebuilt",
+ ],
+ test_suites: [
+ "general-tests",
+ "mts-core",
+ ],
+}
diff --git a/javatests/com/android/modules/updatablesharedlibs/OWNERS b/javatests/com/android/modules/updatablesharedlibs/OWNERS
new file mode 100644
index 00000000..55f5b971
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/OWNERS
@@ -0,0 +1,5 @@
+# Mainline modularization team
+
+andreionea@google.com
+pedroql@google.com
+satayev@google.com
diff --git a/javatests/com/android/modules/updatablesharedlibs/TEST_MAPPING b/javatests/com/android/modules/updatablesharedlibs/TEST_MAPPING
new file mode 100644
index 00000000..71bf5cc8
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/TEST_MAPPING
@@ -0,0 +1,7 @@
+{
+ "postsubmit": [
+ {
+ "name": "UpdatableSharedLibsTest"
+ }
+ ]
+}
diff --git a/javatests/com/android/modules/updatablesharedlibs/UpdatableSharedLibsTest.java b/javatests/com/android/modules/updatablesharedlibs/UpdatableSharedLibsTest.java
new file mode 100644
index 00000000..05295f61
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/UpdatableSharedLibsTest.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * 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.
+ */
+
+package com.android.modules.updatablesharedlibs;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.junit.Assume.assumeTrue;
+import static org.junit.Assert.assertThrows;
+
+import com.android.tradefed.targetprep.TargetSetupError;
+import com.android.tradefed.testtype.DeviceJUnit4ClassRunner;
+import com.android.tradefed.testtype.junit4.BaseHostJUnit4Test;
+import com.android.tradefed.testtype.junit4.DeviceTestRunOptions;
+import com.android.internal.util.test.SystemPreparer;
+
+import com.android.modules.utils.build.testing.DeviceSdkLevel;
+
+import org.junit.Assert;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.RuleChain;
+import org.junit.rules.TemporaryFolder;
+import org.junit.runner.RunWith;
+
+import android.cts.install.lib.host.InstallUtilsHost;
+
+@RunWith(DeviceJUnit4ClassRunner.class)
+public class UpdatableSharedLibsTest extends BaseHostJUnit4Test {
+
+ private final InstallUtilsHost mHostUtils = new InstallUtilsHost(this);
+ private final TemporaryFolder mTemporaryFolder = new TemporaryFolder();
+ private final SystemPreparer mPreparer = new SystemPreparer(mTemporaryFolder, this::getDevice);
+
+ @Rule
+ public final RuleChain ruleChain = RuleChain.outerRule(mTemporaryFolder).around(mPreparer);
+
+ @Test
+ public void callOnDeviceApiFromHost() throws Exception {
+ if (!getDevice().isAdbRoot()) {
+ getDevice().enableAdbRoot();
+ }
+ assumeTrue("Device needs to run on at least T", isAtLeastT());
+ assumeTrue("Device does not support updating APEX", mHostUtils.isApexUpdateSupported());
+ assumeTrue("Device requires root", getDevice().isAdbRoot());
+
+ // install app requiring lib before the lib is installed
+ assertInstalationFails();
+
+ String apex = "test_com.android.modules.updatablesharedlibs.apex";
+ mPreparer.pushResourceFile(apex, "/system/apex/" + apex);
+ mPreparer.reboot();
+ getDevice().disableAdbRoot();
+
+ installPackage("com.android.modules.updatablesharedlibs.apps.targetS.apk");
+ installPackage("com.android.modules.updatablesharedlibs.apps.targetT.apk");
+ installPackage("com.android.modules.updatablesharedlibs.apps.targetTWithLib.apk");
+
+ runDeviceTests("com.android.modules.updatablesharedlibs.apps.targetS", null);
+ runDeviceTests("com.android.modules.updatablesharedlibs.apps.targetT", null);
+ runDeviceTests("com.android.modules.updatablesharedlibs.apps.targetTWithLib", null);
+ }
+
+ private void assertInstalationFails() throws Exception {
+ String packageName = "com.android.modules.updatablesharedlibs.apps.targetTWithLib";
+ Exception e = assertThrows(
+ TargetSetupError.class,
+ () -> installPackage(packageName + ".apk"));
+ assertThat(e).hasMessageThat().contains(
+ "Package " + packageName + " requires "
+ + "unavailable shared library "
+ + "com.android.modules.updatablesharedlibs.libs.since.t");
+ }
+
+ protected boolean isAtLeastT() throws Exception {
+ DeviceSdkLevel deviceSdkLevel = new DeviceSdkLevel(getDevice());
+ return deviceSdkLevel.isDeviceAtLeastT();
+ }
+}
diff --git a/javatests/com/android/modules/updatablesharedlibs/apex/Android.bp b/javatests/com/android/modules/updatablesharedlibs/apex/Android.bp
new file mode 100644
index 00000000..db56f356
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/apex/Android.bp
@@ -0,0 +1,40 @@
+// Copyright (C) 2021 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// 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.
+
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+apex_key {
+ name: "com.android.modules.updatablesharedlibs.key",
+ public_key: "com.android.modules.updatablesharedlibs.avbpubkey",
+ private_key: "com.android.modules.updatablesharedlibs.pem",
+}
+
+android_app_certificate {
+ name: "com.android.modules.updatablesharedlibs.certificate",
+ certificate: "com.android.modules.updatablesharedlibs",
+}
+
+apex_test {
+ name: "test_com.android.modules.updatablesharedlibs",
+ manifest: "manifest.json",
+ file_contexts: ":apex.test-file_contexts",
+ key: "com.android.modules.updatablesharedlibs.key",
+ java_libs: [
+ "com.android.modules.updatablesharedlibs.libs.before.t",
+ "com.android.modules.updatablesharedlibs.libs.since.t",
+ ],
+ updatable: false,
+}
diff --git a/javatests/com/android/modules/updatablesharedlibs/apex/com.android.modules.updatablesharedlibs.avbpubkey b/javatests/com/android/modules/updatablesharedlibs/apex/com.android.modules.updatablesharedlibs.avbpubkey
new file mode 100644
index 00000000..e95ecbe8
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/apex/com.android.modules.updatablesharedlibs.avbpubkey
Binary files differ
diff --git a/javatests/com/android/modules/updatablesharedlibs/apex/com.android.modules.updatablesharedlibs.pem b/javatests/com/android/modules/updatablesharedlibs/apex/com.android.modules.updatablesharedlibs.pem
new file mode 100644
index 00000000..ef30766f
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/apex/com.android.modules.updatablesharedlibs.pem
@@ -0,0 +1,51 @@
+-----BEGIN RSA PRIVATE KEY-----
+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
+-----END RSA PRIVATE KEY-----
diff --git a/javatests/com/android/modules/updatablesharedlibs/apex/com.android.modules.updatablesharedlibs.pk8 b/javatests/com/android/modules/updatablesharedlibs/apex/com.android.modules.updatablesharedlibs.pk8
new file mode 100644
index 00000000..db1a90fe
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/apex/com.android.modules.updatablesharedlibs.pk8
Binary files differ
diff --git a/javatests/com/android/modules/updatablesharedlibs/apex/com.android.modules.updatablesharedlibs.x509.pem b/javatests/com/android/modules/updatablesharedlibs/apex/com.android.modules.updatablesharedlibs.x509.pem
new file mode 100644
index 00000000..6d9143fc
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/apex/com.android.modules.updatablesharedlibs.x509.pem
@@ -0,0 +1,34 @@
+-----BEGIN CERTIFICATE-----
+MIIF8zCCA9sCFF/jvwHjBgaxHaamJyRxH88j4704MA0GCSqGSIb3DQEBCwUAMIG0
+MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91
+bnRhaW4gVmlldzEQMA4GA1UECgwHQW5kcm9pZDEQMA4GA1UECwwHQW5kcm9pZDEi
+MCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTEwMC4GA1UEAwwnY29t
+LmFuZHJvaWQubW9kdWxlcy51cGRhdGFibGVzaGFyZWRsaWJzMCAXDTIxMTAyNzEy
+NTU0OFoYDzQ3NTkwOTIzMTI1NTQ4WjCBtDELMAkGA1UEBhMCVVMxEzARBgNVBAgM
+CkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB0Fu
+ZHJvaWQxEDAOBgNVBAsMB0FuZHJvaWQxIjAgBgkqhkiG9w0BCQEWE2FuZHJvaWRA
+YW5kcm9pZC5jb20xMDAuBgNVBAMMJ2NvbS5hbmRyb2lkLm1vZHVsZXMudXBkYXRh
+Ymxlc2hhcmVkbGliczCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK1C
+8OSduZta1sNA/3eKcj/IU5dtOUWFSB21dKIlzOqEBOO9meCBiU5IYKGIjEpktsEH
+CaIn3PZ8iqUNU30myjgugqQbdoo7GyYHj9px23s5L+DRoOyDlk6WEfLpNei74POz
+wisii5MJMN3SEPVbMFhwYJnfPOOxLl1hLpkKD0I/bDKrjKnVCqpDB3YfOZrwk32h
+Og1fI7G7/kCBD2KZPyjXghJMVs0ohRrl7KLFSYCGIvrUH8WUQ3iQGGmTYTJmwUMu
+BshlY/xt2EIqjzU2s3R9uzPibzDfaWgzmHVEV1fmXwUEryiKSza8lPnUhaH2fNsi
+SPUHYPG19qEoQueHchBNpxFFJPipTGH00XLKAQATqmCL2Dwxu02HY4mxdUKFc5TS
+AKre9e7GjUv+P6RNuqMXOUmdTcN8xXy2wfIFeVa1JA9IAdRz9OlkXiB/l7GLjb0x
+WEAIG0cmikrPsgKe9GT+OjKKKwhKrE/oCp+qc4Y9BnPoo1Q538BbEp0jYyYpKOVQ
+7nGUbPI6Km6f+RzyzqEKB10EmUREApinEl0j05CVbf/WNl5ubRgo70MlyXdaQS2L
+U6XF+HgwIOySLHL0opQgbgapZIGaOQv3/baa4R7DaJ8oVNQwSCpieLW+MzsTk3hJ
+MyJAJf7iRlNcRx7NoJy5JWL9kmXiWAffYo+Dr8ldAgMBAAEwDQYJKoZIhvcNAQEL
+BQADggIBAGQ5m+rrDvOQUfeOfRdfuU+XyhJ1zaOmyi1Br8ARuUrG5m3H6o8D1DyW
+zmv09YgkcXt4iTSFG5WcxXtu6mA57f9KuiXaRtA4wzmcnSgUpZrhRamltv1xfo8P
+h5vW9EKU67+437CuFBKlyjRLC+MD1GyMgNJwbHBqkIDUIfio+soIBVKgdANshSq7
+Cgc1dLAg7DvJkRg+WyjhBRmmregopXmfJfs73zxt2Jif5QQEZfLG27JkE7Ae06+9
+1FKvotlabdT3LMXjlX6miaJhPV8WPCmGyF2sZ8rOvI8OIKjWfWdf2S5269OnOrpg
+IMRJTnXzsIDNk/nVdbvI50V0/STIKyCj+HYMjlGjyFqs9XOSoWtv7Y41bYDp+eoF
+tfau5WOmVALWQ/M3sSIeBGkpzoq33wkyoqYNrlLRnA8FSNCOahKZpgAZyd7Cs9Fu
+EzK1+35F+5HdxgJaK29cmiaBsx3acTUr4UZrPewsmnYTU+xUtnbOKaLniUxkf/WT
+8qPhdg8n/1Hks5iWRzvKSHmFYMzx/efbz7PcB4UEyzKyaYW5mpX9xPLZ0Du6Je3X
+JIk2t6WEGnMDHWS2fa1KpUfhsiRKkxNP7tMMuAwZ/2OnCiFmZ2/Tzy6bp4EFPsa6
+zXcvJSf7eAe5jJkKrWkoMoKp+SBGoCKXzoMRCAbLSEdnSpr5EZXF
+-----END CERTIFICATE-----
diff --git a/javatests/com/android/modules/updatablesharedlibs/apex/manifest.json b/javatests/com/android/modules/updatablesharedlibs/apex/manifest.json
new file mode 100644
index 00000000..ffe9a73f
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/apex/manifest.json
@@ -0,0 +1,4 @@
+{
+ "name": "test_com.android.modules.updatablesharedlibs",
+ "version": 1
+}
diff --git a/javatests/com/android/modules/updatablesharedlibs/apps/targetS/Android.bp b/javatests/com/android/modules/updatablesharedlibs/apps/targetS/Android.bp
new file mode 100644
index 00000000..24c495b0
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/apps/targetS/Android.bp
@@ -0,0 +1,29 @@
+// Copyright (C) 2021 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// 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.
+
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+android_test_helper_app {
+ name: "com.android.modules.updatablesharedlibs.apps.targetS",
+ srcs: ["UpdatableSharedLibraryTargetSTest.java"],
+ static_libs: [
+ "androidx.test.rules",
+ "androidx.test.core",
+ "truth-prebuilt",
+ ],
+ sdk_version: "current",
+ target_sdk_version: "31",
+}
diff --git a/javatests/com/android/modules/updatablesharedlibs/apps/targetS/AndroidManifest.xml b/javatests/com/android/modules/updatablesharedlibs/apps/targetS/AndroidManifest.xml
new file mode 100644
index 00000000..e0c0ec98
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/apps/targetS/AndroidManifest.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ 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.
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.modules.updatablesharedlibs.apps.targetS">
+ <application>
+ </application>
+
+ <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
+ android:targetPackage="com.android.modules.updatablesharedlibs.apps.targetS"
+ ></instrumentation>
+</manifest>
diff --git a/javatests/com/android/modules/updatablesharedlibs/apps/targetS/UpdatableSharedLibraryTargetSTest.java b/javatests/com/android/modules/updatablesharedlibs/apps/targetS/UpdatableSharedLibraryTargetSTest.java
new file mode 100644
index 00000000..d881ce80
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/apps/targetS/UpdatableSharedLibraryTargetSTest.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * 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.
+ */
+
+package com.android.modules.updatablesharedlibs.apps.targetS;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import junit.framework.Assert;
+
+import com.google.common.truth.Correspondence;
+
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
+
+/**
+ * Tests an app targeting S.
+ *
+ * <p>One of the shared libraries included in this test claims to be in the
+ * BOOTCLASSPATH before T so it should be added transparently to this app.
+ */
+@RunWith(AndroidJUnit4.class)
+public class UpdatableSharedLibraryTargetSTest {
+ private static String SHARED_LIB_PATH = "/apex/test_com.android.modules.updatablesharedlibs"
+ + "/javalib/com.android.modules.updatablesharedlibs.libs.before.t.jar";
+
+ private static final Context sContext = InstrumentationRegistry.getInstrumentation()
+ .getContext();
+
+ @Test
+ public void checkSharedLibrary() throws Exception {
+ String packageName = sContext.getPackageName();
+ ApplicationInfo appInfo = sContext.getPackageManager().getApplicationInfo(packageName,
+ PackageManager.GET_SHARED_LIBRARY_FILES);
+
+ assertThat(appInfo.sharedLibraryFiles)
+ .asList()
+ .contains(SHARED_LIB_PATH);
+ }
+
+ @Test
+ public void callApi() throws Exception {
+ Object api = Class.forName("com.android.modules.updatablesharedlibs.libs.before.t.Api")
+ .getDeclaredConstructor()
+ .newInstance();
+
+ String actual = (String) api.getClass().getDeclaredMethod("methodBeforeT").invoke(api);
+ assertThat(actual).isEqualTo("Success");
+ }
+
+ @Test
+ public void testGetSystemSharedLibraryNames() {
+ String[] libraries = sContext.getPackageManager().getSystemSharedLibraryNames();
+ assertThat(libraries)
+ .asList()
+ .containsAtLeast(
+ "com.android.modules.updatablesharedlibs.libs.before.t",
+ "com.android.modules.updatablesharedlibs.libs.since.t");
+ }
+}
diff --git a/javatests/com/android/modules/updatablesharedlibs/apps/targetT/Android.bp b/javatests/com/android/modules/updatablesharedlibs/apps/targetT/Android.bp
new file mode 100644
index 00000000..70a549e5
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/apps/targetT/Android.bp
@@ -0,0 +1,29 @@
+// Copyright (C) 2021 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// 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.
+
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+android_test_helper_app {
+ name: "com.android.modules.updatablesharedlibs.apps.targetT",
+ srcs: ["UpdatableSharedLibraryTargetTTest.java"],
+ static_libs: [
+ "androidx.test.rules",
+ "androidx.test.core",
+ "truth-prebuilt",
+ ],
+ sdk_version: "current",
+ target_sdk_version: "Tiramisu",
+}
diff --git a/javatests/com/android/modules/updatablesharedlibs/apps/targetT/AndroidManifest.xml b/javatests/com/android/modules/updatablesharedlibs/apps/targetT/AndroidManifest.xml
new file mode 100644
index 00000000..17f52e7f
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/apps/targetT/AndroidManifest.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ 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.
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.modules.updatablesharedlibs.apps.targetT">
+ <application>
+ </application>
+
+ <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
+ android:targetPackage="com.android.modules.updatablesharedlibs.apps.targetT"
+ ></instrumentation>
+</manifest>
diff --git a/javatests/com/android/modules/updatablesharedlibs/apps/targetT/UpdatableSharedLibraryTargetTTest.java b/javatests/com/android/modules/updatablesharedlibs/apps/targetT/UpdatableSharedLibraryTargetTTest.java
new file mode 100644
index 00000000..20078a59
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/apps/targetT/UpdatableSharedLibraryTargetTTest.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * 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.
+ */
+
+package com.android.modules.updatablesharedlibs.apps.targetT;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.junit.Assert.assertThrows;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import junit.framework.Assert;
+
+import com.google.common.truth.Correspondence;
+
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
+
+/**
+ * Tests an app targeting T.
+ *
+ * <p>With the shared libraries included in this test, none of the shared libraries present in this
+ * test should be included for this app.
+ */
+@RunWith(AndroidJUnit4.class)
+public class UpdatableSharedLibraryTargetTTest {
+ private static final Correspondence<String, String> CONTAINS_SUBSTRING =
+ Correspondence.from(String::contains, "contains");
+ private static final Context sContext = InstrumentationRegistry.getInstrumentation()
+ .getContext();
+
+ @Test
+ public void checkHasNoSharedLibrary() throws Exception {
+ String packageName = sContext.getPackageName();
+ ApplicationInfo appInfo = sContext.getPackageManager().getApplicationInfo(packageName,
+ PackageManager.GET_SHARED_LIBRARY_FILES);
+
+ assertThat(appInfo.sharedLibraryFiles)
+ .asList()
+ .comparingElementsUsing(CONTAINS_SUBSTRING)
+ .doesNotContain("com.android.modules.updatablesharedlibs");
+ }
+
+ @Test
+ public void checkHasNoApiAccess() throws Exception {
+ assertThrows(
+ ClassNotFoundException.class,
+ () -> Class.forName("com.android.modules.updatablesharedlibs.libs.before.t.Api")
+ );
+ }
+}
diff --git a/javatests/com/android/modules/updatablesharedlibs/apps/targetTWithLib/Android.bp b/javatests/com/android/modules/updatablesharedlibs/apps/targetTWithLib/Android.bp
new file mode 100644
index 00000000..890af116
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/apps/targetTWithLib/Android.bp
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * 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.
+ */
+
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+android_test_helper_app {
+ name: "com.android.modules.updatablesharedlibs.apps.targetTWithLib",
+ srcs: ["UpdatableSharedLibraryTargetTWithLibraryTest.java"],
+ libs: [
+ "com.android.modules.updatablesharedlibs.libs.since.t",
+ ],
+ static_libs: [
+ "androidx.test.rules",
+ "androidx.test.core",
+ ],
+ sdk_version: "current",
+ target_sdk_version: "Tiramisu",
+}
diff --git a/javatests/com/android/modules/updatablesharedlibs/apps/targetTWithLib/AndroidManifest.xml b/javatests/com/android/modules/updatablesharedlibs/apps/targetTWithLib/AndroidManifest.xml
new file mode 100644
index 00000000..f510ca6d
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/apps/targetTWithLib/AndroidManifest.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ 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.
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.modules.updatablesharedlibs.apps.targetTWithLib">
+ <application>
+ </application>
+
+ <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
+ android:targetPackage="com.android.modules.updatablesharedlibs.apps.targetTWithLib"
+ ></instrumentation>
+</manifest>
diff --git a/javatests/com/android/modules/updatablesharedlibs/apps/targetTWithLib/UpdatableSharedLibraryTargetTWithLibraryTest.java b/javatests/com/android/modules/updatablesharedlibs/apps/targetTWithLib/UpdatableSharedLibraryTargetTWithLibraryTest.java
new file mode 100644
index 00000000..425ed990
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/apps/targetTWithLib/UpdatableSharedLibraryTargetTWithLibraryTest.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * 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.
+ */
+
+package com.android.modules.updatablesharedlibs.apps.targetTWithLib;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import android.content.Context;
+import android.content.pm.PackageManager;
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
+
+/**
+ * Tests an app targeting T which also includes a shared library that is part of the BOOTCLASSPATH
+ * from T.
+ *
+ * <p>This means the shared library should not be explicitly in the shared libraries in order
+ * to avoid duplication of the BCP.
+ */
+@RunWith(AndroidJUnit4.class)
+public class UpdatableSharedLibraryTargetTWithLibraryTest {
+ // private static final Context sContext = InstrumentationRegistry.getInstrumentation()
+ // .getContext();
+
+ @Test
+ public void checkHasNoSharedLibrary() throws Exception {
+ // TODO(b/205261027): not possible to test yet
+
+ // This is the code we'd like to run. But because before API finalisation PM
+ // will see the shared library as
+ // having "on-bcp-since 9001" this means that it never considers that shared
+ // library to be in the BCP.
+
+ // String packageName = getContext().getPackageName();
+ // ApplicationInfo appInfo = getPackageManager().getApplicationInfo(packageName,
+ // PackageManager.GET_SHARED_LIBRARY_FILES);
+ // Log.d(TAG, "checkHasNoSharedLibrary in " + appInfo.sharedLibraryFiles.length
+ // + " libraries");
+ // for (String path : appInfo.sharedLibraryFiles) {
+ // if (path.contains("com.android.modules.updatablesharedlibs")) {
+ // Assert.fail("Unexpectedly found a shared library: " + path);
+ // }
+ // }
+ }
+}
diff --git a/javatests/com/android/modules/updatablesharedlibs/libs/before/t/Android.bp b/javatests/com/android/modules/updatablesharedlibs/libs/before/t/Android.bp
new file mode 100644
index 00000000..8f0565ec
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/libs/before/t/Android.bp
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * 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.
+ */
+
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+java_sdk_library {
+ name: "com.android.modules.updatablesharedlibs.libs.before.t",
+ srcs: [
+ "Api.java"
+ ],
+ permitted_packages: [ "com.android.modules.updatablesharedlibs.libs"],
+ apex_available: [ "test_com.android.modules.updatablesharedlibs" ],
+ min_sdk_version: "Tiramisu",
+ sdk_version: "current",
+ on_bootclasspath_before: "Tiramisu",
+
+ // Output the api files to a special directory that won't trigger an API
+ // review as it is a test only API.
+ api_dir: "api_dir",
+ // Testing only.
+ no_dist: true,
+ unsafe_ignore_missing_latest_api: true,
+}
diff --git a/javatests/com/android/modules/updatablesharedlibs/libs/before/t/Api.java b/javatests/com/android/modules/updatablesharedlibs/libs/before/t/Api.java
new file mode 100644
index 00000000..a01d0f00
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/libs/before/t/Api.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * 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.
+ */
+
+package com.android.modules.updatablesharedlibs.libs.before.t;
+
+/**
+ * Basic class to pretend we have one API.
+ */
+public class Api {
+
+ public String methodBeforeT() {
+ return "Success";
+ }
+}
diff --git a/javatests/com/android/modules/updatablesharedlibs/libs/before/t/api_dir/current.txt b/javatests/com/android/modules/updatablesharedlibs/libs/before/t/api_dir/current.txt
new file mode 100644
index 00000000..2b3339c1
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/libs/before/t/api_dir/current.txt
@@ -0,0 +1,10 @@
+// Signature format: 2.0
+package com.android.modules.updatablesharedlibs.libs.before.t {
+
+ public class Api {
+ ctor public Api();
+ method public String methodBeforeT();
+ }
+
+}
+
diff --git a/javatests/com/android/modules/updatablesharedlibs/libs/before/t/api_dir/module-lib-current.txt b/javatests/com/android/modules/updatablesharedlibs/libs/before/t/api_dir/module-lib-current.txt
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/libs/before/t/api_dir/module-lib-current.txt
diff --git a/javatests/com/android/modules/updatablesharedlibs/libs/before/t/api_dir/module-lib-removed.txt b/javatests/com/android/modules/updatablesharedlibs/libs/before/t/api_dir/module-lib-removed.txt
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/libs/before/t/api_dir/module-lib-removed.txt
diff --git a/javatests/com/android/modules/updatablesharedlibs/libs/before/t/api_dir/removed.txt b/javatests/com/android/modules/updatablesharedlibs/libs/before/t/api_dir/removed.txt
new file mode 100644
index 00000000..d802177e
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/libs/before/t/api_dir/removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/javatests/com/android/modules/updatablesharedlibs/libs/before/t/api_dir/system-current.txt b/javatests/com/android/modules/updatablesharedlibs/libs/before/t/api_dir/system-current.txt
new file mode 100644
index 00000000..d802177e
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/libs/before/t/api_dir/system-current.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/javatests/com/android/modules/updatablesharedlibs/libs/before/t/api_dir/system-removed.txt b/javatests/com/android/modules/updatablesharedlibs/libs/before/t/api_dir/system-removed.txt
new file mode 100644
index 00000000..d802177e
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/libs/before/t/api_dir/system-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/javatests/com/android/modules/updatablesharedlibs/libs/before/t/api_dir/test-current.txt b/javatests/com/android/modules/updatablesharedlibs/libs/before/t/api_dir/test-current.txt
new file mode 100644
index 00000000..d802177e
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/libs/before/t/api_dir/test-current.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/javatests/com/android/modules/updatablesharedlibs/libs/before/t/api_dir/test-removed.txt b/javatests/com/android/modules/updatablesharedlibs/libs/before/t/api_dir/test-removed.txt
new file mode 100644
index 00000000..d802177e
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/libs/before/t/api_dir/test-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/javatests/com/android/modules/updatablesharedlibs/libs/since/t/Android.bp b/javatests/com/android/modules/updatablesharedlibs/libs/since/t/Android.bp
new file mode 100644
index 00000000..553dca6d
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/libs/since/t/Android.bp
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * 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.
+ */
+
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+java_sdk_library {
+ name: "com.android.modules.updatablesharedlibs.libs.since.t",
+ srcs: [
+ "Api.java"
+ ],
+ permitted_packages: [ "com.android.modules.updatablesharedlibs.libs.since"],
+ apex_available: [ "test_com.android.modules.updatablesharedlibs" ],
+ min_sdk_version: "Tiramisu",
+ sdk_version: "current",
+ on_bootclasspath_since: "Tiramisu",
+
+ // Output the api files to a special directory that won't trigger an API
+ // review as it is a test only API.
+ api_dir: "api_dir",
+ // Testing only.
+ no_dist: true,
+ unsafe_ignore_missing_latest_api: true,
+}
diff --git a/javatests/com/android/modules/updatablesharedlibs/libs/since/t/Api.java b/javatests/com/android/modules/updatablesharedlibs/libs/since/t/Api.java
new file mode 100644
index 00000000..53dde680
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/libs/since/t/Api.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * 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.
+ */
+
+package com.android.modules.updatablesharedlibs.libs.since.t;
+
+/**
+ * Basic class to pretend we have one API.
+ */
+public class Api {
+
+ public String methodSinceT() {
+ return "Success";
+ }
+}
diff --git a/javatests/com/android/modules/updatablesharedlibs/libs/since/t/api_dir/current.txt b/javatests/com/android/modules/updatablesharedlibs/libs/since/t/api_dir/current.txt
new file mode 100644
index 00000000..c459c1a3
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/libs/since/t/api_dir/current.txt
@@ -0,0 +1,10 @@
+// Signature format: 2.0
+package com.android.modules.updatablesharedlibs.libs.since.t {
+
+ public class Api {
+ ctor public Api();
+ method public String methodSinceT();
+ }
+
+}
+
diff --git a/javatests/com/android/modules/updatablesharedlibs/libs/since/t/api_dir/module-lib-current.txt b/javatests/com/android/modules/updatablesharedlibs/libs/since/t/api_dir/module-lib-current.txt
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/libs/since/t/api_dir/module-lib-current.txt
diff --git a/javatests/com/android/modules/updatablesharedlibs/libs/since/t/api_dir/module-lib-removed.txt b/javatests/com/android/modules/updatablesharedlibs/libs/since/t/api_dir/module-lib-removed.txt
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/libs/since/t/api_dir/module-lib-removed.txt
diff --git a/javatests/com/android/modules/updatablesharedlibs/libs/since/t/api_dir/removed.txt b/javatests/com/android/modules/updatablesharedlibs/libs/since/t/api_dir/removed.txt
new file mode 100644
index 00000000..d802177e
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/libs/since/t/api_dir/removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/javatests/com/android/modules/updatablesharedlibs/libs/since/t/api_dir/system-current.txt b/javatests/com/android/modules/updatablesharedlibs/libs/since/t/api_dir/system-current.txt
new file mode 100644
index 00000000..d802177e
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/libs/since/t/api_dir/system-current.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/javatests/com/android/modules/updatablesharedlibs/libs/since/t/api_dir/system-removed.txt b/javatests/com/android/modules/updatablesharedlibs/libs/since/t/api_dir/system-removed.txt
new file mode 100644
index 00000000..d802177e
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/libs/since/t/api_dir/system-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/javatests/com/android/modules/updatablesharedlibs/libs/since/t/api_dir/test-current.txt b/javatests/com/android/modules/updatablesharedlibs/libs/since/t/api_dir/test-current.txt
new file mode 100644
index 00000000..d802177e
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/libs/since/t/api_dir/test-current.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/javatests/com/android/modules/updatablesharedlibs/libs/since/t/api_dir/test-removed.txt b/javatests/com/android/modules/updatablesharedlibs/libs/since/t/api_dir/test-removed.txt
new file mode 100644
index 00000000..d802177e
--- /dev/null
+++ b/javatests/com/android/modules/updatablesharedlibs/libs/since/t/api_dir/test-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/proto/sdk.proto b/proto/sdk.proto
index 4fddf8df..850b31b4 100644
--- a/proto/sdk.proto
+++ b/proto/sdk.proto
@@ -38,6 +38,11 @@ enum SdkModule {
// S modules
ART = 8;
SCHEDULING = 9;
+
+ // T modules
+ AD_SERVICES = 11;
+ APPSEARCH = 12;
+ ON_DEVICE_PERSONALIZATION = 13;
}
// A single extension version.
diff --git a/sdk/ModuleDefaults.bp b/sdk/ModuleDefaults.bp
index 057d3c65..d9e3af53 100644
--- a/sdk/ModuleDefaults.bp
+++ b/sdk/ModuleDefaults.bp
@@ -102,7 +102,6 @@ java_defaults {
// Hide impl library and stub sources
impl_library_visibility: [
":__pkg__",
- "//frameworks/base", // For framework-all
"//frameworks/base/api", // For framework-all
],
stubs_source_visibility: ["//visibility:private"],
diff --git a/tools/Android.bp b/tools/Android.bp
index 642c2f8a..1bb33fa9 100644
--- a/tools/Android.bp
+++ b/tools/Android.bp
@@ -65,9 +65,12 @@ prebuilt_etc {
"//art:__subpackages__",
"//external/conscrypt:__subpackages__",
"//frameworks/av/apex:__subpackages__",
+ "//packages/modules/AdServices:__subpackages__",
+ "//packages/modules/AppSearch:__subpackages__",
"//packages/modules/Connectivity:__subpackages__",
"//packages/modules/IPsec/apex:__subpackages__",
"//packages/modules/Permission:__subpackages__",
+ "//packages/modules/OnDevicePersonalization:__subpackages__",
"//packages/modules/Scheduling:__subpackages__",
"//packages/modules/SdkExtensions:__subpackages__",
"//packages/modules/StatsD:__subpackages__",