aboutsummaryrefslogtreecommitdiff
path: root/Makefile
blob: c0a2e70a68b054866d353d5d454613e0f0f556ed (plain) (blame)
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
.POSIX:

PROJECT = helloworld
ANDROIDSDK = /usr/lib/android-sdk
DX = $(ANDROIDSDK)/build-tools/debian/dx
PLATFORM = $(ANDROIDSDK)/platforms/android-23/android.jar
OBJECTS = \
	HelloWorld.class
RESOURCES = \
	res/layout/activity_main.xml
R = helloworld/R.java

# Resources:
# https://www.hanshq.net/command-line-android.html

$(PROJECT).apk: $(PROJECT).aligned.apk keystore.jks
	apksigner sign \
		--ks keystore.jks \
		--ks-key-alias androidkey \
		--ks-pass pass:android \
		--key-pass pass:android \
		--out $@ $<

keystore.jks:
	keytool \
		-genkeypair \
		-keystore $@ \
		-alias androidkey \
		-validity 10000 \
		-keyalg RSA \
		-keysize 4096 \
		-storepass android \
		-keypass android

$(PROJECT).aligned.apk: $(PROJECT).unsigned.apk
	zipalign -f -p 4 $< $@

$(PROJECT).unsigned.apk: dex/classes.dex AndroidManifest.xml
	aapt package -f -F $@ -I $(PLATFORM) -M AndroidManifest.xml -S res dex

dex/classes.dex: $(OBJECTS) AndroidManifest.xml
	mkdir -p dex
	$(DX) --dex --output=$@ $(OBJECTS)

$(OBJECTS): $(OBJECTS:.class=.java) $(R)
	javac -bootclasspath $(PLATFORM) -source 1.7 *.java

$(R): AndroidManifest.xml $(RESOURCES)
	aapt package -f -m -S res -M AndroidManifest.xml -I $(PLATFORM) -J .

clean:
	rm -f $(R) *.java.class *.unsigned.apk *.aligned.apk *.apk.idsig dex/*.dex

distclean: clean
	rm -rf dex/ *.apk keystore.jks