.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 all: $(PROJECT).apk $(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) $(OBJECTS) $(PROJECT).unsigned \ $(PROJECT).aligned $(PROJECT).apk.idsig dex/classes.dex distclean: clean rm -rf dex/ *.apk keystore.jks