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