Created
January 1, 2020 14:31
-
-
Save xingrz/d955e9bd8bcecac5aceec5a4ecf357b2 to your computer and use it in GitHub Desktop.
Extract an update.zip
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
SOURCE := $(TARGET).zip | |
MOUNT := $(TARGET)/.mount | |
BOOT := $(TARGET)/boot | |
SYSTEM := $(TARGET)/system | |
VENDOR := $(SYSTEM)/vendor | |
BOOT_IMG := $(TARGET)/boot.img | |
SYSTEM_IMG := $(TARGET)/system.img | |
SYSTEM_DAT := $(TARGET)/system.new.dat | |
SYSTEM_LST := $(TARGET)/system.transfer.list | |
ifneq (false,$(USE_BROTLI)) | |
SYSTEM_BRO := $(SYSTEM_DAT).br | |
endif | |
VENDOR_IMG := $(TARGET)/vendor.img | |
VENDOR_DAT := $(TARGET)/vendor.new.dat | |
VENDOR_LST := $(TARGET)/vendor.transfer.list | |
ifneq (false,$(USE_BROTLI)) | |
VENDOR_BRO := $(VENDOR_DAT).br | |
endif | |
UNPACK := ~/android/packing/unpack.sh | |
SDAT2IMG := ~/android/mokee-next/vendor/mk/build/tools/sdat2img.py | |
ifeq (,$(shell which brotli)) | |
$(error `brotli` not found.) | |
endif | |
define extract-ext4-image | |
vagrant ssh -c "mkdir -p ~/mount && rsync --progress /vagrant/$(1) ~/source.img && sudo mount -t ext4 ~/source.img ~/mount && sudo cp -Rvf ~/mount /vagrant/$(2) && sudo umount ~/mount && rm ~/source.img" | |
chown -R $(shell id -un):$(shell id -gn) $(2) | |
chmod -R +r $(2) | |
chmod +w $(2) | |
endef | |
HAS_VENDOR := $(if $(strip $(shell unzip -l $(SOURCE) | grep 'vendor')),true,false) | |
USE_BROTLI := $(if $(strip $(shell unzip -l $(SOURCE) | grep '.dat.br')),true,false) | |
$(info SOURCE: $(SOURCE)) | |
$(info HAS_VENDOR: $(HAS_VENDOR)) | |
$(info USE_BROTLI: $(USE_BROTLI)) | |
TARGETS := $(BOOT) $(SYSTEM) | |
ifneq (false,$(HAS_VENDOR)) | |
TARGETS += $(VENDOR) | |
endif | |
.PHONY: unpack | |
unpack: $(TARGETS) | |
rm -f $(SYSTEM_DAT) $(SYSTEM_LST) | |
ifneq (false,$(HAS_VENDOR)) | |
rm -f $(VENDOR_DAT) $(VENDOR_LST) | |
endif | |
ifneq (false,$(USE_BROTLI)) | |
rm -f $(SYSTEM_BRO) $(VENDOR_BRO) | |
endif | |
@echo "=== Done ===" | |
$(BOOT): $(BOOT_IMG) | |
pushd $(dir $@) && $(UNPACK) $(notdir $^) && popd | |
$(SYSTEM): $(SYSTEM_IMG) | |
$(call extract-ext4-image,$(SYSTEM_IMG),$@) | |
rm -f $(SYSTEM_IMG) | |
ifneq (false,$(HAS_VENDOR)) | |
rm -rf $(VENDOR) | |
endif | |
$(VENDOR): $(VENDOR_IMG) $(SYSTEM) | |
$(call extract-ext4-image,$(VENDOR_IMG),$@) | |
rm -f $(VENDOR_IMG) | |
$(SYSTEM_IMG): $(SYSTEM_LST) $(SYSTEM_DAT) | |
$(SDAT2IMG) $^ $@ | |
$(VENDOR_IMG): $(VENDOR_LST) $(VENDOR_DAT) | |
$(SDAT2IMG) $^ $@ | |
ifneq (false,$(USE_BROTLI)) | |
$(SYSTEM_DAT): $(SYSTEM_BRO) | |
brotli --decompress --output=$@ $^ | |
$(VENDOR_DAT): $(VENDOR_BRO) | |
brotli --decompress --output=$@ $^ | |
endif | |
$(BOOT_IMG): $(TARGET) | |
ifneq (false,$(USE_BROTLI)) | |
$(SYSTEM_BRO): $(TARGET) | |
$(VENDOR_BRO): $(TARGET) | |
else | |
$(SYSTEM_DAT): $(TARGET) | |
$(VENDOR_DAT): $(TARGET) | |
endif | |
$(TARGET): $(SOURCE) | |
mkdir -p $@ | |
unzip $^ -d $@ | |
.PHONY: clean | |
clean: | |
rm -rf $(TARGET) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment