Extend SDK link check to java libraries
Java code using the SDK should not link to java code built with the platform APIs or the system SDK. Java code using the system SDK should not link to the platform APIs either, but it can link to java code using another SDK. Change-Id: Iaae0a7e01993cfa1e023649fbd8a7974b5eca709
This commit is contained in:
parent
c78147c650
commit
62dfb591b1
|
@ -369,3 +369,42 @@ $(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_JACK_SHARED_LIBRARIES:= $(full_shared_ja
|
|||
$(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_JARJAR_RULES := $(LOCAL_JARJAR_RULES)
|
||||
|
||||
endif # need_compile_java
|
||||
|
||||
|
||||
###########################################################
|
||||
# Verify that all libraries are safe to use
|
||||
###########################################################
|
||||
ifndef LOCAL_IS_HOST_MODULE
|
||||
my_link_type := $(intermediates.COMMON)/link_type
|
||||
my_link_type_deps := $(strip \
|
||||
$(foreach lib,$(LOCAL_STATIC_JAVA_LIBRARIES),\
|
||||
$(call intermediates-dir-for, \
|
||||
JAVA_LIBRARIES,$(lib),,COMMON)/link_type) \
|
||||
$(foreach lib,$(apk_libraries), \
|
||||
$(call intermediates-dir-for, \
|
||||
APPS,$(lib),,COMMON)/link_type))
|
||||
ifeq ($(LOCAL_SDK_VERSION),system_current)
|
||||
$(my_link_type): PRIVATE_LINK_TYPE := system
|
||||
$(my_link_type): PRIVATE_ALLOWED_TYPES := (sdk|system)
|
||||
else ifneq ($(LOCAL_SDK_VERSION),)
|
||||
$(my_link_type): PRIVATE_LINK_TYPE := sdk
|
||||
$(my_link_type): PRIVATE_ALLOWED_TYPES := sdk
|
||||
else
|
||||
$(my_link_type): PRIVATE_LINK_TYPE := platform
|
||||
$(my_link_type): PRIVATE_ALLOWED_TYPES := (sdk|system|platform)
|
||||
endif
|
||||
$(my_link_type): PRIVATE_DEPS := $(my_link_type_deps)
|
||||
$(my_link_type): PRIVATE_MODULE := $(LOCAL_MODULE)
|
||||
$(my_link_type): PRIVATE_MAKEFILE := $(LOCAL_MODULE_MAKEFILE)
|
||||
$(my_link_type): $(my_link_type_deps)
|
||||
@echo Check Java library module types: $@
|
||||
$(hide) mkdir -p $(dir $@)
|
||||
$(hide) rm -f $@
|
||||
$(hide) for f in $(PRIVATE_DEPS); do \
|
||||
grep -qE '^$(PRIVATE_ALLOWED_TYPES)$$' $$f || \
|
||||
$(call echo-warning,"$(PRIVATE_MAKEFILE): $(PRIVATE_MODULE) ($(PRIVATE_LINK_TYPE)) should not link to $$(basename $${f%_intermediates/link_type}) ($$(cat $$f))"); \
|
||||
done
|
||||
$(hide) echo $(PRIVATE_LINK_TYPE) >$@
|
||||
|
||||
$(LOCAL_BUILT_MODULE): $(my_link_type)
|
||||
endif # !LOCAL_IS_HOST_MODULE
|
||||
|
|
|
@ -368,6 +368,20 @@ common_javalib_jar := $(intermediates.COMMON)/javalib.jar
|
|||
|
||||
$(common_classes_jar) $(common_javalib_jar): PRIVATE_MODULE := $(LOCAL_MODULE)
|
||||
|
||||
my_link_type := $(intermediates.COMMON)/link_type
|
||||
ifeq ($(LOCAL_SDK_VERSION),system_current)
|
||||
$(my_link_type): PRIVATE_LINK_TYPE := system
|
||||
else ifneq ($(LOCAL_SDK_VERSION),)
|
||||
$(my_link_type): PRIVATE_LINK_TYPE := sdk
|
||||
else
|
||||
$(my_link_type): PRIVATE_LINK_TYPE := platform
|
||||
endif
|
||||
$(my_link_type):
|
||||
@echo Check module type: $@
|
||||
$(hide) mkdir -p $(dir $@) && rm -f $@
|
||||
$(hide) echo $(PRIVATE_LINK_TYPE) >$@
|
||||
$(LOCAL_BUILT_MODULE): $(my_link_type)
|
||||
|
||||
ifeq ($(prebuilt_module_is_dex_javalib),true)
|
||||
# For prebuilt shared Java library we don't have classes.jar.
|
||||
$(common_javalib_jar) : $(my_src_jar) | $(ACP)
|
||||
|
|
Loading…
Reference in New Issue