1##
2# Environment dependent variables
3##
4
5AAPT := aapt2
6ZIPALIGN := zipalign -f 4
7FRAMEWORK := ../../../../../../out/target/common/obj/APPS/framework-res_intermediates/package-export.apk
8
9##
10# Project depenedent variables
11##
12
13LOCAL_PACKAGE := android.appcompat
14LOCAL_RESOURCE_DIR := res
15LOCAL_OUT := out
16LOCAL_GEN := out/gen
17
18##
19# AAPT2 custom rules.
20##
21
22PRIVATE_APK_UNALIGNED := $(LOCAL_OUT)/package-unaligned.apk
23PRIVATE_APK_ALIGNED := $(LOCAL_OUT)/package.apk
24
25# Eg: framework.apk, etc.
26PRIVATE_LIBS := $(FRAMEWORK)
27$(info PRIVATE_LIBS = $(PRIVATE_LIBS))
28
29# Eg: gen/com/android/app/R.java
30PRIVATE_R_JAVA := $(LOCAL_GEN)/$(subst .,/,$(LOCAL_PACKAGE))/R.java
31$(info PRIVATE_R_JAVA = $(PRIVATE_R_JAVA))
32
33# Eg: res/drawable/icon.png, res/values/styles.xml
34PRIVATE_RESOURCES := $(shell find $(LOCAL_RESOURCE_DIR) -mindepth 1 -maxdepth 2 -type f)
35$(info PRIVATE_RESOURCES = $(PRIVATE_RESOURCES))
36
37# Eg: drawable, values, layouts
38PRIVATE_RESOURCE_TYPES := \
39	$(patsubst $(LOCAL_RESOURCE_DIR)/%/,%,$(sort $(dir $(PRIVATE_RESOURCES))))
40$(info PRIVATE_RESOURCE_TYPES = $(PRIVATE_RESOURCE_TYPES))
41
42# Eg: out/values-v4.apk, out/drawable-xhdpi.apk
43PRIVATE_INTERMEDIATE_TABLES := $(patsubst %,$(LOCAL_OUT)/%.apk,$(PRIVATE_RESOURCE_TYPES))
44$(info PRIVATE_INTERMEDIATE_TABLES = $(PRIVATE_INTERMEDIATE_TABLES))
45
46# Generates rules for collect phase.
47# $1: Resource type (values-v4)
48# returns: out/values-v4.apk: res/values-v4/styles.xml res/values-v4/colors.xml
49define make-collect-rule
50$(LOCAL_OUT)/$1.apk: $(filter $(LOCAL_RESOURCE_DIR)/$1/%,$(PRIVATE_RESOURCES))
51	$(AAPT) compile -o $$@ $$^
52endef
53
54# Collect: out/values-v4.apk <- res/values-v4/styles.xml res/values-v4/colors.xml
55$(foreach d,$(PRIVATE_RESOURCE_TYPES),$(eval $(call make-collect-rule,$d)))
56
57# Link: out/package-unaligned.apk <- out/values-v4.apk out/drawable-v4.apk
58$(PRIVATE_APK_UNALIGNED): $(PRIVATE_INTERMEDIATE_TABLES) $(PRIVATE_LIBS) AndroidManifest.xml
59	$(AAPT) link --manifest AndroidManifest.xml $(addprefix -I ,$(PRIVATE_LIBS)) --java $(LOCAL_GEN) -o $@ $(PRIVATE_INTERMEDIATE_TABLES) --static-lib
60
61# R.java: gen/com/android/app/R.java <- out/resources.arsc
62# No action since R.java is generated when out/resources.arsc is.
63$(PRIVATE_R_JAVA): $(PRIVATE_APK_UNALIGNED)
64
65# Assemble: zip out/resources.arsc AndroidManifest.xml and res/**/*
66$(PRIVATE_APK_ALIGNED): $(PRIVATE_APK_UNALIGNED)
67	$(ZIPALIGN) $< $@
68
69# Create the out directory if needed.
70dummy := $(shell test -d $(LOCAL_OUT) || mkdir -p $(LOCAL_OUT))
71
72.PHONY: java
73java: $(PRIVATE_R_JAVA)
74
75.PHONY: assemble
76assemble: $(PRIVATE_APK_ALIGNED)
77
78.PHONY: all
79all: assemble java
80
81.DEFAULT_GOAL := all
82