]> Pileus Git - ~andy/spades/blob - common.mk
Prevent app crash on Empty Send.
[~andy/spades] / common.mk
1 # Settings
2 KEYFILE ?= ~/.android/android.p12
3 KEYTYPE ?= pkcs12
4 KEYNAME ?= android
5 ANDROID ?= /opt/android-sdk-update-manager/platforms/android-23/android.jar
6 SDKLIB  ?= /opt/android-sdk-update-manager/tools/lib/sdklib.jar
7 TOOLS   ?= /opt/android-sdk-update-manager/build-tools/23.0.2
8
9 # Variables
10 PATH    := $(PATH):$(TOOLS)
11 DIR     := $(subst .,/,$(PACKAGE))
12 RES     := $(wildcard res/*/*.*)
13 SRC     := $(wildcard src/*.java src/$(DIR)/*.java)
14 GEN     := gen/$(DIR)/R.java
15 OBJ     := obj/$(DIR)/R.class
16 APK     := java -classpath $(SDKLIB) \
17                 com.android.sdklib.build.ApkBuilderMain
18
19 # Targets
20 debug: bin/$(PROGRAM)-dbg.apk
21
22 release: bin/$(PROGRAM).apk
23
24 compile: $(OBJ)
25
26 clean:
27         rm -rf bin gen obj
28
29 # ADB targets
30 logcat:
31         adb $(ADBFLAGS) logcat $(PROGRAM):D AndroidRuntime:E '*:S'
32
33 run: bin/install.stamp
34         adb $(ADBFLAGS) shell am start -W     \
35                 -a android.intent.action.MAIN \
36                 -n $(PACKAGE)/.$(ACTIVITY)
37
38 install bin/install.stamp: bin/$(PROGRAM)-dbg.apk
39         adb $(ADBFLAGS) install -r $+
40         touch bin/install.stamp
41
42 uninstall:
43         adb $(ADBFLAGS) uninstall $(PACKAGE)
44         rm -f bin/install.stamp
45
46 # Emulators
47 create-avd:
48         android create avd --target android-18 --name virtual
49
50 start-avd:
51         emulator -avd virtual &
52
53 run-avd:
54         $(MAKE) run ADBFLAGS="-s emulator-5554"
55
56 # Graphics targets
57 graphics:
58         git checkout graphics  --    \
59                 'opt/drawable/*.svg' \
60                 'opt/drawable/*.xcf' \
61                 'res/drawable/*.png' \
62                 'res/drawable/*.jpg' \
63                 || true
64         git reset HEAD --            \
65                 'opt/drawable/*.svg' \
66                 'opt/drawable/*.xcf' \
67                 'res/drawable/*.png' \
68                 'res/drawable/*.jpg' \
69                 || true
70
71 convert:
72         for svg in opt/drawable/*.svg; do        \
73                 png=$${svg/svg/png};             \
74                 png=$${png/opt/res};             \
75                 rsvg-convert -w 2048 -h 2048     \
76                         $$svg -o $$png;          \
77                 convert -trim                    \
78                         -resize      '254x254!'  \
79                         -bordercolor '#00000000' \
80                         -border      '1x1'       \
81                         $$png $$png;             \
82         done
83
84 # Rules
85 %-dbg.apk: %.dex %.res | bin
86         @echo "APK    $@.in"
87         @$(APK) $@.in -f $*.dex -z $*.res
88         @echo "ALIGN  $@"
89         @zipalign -f 4 $@.in $@
90
91 %.apk: %.dex %.res | bin
92         @echo "APKU   $@.in"
93         @$(APK) $@.in -u -f $*.dex -z $*.res
94         @echo "SIGN   $@.in"
95         @jarsigner -storetype $(KEYTYPE)  \
96                    -keystore  $(KEYFILE)  \
97                    $@.in      $(KEYNAME)
98         @echo "ALIGN  $@"
99         @zipalign -f 4 $@.in $@
100
101 %.dex: $(OBJ) makefile | bin
102         @echo "DEX    $@"
103         @dx --dex --output $@ obj
104
105 %.res: AndroidManifest.xml $(RES) | bin
106         @echo "RES    $@"
107         @aapt package -f -m               \
108                 -I $(ANDROID)             \
109                 -M AndroidManifest.xml    \
110                 -S res                    \
111                 -F $*.res
112
113 $(OBJ): $(SRC) $(GEN) makefile | obj
114         @echo "JAVAC  obj/*.class"
115         @javac -g                         \
116                 -Xlint:unchecked          \
117                 -Xlint:deprecation        \
118                 -bootclasspath $(ANDROID) \
119                 -encoding      UTF-8      \
120                 -source        1.7        \
121                 -target        1.7        \
122                 -classpath     obj        \
123                 -d             obj        \
124                 $(filter-out makefile,$+)
125
126 $(GEN): AndroidManifest.xml $(RES) | gen
127         @if ! [ -d "res/drawable" ]; then \
128                 echo Please run           \
129                      \'make graphics\';   \
130                 exit 1;                   \
131         fi
132         @echo "GEN    $@"
133         @aapt package -f -m               \
134                 -I $(ANDROID)             \
135                 -M AndroidManifest.xml    \
136                 -S res                    \
137                 -J gen
138
139 # Directories
140 bin gen obj:
141         @mkdir -p $@
142
143 # Keep intermediate files
144 .SECONDARY: