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