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