Merge "More cleanup of no-vendor-variant VNDK whitelist"
diff --git a/android/apex.go b/android/apex.go
index a4b6956..9195388 100644
--- a/android/apex.go
+++ b/android/apex.go
@@ -180,20 +180,20 @@
func (m *ApexModuleBase) CreateApexVariations(mctx BottomUpMutatorContext) []Module {
if len(m.apexVariations) > 0 {
m.checkApexAvailableProperty(mctx)
+
sort.Strings(m.apexVariations)
variations := []string{}
- availableForPlatform := mctx.Module().(ApexModule).AvailableFor(AvailableToPlatform) || mctx.Host()
- if availableForPlatform {
- variations = append(variations, "") // Original variation for platform
- }
+ variations = append(variations, "") // Original variation for platform
variations = append(variations, m.apexVariations...)
defaultVariation := ""
mctx.SetDefaultDependencyVariation(&defaultVariation)
+
modules := mctx.CreateVariations(variations...)
for i, m := range modules {
- if availableForPlatform && i == 0 {
- continue
+ platformVariation := i == 0
+ if platformVariation && !mctx.Host() && !m.(ApexModule).AvailableFor(AvailableToPlatform) {
+ m.SkipInstall()
}
m.(ApexModule).setApexName(variations[i])
}
diff --git a/android/soong_config_modules.go b/android/soong_config_modules.go
index f54e774..198108d 100644
--- a/android/soong_config_modules.go
+++ b/android/soong_config_modules.go
@@ -303,6 +303,7 @@
}
return ctx.Config().Once(key, func() interface{} {
+ ctx.AddNinjaFileDeps(from)
r, err := ctx.Config().fs.Open(from)
if err != nil {
ctx.PropertyErrorf("from", "failed to open %q: %s", from, err)
diff --git a/android/soong_config_modules_test.go b/android/soong_config_modules_test.go
index 66feba8..6ad88a2 100644
--- a/android/soong_config_modules_test.go
+++ b/android/soong_config_modules_test.go
@@ -43,7 +43,7 @@
name: "acme_test_defaults",
module_type: "test_defaults",
config_namespace: "acme",
- variables: ["board", "feature1", "feature2", "feature3"],
+ variables: ["board", "feature1", "feature2", "FEATURE3"],
properties: ["cflags", "srcs"],
}
@@ -61,7 +61,7 @@
}
soong_config_bool_variable {
- name: "feature3",
+ name: "FEATURE3",
}
`
@@ -91,7 +91,7 @@
feature2: {
cflags: ["-DFEATURE2"],
},
- feature3: {
+ FEATURE3: {
cflags: ["-DFEATURE3"],
},
},
diff --git a/apex/apex.go b/apex/apex.go
index 53bdc12..f42bed0 100644
--- a/apex/apex.go
+++ b/apex/apex.go
@@ -45,18 +45,21 @@
type dependencyTag struct {
blueprint.BaseDependencyTag
name string
+
+ // determines if the dependent will be part of the APEX payload
+ payload bool
}
var (
- sharedLibTag = dependencyTag{name: "sharedLib"}
- executableTag = dependencyTag{name: "executable"}
- javaLibTag = dependencyTag{name: "javaLib"}
- prebuiltTag = dependencyTag{name: "prebuilt"}
- testTag = dependencyTag{name: "test"}
+ sharedLibTag = dependencyTag{name: "sharedLib", payload: true}
+ executableTag = dependencyTag{name: "executable", payload: true}
+ javaLibTag = dependencyTag{name: "javaLib", payload: true}
+ prebuiltTag = dependencyTag{name: "prebuilt", payload: true}
+ testTag = dependencyTag{name: "test", payload: true}
keyTag = dependencyTag{name: "key"}
certificateTag = dependencyTag{name: "certificate"}
usesTag = dependencyTag{name: "uses"}
- androidAppTag = dependencyTag{name: "androidApp"}
+ androidAppTag = dependencyTag{name: "androidApp", payload: true}
apexAvailWl = makeApexAvailableWhitelist()
)
@@ -70,107 +73,328 @@
//
// Module separator
//
- m["com.android.adbd"] = []string{"adbd", "libcrypto"}
+ m["com.android.adbd"] = []string{
+ "adbd",
+ "bcm_object",
+ "fmtlib",
+ "libadbconnection_server",
+ "libadbd",
+ "libadbd_auth",
+ "libadbd_core",
+ "libadbd_services",
+ "libasyncio",
+ "libbacktrace_headers",
+ "libbase",
+ "libbase_headers",
+ "libbuildversion",
+ "libc++",
+ "libcap",
+ "libcrypto",
+ "libcrypto_utils",
+ "libcutils",
+ "libcutils_headers",
+ "libdiagnose_usb",
+ "liblog",
+ "liblog_headers",
+ "libmdnssd",
+ "libminijail",
+ "libminijail_gen_constants",
+ "libminijail_gen_constants_obj",
+ "libminijail_gen_syscall",
+ "libminijail_gen_syscall_obj",
+ "libminijail_generated",
+ "libpackagelistparser",
+ "libpcre2",
+ "libprocessgroup_headers",
+ "libqemu_pipe",
+ "libselinux",
+ "libsystem_headers",
+ "libutils_headers",
+ }
+ //
+ // Module separator
+ //
+ m["com.android.appsearch"] = []string{
+ "icing-java-proto-lite",
+ "libprotobuf-java-lite",
+ }
//
// Module separator
//
m["com.android.art"] = []string{
+ "art_cmdlineparser_headers",
+ "art_disassembler_headers",
+ "art_libartbase_headers",
+ "bcm_object",
+ "bionic_libc_platform_headers",
+ "core-repackaged-icu4j",
+ "cpp-define-generator-asm-support",
+ "cpp-define-generator-definitions",
+ "crtbegin_dynamic",
+ "crtbegin_dynamic1",
+ "crtbegin_so1",
+ "crtbrand",
+ "conscrypt.module.intra.core.api.stubs",
+ "dex2oat_headers",
+ "dt_fd_forward_export",
+ "fmtlib",
+ "icu4c_extra_headers",
"jacocoagent",
+ "javavm_headers",
+ "jni_platform_headers",
+ "libPlatformProperties",
+ "libadbconnection_client",
"libadbconnection_server",
+ "libandroidicuinit",
+ "libart_runtime_headers_ndk",
"libartd-disassembler",
+ "libasync_safe",
"libbacktrace",
"libbase",
+ "libbase_headers",
"libc++",
+ "libc++_static",
+ "libc++abi",
+ "libc++demangle",
+ "libc_headers",
"libcrypto",
+ "libdexfile_all_headers",
+ "libdexfile_external_headers",
"libdexfile_support",
+ "libdmabufinfo",
"libexpat",
+ "libfdlibm",
+ "libgtest_prod",
+ "libicui18n_headers",
"libicuuc",
+ "libicuuc_headers",
+ "libicuuc_stubdata",
+ "libjdwp_headers",
+ "liblog",
+ "liblog_headers",
+ "liblz4",
"liblzma",
"libmeminfo",
+ "libnativebridge-headers",
+ "libnativehelper_header_only",
+ "libnativeloader-headers",
+ "libnpt_headers",
+ "libopenjdkjvmti_headers",
+ "libperfetto_client_experimental",
"libprocinfo",
+ "libprotobuf-cpp-lite",
+ "libunwind_llvm",
"libunwindstack",
+ "libv8",
+ "libv8base",
+ "libv8gen",
+ "libv8platform",
+ "libv8sampler",
+ "libv8src",
"libvixl",
"libvixld",
"libz",
"libziparchive",
- "prebuilt_libclang_rt",
+ "perfetto_trace_protos",
}
//
// Module separator
//
m["com.android.bluetooth.updatable"] = []string{
"android.hardware.audio.common@5.0",
- "android.hardware.bluetooth@1.0",
- "android.hardware.bluetooth@1.1",
"android.hardware.bluetooth.a2dp@1.0",
"android.hardware.bluetooth.audio@2.0",
+ "android.hardware.bluetooth@1.0",
+ "android.hardware.bluetooth@1.1",
+ "android.hardware.graphics.bufferqueue@1.0",
+ "android.hardware.graphics.bufferqueue@2.0",
+ "android.hardware.graphics.common@1.0",
+ "android.hardware.graphics.common@1.1",
+ "android.hardware.graphics.common@1.2",
+ "android.hardware.media@1.0",
"android.hidl.safe_union@1.0",
+ "android.hidl.token@1.0",
+ "android.hidl.token@1.0-utils",
+ "avrcp-target-service",
+ "avrcp_headers",
+ "bcm_object",
+ "bluetooth-protos-lite",
+ "bluetooth.mapsapi",
+ "com.android.vcard",
+ "fmtlib",
+ "guava",
+ "internal_include_headers",
+ "lib-bt-packets",
+ "lib-bt-packets-avrcp",
+ "lib-bt-packets-base",
+ "libFraunhoferAAC",
+ "libaudio-a2dp-hw-utils",
+ "libaudio-hearing-aid-hw-utils",
+ "libbacktrace_headers",
"libbase",
+ "libbase_headers",
+ "libbinder_headers",
"libbinderthreadstate",
"libbluetooth",
+ "libbluetooth-types",
+ "libbluetooth-types-header",
+ "libbluetooth_gd",
+ "libbluetooth_headers",
"libbluetooth_jni",
+ "libbt-audio-hal-interface",
+ "libbt-bta",
+ "libbt-common",
+ "libbt-hci",
+ "libbt-platform-protos-lite",
+ "libbt-protos-lite",
+ "libbt-sbc-decoder",
+ "libbt-sbc-encoder",
+ "libbt-stack",
+ "libbt-utils",
+ "libbtcore",
+ "libbtdevice",
+ "libbte",
+ "libbtif",
"libc++",
"libchrome",
"libcrypto",
"libcutils",
+ "libcutils_headers",
"libevent",
"libfmq",
+ "libg722codec",
+ "libgtest_prod",
+ "libgui_headers",
"libhidlbase",
+ "libhidlbase-impl-internal",
+ "libhidltransport-impl-internal",
+ "libhwbinder-impl-internal",
+ "libjsoncpp",
+ "liblog_headers",
+ "libmedia_headers",
+ "libmodpb64",
+ "libosi",
"libprocessgroup",
+ "libprocessgroup_headers",
"libprotobuf-cpp-lite",
+ "libprotobuf-java-lite",
+ "libprotobuf-java-micro",
+ "libstagefright_foundation_headers",
+ "libstagefright_headers",
"libstatslog",
+ "libstatssocket",
+ "libsystem_headers",
"libtinyxml2",
+ "libudrv-uipc",
"libutils",
+ "libutils_headers",
"libz",
+ "media_plugin_headers",
+ "sap-api-java-static",
+ "services.net",
}
//
// Module separator
//
- m["com.android.conscrypt"] = []string{"boringssl_self_test", "libc++", "libcrypto", "libssl"}
+ m["com.android.cellbroadcast"] = []string{"CellBroadcastApp", "CellBroadcastServiceModule"}
//
// Module separator
//
- m["com.android.cronet"] = []string{"org.chromium.net.cronet", "prebuilt_libcronet.80.0.3986.0"}
+ m["com.android.conscrypt"] = []string{
+ "bcm_object",
+ "boringssl_self_test",
+ "libc++",
+ "libcrypto",
+ "libnativehelper_header_only",
+ "libssl",
+ }
+ //
+ // Module separator
+ //
+ m["com.android.extservices"] = []string{
+ "flatbuffer_headers",
+ "liblua",
+ "libtextclassifier",
+ "libtextclassifier_hash_static",
+ "libtflite_static",
+ "libutf",
+ "libz_current",
+ "tensorflow_headers",
+ }
+ //
+ // Module separator
+ //
+ m["com.android.cronet"] = []string{
+ "cronet_impl_common_java",
+ "cronet_impl_native_java",
+ "cronet_impl_platform_java",
+ "libcronet.80.0.3986.0",
+ "org.chromium.net.cronet",
+ "prebuilt_libcronet.80.0.3986.0",
+ }
+ //
+ // Module separator
+ //
+ m["com.android.neuralnetworks"] = []string{
+ "android.hardware.neuralnetworks@1.0",
+ "android.hardware.neuralnetworks@1.1",
+ "android.hardware.neuralnetworks@1.2",
+ "android.hardware.neuralnetworks@1.3",
+ "android.hidl.allocator@1.0",
+ "android.hidl.memory.token@1.0",
+ "android.hidl.memory@1.0",
+ "android.hidl.safe_union@1.0",
+ "bcm_object",
+ "fmtlib",
+ "gemmlowp_headers",
+ "libarect",
+ "libbacktrace_headers",
+ "libbase",
+ "libbase_headers",
+ "libbinderthreadstate",
+ "libbuildversion",
+ "libc++",
+ "libcrypto",
+ "libcrypto_static",
+ "libcutils",
+ "libcutils_headers",
+ "libeigen",
+ "libfmq",
+ "libhidlbase",
+ "libhidlbase-impl-internal",
+ "libhidlmemory",
+ "libhidltransport-impl-internal",
+ "libhwbinder-impl-internal",
+ "libjsoncpp",
+ "liblog_headers",
+ "libmath",
+ "libneuralnetworks_common",
+ "libneuralnetworks_headers",
+ "libprocessgroup",
+ "libprocessgroup_headers",
+ "libprocpartition",
+ "libsync",
+ "libsystem_headers",
+ "libtextclassifier_hash",
+ "libtextclassifier_hash_headers",
+ "libtextclassifier_hash_static",
+ "libtflite_kernel_utils",
+ "libutils",
+ "libutils_headers",
+ "philox_random",
+ "philox_random_headers",
+ "tensorflow_headers",
+ }
//
// Module separator
//
m["com.android.media"] = []string{
- "android.hardware.cas@1.0",
- "android.hardware.cas.native@1.0",
- "android.hidl.allocator@1.0",
- "android.hidl.memory@1.0",
- "android.hidl.memory.token@1.0",
- "android.hidl.token@1.0",
- "android.hidl.token@1.0-utils",
- "libaacextractor",
- "libamrextractor",
- "libbase",
- "libbinderthreadstate",
- "libc++",
- "libcrypto",
- "libcutils",
- "libflacextractor",
- "libhidlbase",
- "libhidlmemory",
- "libmidiextractor",
- "libmkvextractor",
- "libmp3extractor",
- "libmp4extractor",
- "libmpeg2extractor",
- "liboggextractor",
- "libprocessgroup",
- "libutils",
- "libwavextractor",
- "updatable-media",
- }
- //
- // Module separator
- //
- m["com.android.media.swcodec"] = []string{
"android.frameworks.bufferhub@1.0",
+ "android.hardware.cas.native@1.0",
+ "android.hardware.cas@1.0",
+ "android.hardware.configstore-utils",
"android.hardware.configstore@1.0",
"android.hardware.configstore@1.1",
- "android.hardware.configstore-utils",
"android.hardware.graphics.allocator@2.0",
"android.hardware.graphics.allocator@3.0",
"android.hardware.graphics.bufferqueue@1.0",
@@ -181,23 +405,199 @@
"android.hardware.graphics.mapper@2.0",
"android.hardware.graphics.mapper@2.1",
"android.hardware.graphics.mapper@3.0",
+ "android.hardware.media.omx@1.0",
"android.hardware.media@1.0",
+ "android.hidl.allocator@1.0",
+ "android.hidl.memory.token@1.0",
+ "android.hidl.memory@1.0",
+ "android.hidl.token@1.0",
+ "android.hidl.token@1.0-utils",
+ "bcm_object",
+ "bionic_libc_platform_headers",
+ "fmtlib",
+ "gl_headers",
+ "libEGL",
+ "libEGL_blobCache",
+ "libEGL_getProcAddress",
+ "libFLAC",
+ "libFLAC-config",
+ "libFLAC-headers",
+ "libGLESv2",
+ "libaacextractor",
+ "libamrextractor",
+ "libarect",
+ "libasync_safe",
+ "libaudio_system_headers",
+ "libaudioclient",
+ "libaudioclient_headers",
+ "libaudiofoundation",
+ "libaudiofoundation_headers",
+ "libaudiomanager",
+ "libaudiopolicy",
+ "libaudioutils",
+ "libaudioutils_fixedfft",
+ "libbacktrace",
+ "libbacktrace_headers",
+ "libbase",
+ "libbase_headers",
+ "libbinder_headers",
+ "libbinderthreadstate",
+ "libbluetooth-types-header",
+ "libbufferhub",
+ "libbufferhub_headers",
+ "libbufferhubqueue",
+ "libc++",
+ "libc_headers",
+ "libc_malloc_debug_backtrace",
+ "libcamera_client",
+ "libcamera_metadata",
+ "libcrypto",
+ "libcutils",
+ "libcutils_headers",
+ "libdexfile_external_headers",
+ "libdexfile_support",
+ "libdvr_headers",
+ "libexpat",
+ "libfifo",
+ "libflacextractor",
+ "libgrallocusage",
+ "libgraphicsenv",
+ "libgui",
+ "libgui_headers",
+ "libhardware_headers",
+ "libhidlbase",
+ "libhidlbase-impl-internal",
+ "libhidlmemory",
+ "libhidltransport-impl-internal",
+ "libhwbinder-impl-internal",
+ "libinput",
+ "libjsoncpp",
+ "liblog_headers",
+ "liblzma",
+ "libmath",
+ "libmedia",
+ "libmedia_codeclist",
+ "libmedia_headers",
+ "libmedia_helper",
+ "libmedia_helper_headers",
+ "libmedia_midiiowrapper",
+ "libmedia_omx",
+ "libmediautils",
+ "libmidiextractor",
+ "libmkvextractor",
+ "libmp3extractor",
+ "libmp4extractor",
+ "libmpeg2extractor",
+ "libnativebase_headers",
+ "libnativebridge-headers",
+ "libnativebridge_lazy",
+ "libnativeloader-headers",
+ "libnativeloader_lazy",
+ "libnativewindow_headers",
+ "libnblog",
+ "liboggextractor",
+ "libpackagelistparser",
+ "libpcre2",
+ "libpdx",
+ "libpdx_default_transport",
+ "libpdx_headers",
+ "libpdx_uds",
+ "libprocessgroup",
+ "libprocessgroup_headers",
+ "libprocinfo",
+ "libselinux",
+ "libsonivox",
+ "libspeexresampler",
+ "libspeexresampler",
+ "libstagefright_esds",
+ "libstagefright_flacdec",
+ "libstagefright_flacdec",
+ "libstagefright_foundation",
+ "libstagefright_foundation_headers",
+ "libstagefright_foundation_without_imemory",
+ "libstagefright_headers",
+ "libstagefright_id3",
+ "libstagefright_metadatautils",
+ "libstagefright_mpeg2extractor",
+ "libstagefright_mpeg2support",
+ "libsync",
+ "libsystem_headers",
+ "libui",
+ "libui_headers",
+ "libunwindstack",
+ "libutils",
+ "libutils_headers",
+ "libvibrator",
+ "libvorbisidec",
+ "libwavextractor",
+ "libwebm",
+ "media_ndk_headers",
+ "media_plugin_headers",
+ "updatable-media",
+ }
+ //
+ // Module separator
+ //
+ m["com.android.media.swcodec"] = []string{
+ "android.frameworks.bufferhub@1.0",
+ "android.hardware.common-ndk_platform",
+ "android.hardware.configstore-utils",
+ "android.hardware.configstore@1.0",
+ "android.hardware.configstore@1.1",
+ "android.hardware.graphics.allocator@2.0",
+ "android.hardware.graphics.allocator@3.0",
+ "android.hardware.graphics.bufferqueue@1.0",
+ "android.hardware.graphics.bufferqueue@2.0",
+ "android.hardware.graphics.common-ndk_platform",
+ "android.hardware.graphics.common@1.0",
+ "android.hardware.graphics.common@1.1",
+ "android.hardware.graphics.common@1.2",
+ "android.hardware.graphics.mapper@2.0",
+ "android.hardware.graphics.mapper@2.1",
+ "android.hardware.graphics.mapper@3.0",
+ "android.hardware.graphics.mapper@4.0",
"android.hardware.media.bufferpool@2.0",
"android.hardware.media.c2@1.0",
"android.hardware.media.omx@1.0",
- "android.hidl.memory@1.0",
+ "android.hardware.media@1.0",
+ "android.hardware.media@1.0",
"android.hidl.memory.token@1.0",
+ "android.hidl.memory@1.0",
"android.hidl.safe_union@1.0",
"android.hidl.token@1.0",
"android.hidl.token@1.0-utils",
+ "fmtlib",
+ "libEGL",
+ "libFLAC",
+ "libFLAC-config",
+ "libFLAC-headers",
+ "libFraunhoferAAC",
+ "libarect",
+ "libasync_safe",
+ "libaudio_system_headers",
+ "libaudioutils",
+ "libaudioutils",
+ "libaudioutils_fixedfft",
+ "libavcdec",
+ "libavcenc",
+ "libavservices_minijail",
"libavservices_minijail",
"libbacktrace",
+ "libbacktrace_headers",
"libbase",
+ "libbase_headers",
+ "libbinder_headers",
"libbinderthreadstate",
+ "libbluetooth-types-header",
+ "libbufferhub_headers",
"libc++",
+ "libc_scudo",
"libcap",
"libcodec2",
+ "libcodec2_headers",
"libcodec2_hidl@1.0",
+ "libcodec2_hidl@1.1",
+ "libcodec2_internal",
"libcodec2_soft_aacdec",
"libcodec2_soft_aacenc",
"libcodec2_soft_amrnbdec",
@@ -230,73 +630,381 @@
"libcodec2_soft_vp9dec",
"libcodec2_soft_vp9enc",
"libcodec2_vndk",
- "libc_scudo",
"libcutils",
+ "libcutils_headers",
"libdexfile_support",
- "libEGL",
+ "libdvr_headers",
"libfmq",
+ "libfmq",
+ "libgav1",
+ "libgralloctypes",
+ "libgrallocusage",
"libgraphicsenv",
+ "libgsm",
+ "libgui_bufferqueue_static",
+ "libgui_headers",
"libhardware",
+ "libhardware_headers",
+ "libhevcdec",
+ "libhevcenc",
"libhidlbase",
+ "libhidlbase-impl-internal",
"libhidlmemory",
+ "libhidltransport-impl-internal",
+ "libhwbinder-impl-internal",
"libion",
+ "libjpeg",
+ "libjsoncpp",
+ "liblog_headers",
"liblzma",
+ "libmath",
"libmedia_codecserviceregistrant",
+ "libmedia_headers",
"libminijail",
+ "libminijail_gen_constants",
+ "libminijail_gen_constants_obj",
+ "libminijail_gen_syscall",
+ "libminijail_gen_syscall_obj",
+ "libminijail_generated",
+ "libmpeg2dec",
+ "libnativebase_headers",
"libnativebridge_lazy",
"libnativeloader_lazy",
+ "libnativewindow_headers",
"libopus",
+ "libpdx_headers",
"libprocessgroup",
+ "libprocessgroup_headers",
"libscudo_wrapper",
"libsfplugin_ccodec_utils",
"libstagefright_amrnb_common",
+ "libstagefright_amrnbdec",
+ "libstagefright_amrnbenc",
+ "libstagefright_amrwbdec",
+ "libstagefright_amrwbenc",
"libstagefright_bufferpool@2.0.1",
"libstagefright_bufferqueue_helper",
"libstagefright_enc_common",
"libstagefright_flacdec",
"libstagefright_foundation",
+ "libstagefright_foundation_headers",
+ "libstagefright_headers",
+ "libstagefright_m4vh263dec",
+ "libstagefright_m4vh263enc",
+ "libstagefright_mp3dec",
"libsync",
+ "libsystem_headers",
"libui",
+ "libui_headers",
"libunwindstack",
"libutils",
+ "libutils_headers",
"libvorbisidec",
"libvpx",
+ "libyuv",
+ "libyuv_static",
+ "media_ndk_headers",
+ "media_plugin_headers",
"mediaswcodec",
- "prebuilt_libclang_rt",
+ }
+ //
+ // Module separator
+ //
+ m["com.android.mediaprovider"] = []string{
+ "MediaProvider",
+ "MediaProviderGoogle",
+ "fmtlib_ndk",
+ "guava",
+ "libbase_ndk",
+ "libfuse",
+ "libfuse_jni",
+ "libnativehelper_header_only",
+ }
+ //
+ // Module separator
+ //
+ m["com.android.permission"] = []string{
+ "androidx.annotation_annotation",
+ "androidx.annotation_annotation-nodeps",
+ "androidx.lifecycle_lifecycle-common",
+ "androidx.lifecycle_lifecycle-common-java8",
+ "androidx.lifecycle_lifecycle-common-java8-nodeps",
+ "androidx.lifecycle_lifecycle-common-nodeps",
+ "kotlin-annotations",
+ "kotlin-stdlib",
+ "kotlin-stdlib-jdk7",
+ "kotlin-stdlib-jdk8",
+ "kotlinx-coroutines-android",
+ "kotlinx-coroutines-android-nodeps",
+ "kotlinx-coroutines-core",
+ "kotlinx-coroutines-core-nodeps",
+ "libprotobuf-java-lite",
+ "permissioncontroller-statsd",
}
//
// Module separator
//
m["com.android.runtime"] = []string{
+ "bionic_libc_platform_headers",
+ "fmtlib",
+ "libarm-optimized-routines-math",
+ "libasync_safe",
+ "libasync_safe_headers",
+ "libbacktrace_headers",
+ "libbase",
+ "libbase_headers",
+ "libc++",
+ "libc_aeabi",
+ "libc_bionic",
+ "libc_bionic_ndk",
+ "libc_bootstrap",
+ "libc_common",
+ "libc_common_shared",
+ "libc_common_static",
+ "libc_dns",
+ "libc_dynamic_dispatch",
+ "libc_fortify",
+ "libc_freebsd",
+ "libc_freebsd_large_stack",
+ "libc_gdtoa",
+ "libc_headers",
+ "libc_init_dynamic",
+ "libc_init_static",
+ "libc_jemalloc_wrapper",
+ "libc_netbsd",
+ "libc_nomalloc",
+ "libc_nopthread",
+ "libc_openbsd",
+ "libc_openbsd_large_stack",
+ "libc_openbsd_ndk",
+ "libc_pthread",
+ "libc_static_dispatch",
+ "libc_syscalls",
+ "libc_tzcode",
+ "libc_unwind_static",
+ "libcutils",
+ "libcutils_headers",
+ "libdebuggerd",
+ "libdebuggerd_common_headers",
+ "libdebuggerd_handler_core",
+ "libdebuggerd_handler_fallback",
+ "libdexfile_external_headers",
+ "libdexfile_support",
+ "libdexfile_support_static",
+ "libgtest_prod",
+ "libjemalloc5",
+ "liblinker_main",
+ "liblinker_malloc",
+ "liblog",
+ "liblog_headers",
+ "liblz4",
+ "liblzma",
+ "libprocessgroup_headers",
+ "libprocinfo",
+ "libpropertyinfoparser",
+ "libscudo",
+ "libstdc++",
+ "libsystem_headers",
+ "libsystemproperties",
+ "libtombstoned_client_static",
+ "libunwindstack",
+ "libutils_headers",
+ "libz",
+ "libziparchive",
+ }
+ //
+ // Module separator
+ //
+ m["com.android.resolv"] = []string{
+ "bcm_object",
+ "dnsresolver_aidl_interface-unstable-ndk_platform",
+ "fmtlib",
+ "libbacktrace_headers",
+ "libbase",
+ "libbase_headers",
+ "libc++",
+ "libcrypto",
+ "libcutils",
+ "libcutils_headers",
+ "libgtest_prod",
+ "libjsoncpp",
+ "liblog",
+ "liblog_headers",
+ "libnativehelper_header_only",
+ "libnetd_client_headers",
+ "libnetd_resolv",
+ "libnetdutils",
+ "libprocessgroup",
+ "libprocessgroup_headers",
+ "libprotobuf-cpp-lite",
+ "libssl",
+ "libstatslog_resolv",
+ "libstatspush_compat",
+ "libstatssocket",
+ "libstatssocket_headers",
+ "libsystem_headers",
+ "libsysutils",
+ "libutils",
+ "libutils_headers",
+ "netd_event_listener_interface-ndk_platform",
+ "server_configurable_flags",
+ "stats_proto",
+ }
+ //
+ // Module separator
+ //
+ m["com.android.tethering"] = []string{
"libbase",
"libc++",
- "libdexfile_support",
- "liblzma",
- "libunwindstack",
- "prebuilt_libclang_rt",
- }
- //
- // Module separator
- //
- m["com.android.resolv"] = []string{"libcrypto", "libnetd_resolv", "libssl"}
- //
- // Module separator
- //
- m["com.android.tethering"] = []string{"libbase", "libc++", "libnativehelper_compat_libc++"}
- //
- // Module separator
- //
- m["com.android.vndk"] = []string{
- "libbacktrace",
+ "libnativehelper_compat_libc++",
+ "android.hardware.tetheroffload.config@1.0",
+ "fmtlib",
+ "libbacktrace_headers",
+ "libbase_headers",
"libbinderthreadstate",
- "libblas",
- "libcompiler_rt",
- "libgui",
- "libunwind",
+ "libcgrouprc",
+ "libcgrouprc_format",
+ "libcutils",
+ "libcutils_headers",
+ "libhidlbase",
+ "libhidlbase-impl-internal",
+ "libhidltransport-impl-internal",
+ "libhwbinder-impl-internal",
+ "libjsoncpp",
+ "liblog",
+ "liblog_headers",
+ "libprocessgroup",
+ "libprocessgroup_headers",
+ "libsystem_headers",
+ "libtetherutilsjni",
+ "libutils",
+ "libutils_headers",
+ "libvndksupport",
+ "tethering-aidl-interfaces-java",
}
//
// Module separator
//
+ m["com.android.wifi"] = []string{
+ "PlatformProperties",
+ "android.hardware.wifi-V1.0-java",
+ "android.hardware.wifi-V1.1-java",
+ "android.hardware.wifi-V1.2-java",
+ "android.hardware.wifi-V1.3-java",
+ "android.hardware.wifi-V1.4-java",
+ "android.hardware.wifi.hostapd-V1.0-java",
+ "android.hardware.wifi.hostapd-V1.1-java",
+ "android.hardware.wifi.hostapd-V1.2-java",
+ "android.hardware.wifi.supplicant-V1.0-java",
+ "android.hardware.wifi.supplicant-V1.1-java",
+ "android.hardware.wifi.supplicant-V1.2-java",
+ "android.hardware.wifi.supplicant-V1.3-java",
+ "android.hidl.base-V1.0-java",
+ "android.hidl.manager-V1.0-java",
+ "android.hidl.manager-V1.1-java",
+ "android.hidl.manager-V1.2-java",
+ "androidx.annotation_annotation",
+ "androidx.annotation_annotation-nodeps",
+ "bouncycastle-unbundled",
+ "dnsresolver_aidl_interface-V2-java",
+ "error_prone_annotations",
+ "ipmemorystore-aidl-interfaces-V3-java",
+ "ipmemorystore-aidl-interfaces-java",
+ "ksoap2",
+ "libbacktrace_headers",
+ "libbase",
+ "libbase_headers",
+ "libc++",
+ "libcutils",
+ "libcutils_headers",
+ "liblog_headers",
+ "libnanohttpd",
+ "libprocessgroup",
+ "libprocessgroup_headers",
+ "libprotobuf-java-lite",
+ "libprotobuf-java-nano",
+ "libsystem_headers",
+ "libutils",
+ "libutils_headers",
+ "libwifi-jni",
+ "net-utils-services-common",
+ "netd_aidl_interface-V2-java",
+ "netd_aidl_interface-unstable-java",
+ "netd_event_listener_interface-java",
+ "netlink-client",
+ "networkstack-aidl-interfaces-unstable-java",
+ "networkstack-client",
+ "services.net",
+ "wifi-lite-protos",
+ "wifi-nano-protos",
+ "wifi-service-pre-jarjar",
+ "wifi-service-resources",
+ "prebuilt_androidx.annotation_annotation-nodeps",
+ }
+ //
+ // Module separator
+ //
+ m["com.android.sdkext"] = []string{
+ "fmtlib_ndk",
+ "libbase_ndk",
+ "libprotobuf-cpp-lite-ndk",
+ }
+ //
+ // Module separator
+ //
+ m["com.android.os.statsd"] = []string{
+ "libbacktrace_headers",
+ "libbase_headers",
+ "libc++",
+ "libcutils",
+ "libcutils_headers",
+ "liblog_headers",
+ "libprocessgroup_headers",
+ "libstatssocket",
+ "libsystem_headers",
+ "libutils_headers",
+ }
+ //
+ // Module separator
+ //
+ m["//any"] = []string{
+ "crtbegin_dynamic",
+ "crtbegin_dynamic1",
+ "crtbegin_so",
+ "crtbegin_so1",
+ "crtbegin_static",
+ "crtbrand",
+ "crtend_android",
+ "crtend_so",
+ "libatomic",
+ "libc++_static",
+ "libc++abi",
+ "libc++demangle",
+ "libc_headers",
+ "libclang_rt",
+ "libgcc_stripped",
+ "libprofile-clang-extras",
+ "libprofile-clang-extras_ndk",
+ "libprofile-extras",
+ "libprofile-extras_ndk",
+ "libunwind_llvm",
+ "ndk_crtbegin_dynamic.27",
+ "ndk_crtbegin_so.16",
+ "ndk_crtbegin_so.19",
+ "ndk_crtbegin_so.21",
+ "ndk_crtbegin_so.24",
+ "ndk_crtbegin_so.27",
+ "ndk_crtend_android.27",
+ "ndk_crtend_so.16",
+ "ndk_crtend_so.19",
+ "ndk_crtend_so.21",
+ "ndk_crtend_so.24",
+ "ndk_crtend_so.27",
+ "ndk_libandroid_support",
+ "ndk_libc++_static",
+ "ndk_libc++abi",
+ "ndk_libunwind",
+ }
return m
}
@@ -1228,6 +1936,47 @@
return true
}
+// Ensures that the dependencies are marked as available for this APEX
+func (a *apexBundle) checkApexAvailability(ctx android.ModuleContext) {
+ // Let's be practical. Availability for test, host, and the VNDK apex isn't important
+ if ctx.Host() || a.testApex || a.vndkApex {
+ return
+ }
+
+ checkDep := func(ctx android.ModuleContext, am android.ApexModule) {
+ apexName := ctx.ModuleName()
+ if am.AvailableFor(apexName) || whitelistedApexAvailable(apexName, am) {
+ return
+ }
+ ctx.ModuleErrorf("requires %q that is not available for the APEX.", am.Name())
+ }
+
+ ctx.WalkDepsBlueprint(func(child, parent blueprint.Module) bool {
+ am, ok := child.(android.ApexModule)
+ if !ok || !am.CanHaveApexVariants() {
+ return false
+ }
+
+ // Check for the direct dependencies that contribute to the payload
+ if dt, ok := ctx.OtherModuleDependencyTag(child).(dependencyTag); ok {
+ if dt.payload {
+ checkDep(ctx, am)
+ return true
+ }
+ return false
+ }
+
+ // Check for the indirect dependencies if it is considered as part of the APEX
+ if am.DepIsInSameApex(ctx, am) {
+ checkDep(ctx, am)
+ return true
+ }
+
+ // As soon as the dependency graph crosses the APEX boundary, don't go further.
+ return false
+ })
+}
+
func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) {
buildFlattenedAsDefault := ctx.Config().FlattenApex() && !ctx.Config().UnbundledBuild()
switch a.properties.ApexType {
@@ -1263,6 +2012,8 @@
return
}
+ a.checkApexAvailability(ctx)
+
handleSpecialLibs := !android.Bool(a.properties.Ignore_system_library_special_case)
// native lib dependencies
@@ -1520,23 +2271,6 @@
return filesInfo[i].builtFile.String() < filesInfo[j].builtFile.String()
})
- // check apex_available requirements
- if !ctx.Host() && !a.testApex {
- for _, fi := range filesInfo {
- if am, ok := fi.module.(android.ApexModule); ok {
- // vndk {enabled:true} implies visibility to the vndk apex
- if ccm, ok := fi.module.(*cc.Module); ok && ccm.IsVndk() && a.vndkApex {
- continue
- }
-
- if !am.AvailableFor(ctx.ModuleName()) && !whitelistedApexAvailable(ctx.ModuleName(), a.vndkApex, fi.module) {
- ctx.ModuleErrorf("requires %q that is not available for the APEX", fi.module.Name())
- // don't stop so that we can report other violations in the same run
- }
- }
- }
- }
-
a.installDir = android.PathForModuleInstall(ctx, "apex")
a.filesInfo = filesInfo
@@ -1580,22 +2314,31 @@
a.buildApexDependencyInfo(ctx)
}
-func whitelistedApexAvailable(apex string, is_vndk bool, module android.Module) bool {
+func whitelistedApexAvailable(apex string, module android.Module) bool {
key := apex
key = strings.Replace(key, "test_", "", 1)
key = strings.Replace(key, "com.android.art.debug", "com.android.art", 1)
key = strings.Replace(key, "com.android.art.release", "com.android.art", 1)
moduleName := module.Name()
- if strings.Contains(moduleName, "prebuilt_libclang_rt") {
- // This module has variants that depend on the product being built.
- moduleName = "prebuilt_libclang_rt"
+ // Prebuilt modules (e.g. java_import, etc.) have "prebuilt_" prefix added by the build
+ // system. Trim the prefix for the check since they are confusing
+ moduleName = strings.TrimPrefix(moduleName, "prebuilt_")
+ if strings.HasPrefix(moduleName, "libclang_rt.") {
+ // This module has many arch variants that depend on the product being built.
+ // We don't want to list them all
+ moduleName = "libclang_rt"
}
if val, ok := apexAvailWl[key]; ok && android.InList(moduleName, val) {
return true
}
+ key = "//any"
+ if val, ok := apexAvailWl[key]; ok && android.InList(moduleName, val) {
+ return true
+ }
+
return false
}
diff --git a/apex/apex_test.go b/apex/apex_test.go
index faf7ae5..c5b89e6 100644
--- a/apex/apex_test.go
+++ b/apex/apex_test.go
@@ -469,6 +469,11 @@
sdk_version: "none",
system_modules: "none",
compile_dex: true,
+ // TODO: remove //apex_available:platform
+ apex_available: [
+ "//apex_available:platform",
+ "myapex",
+ ],
}
java_library {
@@ -760,7 +765,7 @@
ensureNotContains(t, mylibLdFlags, "mylib3/android_arm64_armv8-a_shared_12_myapex/mylib3.so")
// Ensure that stubs libs are built without -include flags
- mylib2Cflags := ctx.ModuleForTests("mylib2", "android_arm64_armv8-a_static_myapex").Rule("cc").Args["cFlags"]
+ mylib2Cflags := ctx.ModuleForTests("mylib2", "android_arm64_armv8-a_static").Rule("cc").Args["cFlags"]
ensureNotContains(t, mylib2Cflags, "-include ")
// Ensure that genstub is invoked with --apex
@@ -886,6 +891,7 @@
stubs: {
versions: ["10", "20", "30"],
},
+ apex_available: [ "myapex" ],
}
cc_library {
@@ -1573,6 +1579,7 @@
export_include_dirs: ["my_include"],
system_shared_libs: [],
stl: "none",
+ apex_available: [ "myapex" ],
}
cc_library {
@@ -3026,6 +3033,7 @@
srcs: ["mylib.cpp"],
stl: "none",
system_shared_libs: [],
+ apex_available: [ "myapex" ],
}
`)
@@ -3281,10 +3289,15 @@
}`)
// check that libfoo and libbar are created only for myapex, but not for the platform
- ensureListContains(t, ctx.ModuleVariantsForTests("libfoo"), "android_arm64_armv8-a_shared_myapex")
- ensureListNotContains(t, ctx.ModuleVariantsForTests("libfoo"), "android_arm64_armv8-a_shared")
- ensureListContains(t, ctx.ModuleVariantsForTests("libbar"), "android_arm64_armv8-a_shared_myapex")
- ensureListNotContains(t, ctx.ModuleVariantsForTests("libbar"), "android_arm64_armv8-a_shared")
+ // TODO(jiyong) the checks for the platform variant are removed because we now create
+ // the platform variant regardless of the apex_availability. Instead, we will make sure that
+ // the platform variants are not used from other platform modules. When that is done,
+ // these checks will be replaced by expecting a specific error message that will be
+ // emitted when the platform variant is used.
+ // ensureListContains(t, ctx.ModuleVariantsForTests("libfoo"), "android_arm64_armv8-a_shared_myapex")
+ // ensureListNotContains(t, ctx.ModuleVariantsForTests("libfoo"), "android_arm64_armv8-a_shared")
+ // ensureListContains(t, ctx.ModuleVariantsForTests("libbar"), "android_arm64_armv8-a_shared_myapex")
+ // ensureListNotContains(t, ctx.ModuleVariantsForTests("libbar"), "android_arm64_armv8-a_shared")
ctx, _ = testApex(t, `
apex {
@@ -3333,11 +3346,16 @@
}`)
// shared variant of libfoo is only available to myapex
- ensureListContains(t, ctx.ModuleVariantsForTests("libfoo"), "android_arm64_armv8-a_shared_myapex")
- ensureListNotContains(t, ctx.ModuleVariantsForTests("libfoo"), "android_arm64_armv8-a_shared")
- // but the static variant is available to both myapex and the platform
- ensureListContains(t, ctx.ModuleVariantsForTests("libfoo"), "android_arm64_armv8-a_static_myapex")
- ensureListContains(t, ctx.ModuleVariantsForTests("libfoo"), "android_arm64_armv8-a_static")
+ // TODO(jiyong) the checks for the platform variant are removed because we now create
+ // the platform variant regardless of the apex_availability. Instead, we will make sure that
+ // the platform variants are not used from other platform modules. When that is done,
+ // these checks will be replaced by expecting a specific error message that will be
+ // emitted when the platform variant is used.
+ // ensureListContains(t, ctx.ModuleVariantsForTests("libfoo"), "android_arm64_armv8-a_shared_myapex")
+ // ensureListNotContains(t, ctx.ModuleVariantsForTests("libfoo"), "android_arm64_armv8-a_shared")
+ // // but the static variant is available to both myapex and the platform
+ // ensureListContains(t, ctx.ModuleVariantsForTests("libfoo"), "android_arm64_armv8-a_static_myapex")
+ // ensureListContains(t, ctx.ModuleVariantsForTests("libfoo"), "android_arm64_armv8-a_static")
}
func TestOverrideApex(t *testing.T) {
diff --git a/cc/cc.go b/cc/cc.go
index 3b2af38..2e55841 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -1780,6 +1780,9 @@
for _, lib := range deps.SharedLibs {
depTag := SharedDepTag
+ if c.static() {
+ depTag = SharedFromStaticDepTag
+ }
if inList(lib, deps.ReexportSharedLibHeaders) {
depTag = sharedExportDepTag
}
@@ -2197,7 +2200,7 @@
depFile := android.OptionalPath{}
switch depTag {
- case ndkStubDepTag, SharedDepTag, sharedExportDepTag:
+ case ndkStubDepTag, SharedDepTag, SharedFromStaticDepTag, sharedExportDepTag:
ptr = &depPaths.SharedLibs
depPtr = &depPaths.SharedLibsDeps
depFile = ccDep.Toc()
@@ -2550,9 +2553,17 @@
func (c *Module) DepIsInSameApex(ctx android.BaseModuleContext, dep android.Module) bool {
if depTag, ok := ctx.OtherModuleDependencyTag(dep).(DependencyTag); ok {
- if cc, ok := dep.(*Module); ok && cc.IsStubs() && depTag.Shared {
- // dynamic dep to a stubs lib crosses APEX boundary
- return false
+ if cc, ok := dep.(*Module); ok {
+ if cc.HasStubsVariants() && depTag.Shared && depTag.Library {
+ // dynamic dep to a stubs lib crosses APEX boundary
+ return false
+ }
+ if depTag.FromStatic {
+ // shared_lib dependency from a static lib is considered as crossing
+ // the APEX boundary because the dependency doesn't actually is
+ // linked; the dependency is used only during the compilation phase.
+ return false
+ }
}
}
return true
diff --git a/cc/linkable.go b/cc/linkable.go
index 3c46d9d..2abb112 100644
--- a/cc/linkable.go
+++ b/cc/linkable.go
@@ -67,12 +67,17 @@
ReexportFlags bool
ExplicitlyVersioned bool
+
+ FromStatic bool
}
var (
SharedDepTag = DependencyTag{Name: "shared", Library: true, Shared: true}
StaticDepTag = DependencyTag{Name: "static", Library: true}
+ // Same as SharedDepTag, but from a static lib
+ SharedFromStaticDepTag = DependencyTag{Name: "shared from static", Library: true, Shared: true, FromStatic: true}
+
CrtBeginDepTag = DependencyTag{Name: "crtbegin"}
CrtEndDepTag = DependencyTag{Name: "crtend"}
)
diff --git a/java/app.go b/java/app.go
index 6e0ffeb..9503ec4 100755
--- a/java/app.go
+++ b/java/app.go
@@ -583,6 +583,13 @@
return String(a.overridableAppProperties.Certificate)
}
+func (a *AndroidApp) DepIsInSameApex(ctx android.BaseModuleContext, dep android.Module) bool {
+ if IsJniDepTag(ctx.OtherModuleDependencyTag(dep)) {
+ return true
+ }
+ return a.Library.DepIsInSameApex(ctx, dep)
+}
+
// For OutputFileProducer interface
func (a *AndroidApp) OutputFiles(tag string) (android.Paths, error) {
switch tag {
diff --git a/java/java.go b/java/java.go
index a4e91ab..c94ea82 100644
--- a/java/java.go
+++ b/java/java.go
@@ -1717,8 +1717,10 @@
func (j *Module) DepIsInSameApex(ctx android.BaseModuleContext, dep android.Module) bool {
depTag := ctx.OtherModuleDependencyTag(dep)
- // dependencies other than the static linkage are all considered crossing APEX boundary
- return depTag == staticLibTag
+ // Dependencies other than the static linkage are all considered crossing APEX boundary
+ // Also, a dependency to an sdk member is also considered as such. This is required because
+ // sdk members should be mutated into APEXes. Refer to sdk.sdkDepsReplaceMutator.
+ return depTag == staticLibTag || j.IsInAnySdk()
}
func (j *Module) Stem() string {
@@ -2406,6 +2408,14 @@
return nil, nil
}
+func (j *Import) DepIsInSameApex(ctx android.BaseModuleContext, dep android.Module) bool {
+ depTag := ctx.OtherModuleDependencyTag(dep)
+ // dependencies other than the static linkage are all considered crossing APEX boundary
+ // Also, a dependency to an sdk member is also considered as such. This is required because
+ // sdk members should be mutated into APEXes. Refer to sdk.sdkDepsReplaceMutator.
+ return depTag == staticLibTag || j.IsInAnySdk()
+}
+
// Add compile time check for interface implementation
var _ android.IDEInfo = (*Import)(nil)
var _ android.IDECustomizedModuleName = (*Import)(nil)
diff --git a/sdk/java_sdk_test.go b/sdk/java_sdk_test.go
index 692c205..cc893b9 100644
--- a/sdk/java_sdk_test.go
+++ b/sdk/java_sdk_test.go
@@ -34,7 +34,7 @@
result := testSdkWithJava(t, `
sdk {
name: "mysdk",
- java_header_libs: ["myjavalib"],
+ java_header_libs: ["sdkmember"],
}
sdk_snapshot {
@@ -47,22 +47,36 @@
java_header_libs: ["sdkmember_mysdk_2"],
}
- java_import {
+ java_library {
name: "sdkmember",
- prefer: false,
+ srcs: ["Test.java"],
+ system_modules: "none",
+ sdk_version: "none",
host_supported: true,
+ apex_available: [
+ "//apex_available:platform",
+ "//apex_available:anyapex",
+ ],
}
java_import {
name: "sdkmember_mysdk_1",
sdk_member_name: "sdkmember",
host_supported: true,
+ apex_available: [
+ "//apex_available:platform",
+ "//apex_available:anyapex",
+ ],
}
java_import {
name: "sdkmember_mysdk_2",
sdk_member_name: "sdkmember",
host_supported: true,
+ apex_available: [
+ "//apex_available:platform",
+ "//apex_available:anyapex",
+ ],
}
java_library {