--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -380,9 +380,25 @@
 	-include precompiled.h
 )

-add_executable(systemshock
-	${MAC_SRC}
-)
+# Android has no standalone executables (Java loads a shared library via
+# JNI instead), so this is the one part of this file Android needs to
+# override - see android/engine-patches/. Everything else here (sources,
+# dependency discovery, link libraries) is untouched and applies the same
+# way on both platforms. ANDROID_EXTRA_SOURCES (passed in by
+# android/app/build.gradle) is QuestShockActivity's own small native
+# helper (android/app/src/main/cpp/) - not part of engine/ itself.
+if(ANDROID)
+	set(SHOCKOLATE_TARGET main)
+	add_library(${SHOCKOLATE_TARGET} SHARED
+		${MAC_SRC}
+		${ANDROID_EXTRA_SOURCES}
+	)
+else()
+	set(SHOCKOLATE_TARGET systemshock)
+	add_executable(${SHOCKOLATE_TARGET}
+		${MAC_SRC}
+	)
+endif()

 add_library(GAME_LIB ${GAME_SRC})

@@ -391,7 +407,7 @@
 	set(WINDOWS_LIBRARIES "mingw32 -mwindows")
 endif(MINGW)

-target_link_libraries(systemshock
+target_link_libraries(${SHOCKOLATE_TARGET}
 	${WINDOWS_LIBRARIES} # Set it before any linker options! Beware WinMain@16 error!!
 	GAME_LIB
 	UI_LIB
@@ -418,7 +434,10 @@
 	${ALSA_LIBRARIES}
 )

-# Turn on address sanitizing if wanted
-set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/externals/sanitizers/cmake" ${CMAKE_MODULE_PATH})
-find_package(Sanitizers)
-add_sanitizers(systemshock)
+# Turn on address sanitizing if wanted (desktop only - not meaningful for
+# an Android release build)
+if(NOT ANDROID)
+	set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/externals/sanitizers/cmake" ${CMAKE_MODULE_PATH})
+	find_package(Sanitizers)
+	add_sanitizers(${SHOCKOLATE_TARGET})
+endif()
