Implement APEX JAR (Java library) absence checks for Core Libraries.
Refactor existing native library checks to share common logics.
Test: Check that `m installclean && m systemimage` succeeds
Test: Check that `m installclean && m libart && m systemimage` fails
Test: Check that `m installclean && m core-oj && m systemimage` fails
Test: Check that `m installclean && m conscrypt && m systemimage` fails
Test: Check that `m installclean && m libart core-oj conscrypt && m systemimage` fails
Test: Check that
`export OVERRIDE_TARGET_FLATTEN_APEX=true \
&& m installclean \
&& m systemimage`
succeeds
Bug: 142944799
Bug: 128708192
Bug: 113374338
Change-Id: I703a837c6bb138af73eeb95fc08e1a87af2d8ad7
diff --git a/core/main.mk b/core/main.mk
index a5e2456..9b63f69 100644
--- a/core/main.mk
+++ b/core/main.mk
@@ -1109,11 +1109,11 @@
endef
# Check that libraries that should only be in APEXes don't end up in the system
-# image. For the Runtime APEX this complements the checks in
+# image. For the ART APEX this complements the checks in
# art/build/apex/art_apex_test.py.
# TODO(b/128708192): Implement this restriction in Soong instead.
-# Runtime APEX libraries
+# ART APEX (native) libraries
APEX_MODULE_LIBS := \
libadbconnection.so \
libadbconnectiond.so \
@@ -1129,14 +1129,10 @@
libartd-dexlayout.so \
libartd.so \
libartpalette.so \
- libc.so \
- libc_malloc_debug.so \
- libc_malloc_hooks.so \
libdexfile.so \
libdexfile_external.so \
libdexfiled.so \
libdexfiled_external.so \
- libdl.so \
libdt_fd_forward.so \
libdt_socket.so \
libicui18n.so \
@@ -1144,11 +1140,9 @@
libicu_jni.so \
libjavacore.so \
libjdwp.so \
- libm.so \
libnativebridge.so \
libnativehelper.so \
libnativeloader.so \
- libneuralnetworks.so \
libnpt.so \
libopenjdk.so \
libopenjdkjvm.so \
@@ -1160,16 +1154,45 @@
libprofiled.so \
libsigchain.so \
+# Runtime (Bionic) APEX (native) libraries
+APEX_MODULE_LIBS += \
+ libc.so \
+ libc_malloc_debug.so \
+ libc_malloc_hooks.so \
+ libdl.so \
+ libm.so \
+
# Conscrypt APEX libraries
APEX_MODULE_LIBS += \
libjavacrypto.so \
+# Android Neural Network API (NNAPI) APEX (native) libraries
+APEX_MODULE_LIBS += \
+ libneuralnetworks.so \
+
+# ART APEX JARs (Java libraries)
+APEX_MODULE_LIBS += \
+ apache-xml.jar \
+ bouncycastle.jar \
+ core-icu4j.jar \
+ core-libart.jar \
+ core-oj.jar \
+ okhttp.jar \
+
+# Conscrypt APEX JARs (Java libraries)
+APEX_MODULE_LIBS += \
+ conscrypt.jar \
+
# An option to disable the check below, for local use since some build targets
# still may create these libraries in /system (b/129006418).
DISABLE_APEX_LIBS_ABSENCE_CHECK ?=
+# Allow APEX libraries under /system/apex, which happens when APEX flattening
+# is enabled.
+APEX_LIBS_ABSENCE_CHECK_EXCLUDE := apex
+
# Bionic should not be in /system, except for the bootstrap instance.
-APEX_LIBS_ABSENCE_CHECK_EXCLUDE := lib/bootstrap lib64/bootstrap
+APEX_LIBS_ABSENCE_CHECK_EXCLUDE += lib/bootstrap lib64/bootstrap
# Exclude lib/arm and lib64/arm64 which contain the native bridge proxy libs. They
# are compiled for the guest architecture and used with an entirely different
@@ -1216,12 +1239,14 @@
# APEX might be misconfigured or something is wrong in the build system.
# Please reach out to the APEX package owners and/or soong-team@, or
# android-building@googlegroups.com externally.
+ #
+ # Likewise, we check for the absence of APEX Java libraries (JARs).
define check-apex-libs-absence
$(call maybe-print-list-and-error, \
$(filter $(foreach lib,$(APEX_MODULE_LIBS),%/$(lib)), \
$(filter-out $(foreach dir,$(APEX_LIBS_ABSENCE_CHECK_EXCLUDE), \
$(TARGET_OUT)/$(if $(findstring %,$(dir)),$(dir),$(dir)/%)), \
- $(filter $(TARGET_OUT)/lib/% $(TARGET_OUT)/lib64/%,$(1)))), \
+ $(filter $(TARGET_OUT),$(1)))), \
APEX libraries found in product_target_FILES (see comment for check-apex-libs-absence in \
build/make/core/main.mk for details))
endef
@@ -1235,11 +1260,13 @@
# try "m installclean && m systemimage" to get a correct system image. For
# local work you can also disable the check with the
# DISABLE_APEX_LIBS_ABSENCE_CHECK environment variable.
+ #
+ # Likewise, we check for the absence of APEX Java libraries (JARs).
define check-apex-libs-absence-on-disk
$(hide) ( \
cd $(TARGET_OUT) && \
- findres=$$(find lib* \
- $(foreach dir,$(APEX_LIBS_ABSENCE_CHECK_EXCLUDE),-path "$(subst %,*,$(dir))" -prune -o) \
+ findres=$$(find . \
+ $(foreach dir,$(APEX_LIBS_ABSENCE_CHECK_EXCLUDE),-path "./$(subst %,*,$(dir))" -prune -o) \
-type f \( -false $(foreach lib,$(APEX_MODULE_LIBS),-o -name $(lib)) \) \
-print) && \
if [ -n "$$findres" ]; then \
@@ -1253,8 +1280,6 @@
endef
endif
-# TODO(b/142944799): Implement Java library absence check for Core Libraries.
-
ifdef FULL_BUILD
ifneq (true,$(ALLOW_MISSING_DEPENDENCIES))
# Check to ensure that all modules in PRODUCT_PACKAGES exist (opt in per product)