]> Pileus Git - ~andy/csm213a-hw/blob - syc/makefile
Add Android app from Yue
[~andy/csm213a-hw] / syc / makefile
1 -include config.mk
2
3 # Settings
4 PROGRAM ?= sycApp
5 PACKAGE ?= com.example.sycapp
6 KEYFILE ?= ~/.android/android.p12
7 KEYTYPE ?= pkcs12
8 KEYNAME ?= android
9 ANDROID ?= /opt/android-sdk-update-manager/platforms/android-18/android.jar
10 SDKLIB  ?= /opt/android-sdk-update-manager/tools/lib/sdklib.jar
11 TOOLS   ?= /opt/android-sdk-update-manager/build-tools/19.0.1
12
13 # Variables
14 PATH    := $(PATH):$(TOOLS)
15 DIR     := $(subst .,/,$(PACKAGE))
16 RES     := $(wildcard res/*/*.*)
17 SRC     := $(wildcard src/$(DIR)/*.java)
18 GEN     := gen/$(DIR)/R.java
19 OBJ     := obj/$(DIR)/R.class
20 APK     := java -classpath $(SDKLIB) \
21                 com.android.sdklib.build.ApkBuilderMain
22
23 # Targets
24 debug: bin/$(PROGRAM).dbg
25
26 release: bin/$(PROGRAM).apk
27
28 compile: $(OBJ)
29
30 clean:
31         rm -rf bin gen obj
32
33 # ADB targets
34 logcat:
35         adb logcat $(PROGRAM):D AndroidRuntime:E '*:S'
36
37 run: bin/install.stamp
38         adb shell am start -W                 \
39                 -a android.intent.action.MAIN \
40                 -n $(PACKAGE)/.MainActivity
41
42 install bin/install.stamp: bin/$(PROGRAM).dbg
43         adb install -r $+
44         touch bin/install.stamp
45
46 uninstall:
47         adb uninstall $(PACKAGE)
48         rm -f bin/install.stamp
49
50 # Rules
51 %.dbg: %.dex %.res | bin
52         @echo "APK    $@.in"
53         @$(APK) $@.in -f $*.dex -z $*.res
54         @echo "ALIGN  $@"
55         @zipalign -f 4 $@.in $@
56
57 %.apk: %.dex %.res | bin
58         @echo "APKU   $@.in"
59         @$(APK) $@.in -u -f $*.dex -z $*.res
60         @echo "SIGN   $@.in"
61         @jarsigner -storetype $(KEYTYPE)  \
62                    -keystore  $(KEYFILE)  \
63                    $@.in      $(KEYNAME)
64         @echo "ALIGN  $@"
65         @zipalign -f 4 $@.in $@
66
67 %.dex: $(OBJ) makefile | bin
68         @echo "DEX    $@ obj"
69         @dx --dex --output $@ obj
70
71 %.res: AndroidManifest.xml $(RES) | bin
72         @echo "RES    $@"
73         @aapt package -f -m               \
74                 -I $(ANDROID)             \
75                 -M AndroidManifest.xml    \
76                 -S res                    \
77                 -F $*.res
78
79 $(OBJ): $(SRC) $(GEN) makefile | obj
80         @echo "JAVAC  obj/*.class $+"
81         @JARS=$(ANDROID);                 \
82          javac -g                         \
83                 -Xlint:unchecked          \
84                 -Xlint:deprecation        \
85                 -bootclasspath $$JARS     \
86                 -encoding      UTF-8      \
87                 -source        1.5        \
88                 -target        1.5        \
89                 -classpath     obj        \
90                 -d             obj        \
91                 $(filter-out makefile,$+)
92
93 $(GEN): AndroidManifest.xml $(RES) | gen
94         @echo "GEN    $@"
95         @aapt package -f -m               \
96                 -I $(ANDROID)             \
97                 -M AndroidManifest.xml    \
98                 -S res                    \
99                 -J gen
100
101 # Directories
102 bin gen obj:
103         @mkdir -p $@
104
105 # Keep intermediate files
106 .SECONDARY: