1769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski##
2769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski# Environment dependent variables
3769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski##
4769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski
5769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam LesinskiAAPT := aapt2
6d5c4f8723c2b2c85b588fa07a5d4e7afb671d257Adam LesinskiZIPALIGN := zipalign -f 4
7769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam LesinskiFRAMEWORK := ../../../../../../out/target/common/obj/APPS/framework-res_intermediates/package-export.apk
8769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski
9769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski##
10769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski# Project depenedent variables
11769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski##
12769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski
13769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam LesinskiLOCAL_PACKAGE := android.appcompat
14769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam LesinskiLOCAL_RESOURCE_DIR := res
15769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam LesinskiLOCAL_OUT := out
16769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam LesinskiLOCAL_GEN := out/gen
17769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski
18769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski##
19769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski# AAPT2 custom rules.
20769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski##
21769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski
22769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam LesinskiPRIVATE_APK_UNALIGNED := $(LOCAL_OUT)/package-unaligned.apk
23769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam LesinskiPRIVATE_APK_ALIGNED := $(LOCAL_OUT)/package.apk
24769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski
25769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski# Eg: framework.apk, etc.
26769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam LesinskiPRIVATE_LIBS := $(FRAMEWORK)
27769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski$(info PRIVATE_LIBS = $(PRIVATE_LIBS))
28769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski
29769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski# Eg: gen/com/android/app/R.java
30769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam LesinskiPRIVATE_R_JAVA := $(LOCAL_GEN)/$(subst .,/,$(LOCAL_PACKAGE))/R.java
31769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski$(info PRIVATE_R_JAVA = $(PRIVATE_R_JAVA))
32769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski
33769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski# Eg: res/drawable/icon.png, res/values/styles.xml
34769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam LesinskiPRIVATE_RESOURCES := $(shell find $(LOCAL_RESOURCE_DIR) -mindepth 1 -maxdepth 2 -type f)
35769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski$(info PRIVATE_RESOURCES = $(PRIVATE_RESOURCES))
36769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski
37769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski# Eg: drawable, values, layouts
38769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam LesinskiPRIVATE_RESOURCE_TYPES := \
39769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski	$(patsubst $(LOCAL_RESOURCE_DIR)/%/,%,$(sort $(dir $(PRIVATE_RESOURCES))))
40769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski$(info PRIVATE_RESOURCE_TYPES = $(PRIVATE_RESOURCE_TYPES))
41769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski
42769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski# Eg: out/values-v4.apk, out/drawable-xhdpi.apk
43769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam LesinskiPRIVATE_INTERMEDIATE_TABLES := $(patsubst %,$(LOCAL_OUT)/%.apk,$(PRIVATE_RESOURCE_TYPES))
44769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski$(info PRIVATE_INTERMEDIATE_TABLES = $(PRIVATE_INTERMEDIATE_TABLES))
45769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski
46769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski# Generates rules for collect phase.
47769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski# $1: Resource type (values-v4)
48769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski# returns: out/values-v4.apk: res/values-v4/styles.xml res/values-v4/colors.xml
49769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinskidefine make-collect-rule
50769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski$(LOCAL_OUT)/$1.apk: $(filter $(LOCAL_RESOURCE_DIR)/$1/%,$(PRIVATE_RESOURCES))
516cc479b76e9e2e8858434302e1ef2d514ed1b0ecAdam Lesinski	$(AAPT) compile -o $$@ $$^
52769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinskiendef
53769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski
54769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski# Collect: out/values-v4.apk <- res/values-v4/styles.xml res/values-v4/colors.xml
55769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski$(foreach d,$(PRIVATE_RESOURCE_TYPES),$(eval $(call make-collect-rule,$d)))
56769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski
57769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski# Link: out/package-unaligned.apk <- out/values-v4.apk out/drawable-v4.apk
58769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski$(PRIVATE_APK_UNALIGNED): $(PRIVATE_INTERMEDIATE_TABLES) $(PRIVATE_LIBS) AndroidManifest.xml
596d8e4c48f94f36963a25e357ff960ee519cf0e1bAdam Lesinski	$(AAPT) link --manifest AndroidManifest.xml $(addprefix -I ,$(PRIVATE_LIBS)) --java $(LOCAL_GEN) -o $@ $(PRIVATE_INTERMEDIATE_TABLES) --static-lib
60769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski
61769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski# R.java: gen/com/android/app/R.java <- out/resources.arsc
62769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski# No action since R.java is generated when out/resources.arsc is.
63769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski$(PRIVATE_R_JAVA): $(PRIVATE_APK_UNALIGNED)
64769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski
65769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski# Assemble: zip out/resources.arsc AndroidManifest.xml and res/**/*
66769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski$(PRIVATE_APK_ALIGNED): $(PRIVATE_APK_UNALIGNED)
67769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski	$(ZIPALIGN) $< $@
68769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski
69769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski# Create the out directory if needed.
70769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinskidummy := $(shell test -d $(LOCAL_OUT) || mkdir -p $(LOCAL_OUT))
71769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski
72769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski.PHONY: java
73769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinskijava: $(PRIVATE_R_JAVA)
74769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski
75769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski.PHONY: assemble
76769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinskiassemble: $(PRIVATE_APK_ALIGNED)
77769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski
78769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski.PHONY: all
79769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinskiall: assemble java
80769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski
81769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski.DEFAULT_GOAL := all
82