Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6b60b215 authored by David Brazdil's avatar David Brazdil
Browse files

Refactor hiddenapi rules to share common code

Java modules built with make and Soong currently invoke `hiddenapi`
with their own rules. Refactor the definitions so that Soong uses
make's definition. This will be useful for a subsequent CL which
needs to invoke `hiddenapi` on all boot dex files simultaneously.

Bug: 79409988
Test: m
Change-Id: I85105e650605d37c3ee8200d7f0d40c297756fcb
parent 57b1e546
Loading
Loading
Loading
Loading
+26 −23
Original line number Original line Diff line number Diff line
@@ -2835,37 +2835,40 @@ done \
fi
fi
endef
endef


# Copy dex files, invoking $(HIDDENAPI) on them in the process.
define hiddenapi-copy-dex-files
define hiddenapi-copy-dex-files
$(2): $(1) $(HIDDENAPI) $(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST) \
$(2): $(1) $(HIDDENAPI) $(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST) \
      $(INTERNAL_PLATFORM_HIDDENAPI_DARK_GREYLIST) $(INTERNAL_PLATFORM_HIDDENAPI_BLACKLIST)
      $(INTERNAL_PLATFORM_HIDDENAPI_DARK_GREYLIST) $(INTERNAL_PLATFORM_HIDDENAPI_BLACKLIST)
	@rm -rf $(dir $(2))
	@rm -rf $(dir $(2))
	@mkdir -p $(dir $(2))
	@mkdir -p $(dir $(2))
	find $(dir $(1)) -maxdepth 1 -name "classes*.dex" | sort | \
	find $(dir $(1)) -maxdepth 1 -name "classes*.dex" | xargs -I{} cp -f {} $(dir $(2))/; \
		xargs -I{} cp -f {} $(dir $(2))
	find $(dir $(2)) -maxdepth 1 -name "classes*.dex" | sort | sed 's/^/--dex=/' \
	find $(dir $(2)) -name "classes*.dex" | sort | sed 's/^/--dex=/' | \
	| xargs $(HIDDENAPI) encode \
		xargs $(HIDDENAPI) encode \
	    --light-greylist=$(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST) \
	    --light-greylist=$(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST) \
	    --dark-greylist=$(INTERNAL_PLATFORM_HIDDENAPI_DARK_GREYLIST) \
	    --dark-greylist=$(INTERNAL_PLATFORM_HIDDENAPI_DARK_GREYLIST) \
	    --blacklist=$(INTERNAL_PLATFORM_HIDDENAPI_BLACKLIST)
	    --blacklist=$(INTERNAL_PLATFORM_HIDDENAPI_BLACKLIST)
endef
endef


# File names for intermediate dex files of `hiddenapi-copy-soong-jar`.
hiddenapi-soong-input-dex = $(dir $(1))/hiddenapi/dex-input/classes.dex
hiddenapi-soong-output-dex = $(dir $(1))/hiddenapi/dex-output/classes.dex

# Decompress a JAR with dex files, invoke $(HIDDENAPI) on them and compress again.
define hiddenapi-copy-soong-jar
define hiddenapi-copy-soong-jar
$(2): PRIVATE_FOLDER := $(dir $(2))dex-hiddenapi
$(call hiddenapi-soong-input-dex,$(2)): $(1)
$(2): $(1) $(HIDDENAPI) $(SOONG_ZIP) $(MERGE_ZIPS) $(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST) \
	@rm -rf `dirname $$@`
      $(INTERNAL_PLATFORM_HIDDENAPI_DARK_GREYLIST) $(INTERNAL_PLATFORM_HIDDENAPI_BLACKLIST)
	@mkdir -p `dirname $$@`
	@echo "Hidden API: $$@"
	unzip -o -DD -q $(1) 'classes*.dex' -d `dirname $$@`
	$$(copy-file-to-target)

	@rm -rf $${PRIVATE_FOLDER}
$(call hiddenapi-copy-dex-files,\
	@mkdir -p $${PRIVATE_FOLDER}
    $(call hiddenapi-soong-input-dex,$(2)),\
	unzip -q $(2) 'classes*.dex' -d $${PRIVATE_FOLDER}
    $(call hiddenapi-soong-output-dex,$(2)))
	find $${PRIVATE_FOLDER} -name "classes*.dex" | sort | sed 's/^/--dex=/' | \

		xargs $(HIDDENAPI) encode \
$(2): OUTPUT_DIR := $(dir $(call hiddenapi-soong-output-dex,$(2)))
		    --light-greylist=$(INTERNAL_PLATFORM_HIDDENAPI_LIGHT_GREYLIST) \
$(2): OUTPUT_JAR := $(dir $(call hiddenapi-soong-output-dex,$(2)))classes.jar
		    --dark-greylist=$(INTERNAL_PLATFORM_HIDDENAPI_DARK_GREYLIST) \
$(2): $(1) $(call hiddenapi-soong-output-dex,$(2)) | $(SOONG_ZIP) $(MERGE_ZIPS)
		    --blacklist=$(INTERNAL_PLATFORM_HIDDENAPI_BLACKLIST)
	$(SOONG_ZIP) -o $${OUTPUT_JAR} -C $${OUTPUT_DIR} -D $${OUTPUT_DIR}
	$(SOONG_ZIP) -o $${PRIVATE_FOLDER}/classes.dex.jar -C $${PRIVATE_FOLDER} -D $${PRIVATE_FOLDER}
	$(MERGE_ZIPS) -D -zipToNotStrip $${OUTPUT_JAR} -stripFile "classes*.dex" $(2) $${OUTPUT_JAR} $(1)
	$(MERGE_ZIPS) -D -zipToNotStrip $${PRIVATE_FOLDER}/classes.dex.jar -stripFile "classes*.dex" \
		$(2) $${PRIVATE_FOLDER}/classes.dex.jar $(1)
endef
endef


###########################################################
###########################################################