diff --git a/ion/src/sdl/android/Makefile b/ion/src/sdl/android/Makefile
index 70580f79c..9e5406c94 100644
--- a/ion/src/sdl/android/Makefile
+++ b/ion/src/sdl/android/Makefile
@@ -6,10 +6,59 @@ $(call object_for,ion/src/sdl/shared/main.cpp) : SFLAGS += -DEPSILON_SDL_FULLSCR
LDFLAGS += -ljnigraphics -llog
-ANDROID_LIB_PATH = ion/src/sdl/android/libs
+# If NDK_ABI is not defined, we will re-trigger a build for each avaialble ABI.
+# This is used to build APKs, which needs to embbed a binary for each ABI.
-$(ANDROID_LIB_PATH)/%/libepsilon.so:
-ion/src/sdl/android/libs/%/libepsilon.so:
- $(Q) $(MAKE) MODEL=android NDK_ABI=$* clean
- $(Q) $(MAKE) MODEL=android NDK_ABI=$* epsilon.so
- $(Q) mv epsilon.so $@
+ifdef NDK_ABI
+
+.PHONY: epsilon.apk
+epsilon.apk:
+ echo "To make epsilon.apk, to not define NDK_ABI"
+
+else
+
+# Cross-ABI libepsilon.so
+# This file is loaded is loaded only once, which prevents us from tracking
+# dependencies across ABIs. As a shortcut, we simply force a re-make of
+# libepsilon.so for each ABI.
+
+.PHONY: force_remake
+
+$(BUILD_DIR)/app/libs/%/libepsilon.so: force_remake $$(@D)/.
+ $(Q) echo "MAKE NDK_ABI=$*"
+ $(Q) $(MAKE) NDK_ABI=$* epsilon.so
+ $(Q) cp $(BUILD_DIR)/$*/epsilon.so $@
+
+# Android resources
+# Some android resources needs to be filtered through ImageMagick. Others are
+# simply copied over.
+
+$(BUILD_DIR)/app/res/mipmap/ic_launcher.png: ion/src/sdl/assets/logo.svg | $$(@D)/.
+ @echo "CONVERT $@"
+ $(Q) convert -background "#FFB734" $< $@
+
+$(BUILD_DIR)/app/res/mipmap-v26/ic_launcher_foreground.png: ion/src/sdl/assets/logo.svg | $$(@D)/.
+ @echo "CONVERT $@"
+ $(Q) convert -background none $< -resize 512x512 -gravity center -background none -extent 1024x1024 $@
+
+$(BUILD_DIR)/app/res/%: ion/src/sdl/android/src/res/% $$(@D)/.
+ @echo "COPY $@"
+ $(Q) cp $< $@
+
+NDK_ABIS = arm64-v8a x86_64
+
+epsilon_apk_deps = $(patsubst %,$(BUILD_DIR)/app/libs/%/libepsilon.so,$(NDK_ABIS))
+epsilon_apk_deps += $(subst ion/src/sdl/android/src/res,$(BUILD_DIR)/app/res,$(wildcard ion/src/sdl/android/src/res/*/*))
+epsilon_apk_deps += $(addprefix $(BUILD_DIR)/app/res/,mipmap/ic_launcher.png mipmap-v26/ic_launcher_foreground.png)
+
+.PHONY: epsilon.apk
+epsilon.apk: $(epsilon_apk_deps)
+ @echo "GRADLE ion/src/sdl/android/build.gradle"
+ $(Q) ANDROID_HOME=/usr/local/android gradle -b ion/src/sdl/android/build.gradle assembleRelease
+
+.PHONY: epsilon_run
+epsilon_run: $(epsilon_apk_deps)
+ @echo "GRADLE ion/src/sdl/android/build.gradle"
+ $(Q) ANDROID_HOME=/usr/local/android gradle -b ion/src/sdl/android/build.gradle installDebug
+
+endif
diff --git a/ion/src/sdl/android/build.gradle b/ion/src/sdl/android/build.gradle
index 4ebdcd6c1..e6b8d98ab 100644
--- a/ion/src/sdl/android/build.gradle
+++ b/ion/src/sdl/android/build.gradle
@@ -34,13 +34,13 @@ android {
buildTypes {
release {
minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ proguardFiles getDefaultProguardFile('proguard-android.txt')
}
}
sourceSets{
main {
manifest.srcFile 'src/AndroidManifest.xml'
- res.srcDir 'src/res'
+ res.srcDir BUILD_DIR + '/res'
java.srcDir 'src'
jniLibs.srcDir BUILD_DIR + '/libs'
assets.srcDir '../assets'
diff --git a/ion/src/sdl/android/src/res/mipmap-v26/ic_launcher.xml b/ion/src/sdl/android/src/res/mipmap-v26/ic_launcher.xml
new file mode 100644
index 000000000..166130012
--- /dev/null
+++ b/ion/src/sdl/android/src/res/mipmap-v26/ic_launcher.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/ion/src/sdl/android/src/res/values/colors.xml b/ion/src/sdl/android/src/res/values/colors.xml
new file mode 100644
index 000000000..d51632f1e
--- /dev/null
+++ b/ion/src/sdl/android/src/res/values/colors.xml
@@ -0,0 +1,5 @@
+
+
+ #FFB734
+ #F7F7F7
+
diff --git a/ion/src/sdl/android/src/res/values/strings.xml b/ion/src/sdl/android/src/res/values/strings.xml
new file mode 100644
index 000000000..eca07fe9d
--- /dev/null
+++ b/ion/src/sdl/android/src/res/values/strings.xml
@@ -0,0 +1,3 @@
+
+ NumWorks
+
diff --git a/ion/src/sdl/assets/logo.svg b/ion/src/sdl/assets/logo.svg
new file mode 100644
index 000000000..ef4c71e7e
--- /dev/null
+++ b/ion/src/sdl/assets/logo.svg
@@ -0,0 +1,3 @@
+
diff --git a/scripts/targets.sdl.android.mak b/scripts/targets.sdl.android.mak
deleted file mode 100644
index 5e815d57e..000000000
--- a/scripts/targets.sdl.android.mak
+++ /dev/null
@@ -1,22 +0,0 @@
-# Makefile is loaded for a single architecture at once. If NDK_ABI is not
-# defined, we assume we want to build all of them. But in that case, we cannot
-# track per-ABI dependencies. So as a shortcut, we force a re-make of each ABI.
-
-.PHONY: force_rebuild_libepsilon
-
-$(BUILD_DIR)/app/libs/%/libepsilon.so: force_rebuild_libepsilon $$(@D)/.
- $(Q) echo "MAKE NDK_ABI=$*"
- $(Q) $(MAKE) NDK_ABI=$* epsilon.so
- $(Q) cp $(BUILD_DIR)/$*/epsilon.so $@
-
-NDK_ABIS = arm64-v8a x86_64
-
-.PHONY: epsilon.apk
-epsilon.apk: $(patsubst %,$(BUILD_DIR)/app/libs/%/libepsilon.so,$(NDK_ABIS))
- @echo "GRADLE ion/src/sdl/android/build.gradle"
- $(Q) ANDROID_HOME=/usr/local/android gradle -b ion/src/sdl/android/build.gradle assembleRelease
-
-.PHONY: epsilon_run
-epsilon_run: $(patsubst %,$(BUILD_DIR)/app/libs/%/libepsilon.so,$(NDK_ABIS))
- @echo "GRADLE ion/src/sdl/android/build.gradle"
- $(Q) ANDROID_HOME=/usr/local/android gradle -b ion/src/sdl/android/build.gradle installDebug