aboutsummaryrefslogtreecommitdiff
path: root/Makefile
blob: 1e384f7e3451e4aac11328385d0e831fcc6a0831 (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
56
57
58
59
60
.POSIX:
.SUFFIXES: .apk .unsigned .aligned

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

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

$(PROJECT).apk: keystore.jks

.aligned.apk:
	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

.unsigned.aligned:
	zipalign -f -p 4 $< $@

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

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

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

$(R): $(MANIFEST) $(RESOURCES)
	aapt package -f -m -S res -M $(MANIFEST) -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