abouttreesummaryrefslogcommitdiff
path: root/Makefile
blob: 2653bb6b6574276b7a97b5167579ca94638c9f8f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# Configuration

PACKAGE_NAME = juloo.keyboard2

ANDROID_PLATFORM_VERSION = android-30
JAVA_VERSION = 1.7

SRC_DIR = srcs
RES_DIR = res

EXTRA_JARS =

# /

debug: _build/$(PACKAGE_NAME).debug.apk
release: _build/$(PACKAGE_NAME).apk

installd: _build/$(PACKAGE_NAME).debug.apk
	adb install -r "$<"

clean:
	rm -rf _build/*.dex _build/class _build/gen _build/*.apk _build/*.unsigned-apk \
		_build/*.idsig _build/assets

rebuild_special_font: _build/special_font.ttf
	cp "$<" srcs/special_font/result.ttf

sync_translations:
	python sync_translations.py

check_layouts:
	python check_layout.py $(wildcard res/xml/*.xml) > check_layout.output

# Will modify the source tree.
runtest: rebuild_special_font sync_translations check_layouts

.PHONY: release debug installd clean rebuild_special_font check_layouts sync_translations runtest

$(shell mkdir -p _build)

ifndef ANDROID_HOME
$(error ANDROID_HOME not set)
endif

ANDROID_BUILD_TOOLS = $(lastword $(sort $(wildcard $(ANDROID_HOME)/build-tools/*)))
ANDROID_PLATFORM = $(ANDROID_HOME)/platforms/$(ANDROID_PLATFORM_VERSION)

ifeq ($(shell [ -d "$(ANDROID_PLATFORM)" ] && echo ok),)
$(error Android platform not found. Want $(ANDROID_PLATFORM_VERSION), \
	found $(notdir $(wildcard $(ANDROID_HOME)/platforms/*)))
endif

JAVAC_FLAGS = -source $(JAVA_VERSION) -target $(JAVA_VERSION) -encoding utf8

# Source files

MANIFEST_FILE = AndroidManifest.xml
JAVA_FILES = $(shell find $(SRC_DIR) -name '*.java')
RES_FILES = $(shell find $(RES_DIR) -type f)

# Debug signing

DEBUG_KEYSTORE = _build/debug.keystore
DEBUG_PASSWD = debug0

$(DEBUG_KEYSTORE):
	echo y | keytool -genkeypair -dname "cn=d, ou=e, o=b, c=ug" \
		-alias debug -keypass $(DEBUG_PASSWD) -keystore "$@" \
		-keyalg rsa -storepass $(DEBUG_PASSWD) -validity 10000

_build/%.debug.apk: _build/%.debug.unsigned-apk $(DEBUG_KEYSTORE)
	$(ANDROID_BUILD_TOOLS)/apksigner sign --in "$<" --out "$@" \
		--ks $(DEBUG_KEYSTORE) --ks-key-alias debug --ks-pass "pass:$(DEBUG_PASSWD)"

# Debug apk

_build/$(PACKAGE_NAME).debug.unsigned-apk: AAPT_PACKAGE_FLAGS+=--rename-manifest-package $(PACKAGE_NAME).debug --product debug

# Release signing

# %-keystore.conf should declare KEYSTORE, KEYNAME and KEYSTOREPASS
#  it is interpreted as a shell script
_build/%.apk: _build/%.unsigned-apk %-keystore.conf
	eval `cat $(word 2,$^)` && \
	$(ANDROID_BUILD_TOOLS)/apksigner sign --in "$<" --out "$@" \
		--ks "$$KEYSTORE" --ks-key-alias "$$KEYNAME" --ks-pass "pass:$$KEYSTOREPASS"

# Package

_build/%.unsigned-apk: _build/%.unaligned-apk
	$(ANDROID_BUILD_TOOLS)/zipalign -fp 4 "$<" "$@"

APK_EXTRA_FILES = classes.dex assets/special_font.ttf

_build/%.unaligned-apk: $(addprefix _build/,$(APK_EXTRA_FILES)) $(MANIFEST_FILE)
	$(ANDROID_BUILD_TOOLS)/aapt package -f -M $(MANIFEST_FILE) -S $(RES_DIR) \
		-I $(ANDROID_PLATFORM)/android.jar -F "$@" $(AAPT_PACKAGE_FLAGS)
	cd $(@D) && $(ANDROID_BUILD_TOOLS)/aapt add $(@F) $(APK_EXTRA_FILES)

# Copy the special font file into _build because aapt requires relative paths
_build/assets/special_font.ttf: srcs/special_font/result.ttf
	mkdir -p $(@D)
	cp "$<" "$@"

# R.java

GEN_DIR = _build/gen
R_FILE = $(GEN_DIR)/$(subst .,/,$(PACKAGE_NAME))/R.java

$(R_FILE): $(RES_FILES) $(MANIFEST_FILE)
	mkdir -p "$(@D)"
	$(ANDROID_BUILD_TOOLS)/aapt package -f -m -S $(RES_DIR) -J $(GEN_DIR) \
		-M $(MANIFEST_FILE) -I $(ANDROID_PLATFORM)/android.jar

# Compile java classes and build classes.dex

OBJ_DIR = _build/class
# A$B.class files are ignored
# CLASS_FILES = $(JAVA_FILES:$(SRC_DIR)/%.java=$(OBJ_DIR)/%.class) \
# 	$(R_FILE:$(GEN_DIR)/%.java=$(OBJ_DIR)/%.class)

_build/classes.dex: $(JAVA_FILES) $(R_FILE)
	mkdir -p $(OBJ_DIR)
	javac -d $(OBJ_DIR) $(JAVAC_FLAGS) \
		-classpath $(ANDROID_PLATFORM)/android.jar:$(EXTRA_JARS) \
		-sourcepath $(SRC_DIR):$(GEN_DIR) \
		$^
	$(ANDROID_BUILD_TOOLS)/d8 --output $(@D) $(OBJ_DIR)/*/*/* $(subst :, ,$(EXTRA_JARS))

# Font file

FONT_GLYPHS = $(wildcard srcs/special_font/*.svg)

_build/special_font.ttf: srcs/special_font/build.pe $(FONT_GLYPHS)
	fontforge -lang=ff -script $< "$@" $(FONT_GLYPHS)