summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/SDL2/src/main/android/SDL_android_main.c
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/SDL2/src/main/android/SDL_android_main.c')
-rw-r--r--3rdparty/SDL2/src/main/android/SDL_android_main.c78
1 files changed, 78 insertions, 0 deletions
diff --git a/3rdparty/SDL2/src/main/android/SDL_android_main.c b/3rdparty/SDL2/src/main/android/SDL_android_main.c
new file mode 100644
index 00000000000..4173bcb1d17
--- /dev/null
+++ b/3rdparty/SDL2/src/main/android/SDL_android_main.c
@@ -0,0 +1,78 @@
+/*
+ SDL_android_main.c, placed in the public domain by Sam Lantinga 3/13/14
+*/
+#include "../../SDL_internal.h"
+
+#ifdef __ANDROID__
+
+/* Include the SDL main definition header */
+#include "SDL_main.h"
+
+/*******************************************************************************
+ Functions called by JNI
+*******************************************************************************/
+#include <jni.h>
+
+/* Called before SDL_main() to initialize JNI bindings in SDL library */
+extern void SDL_Android_Init(JNIEnv* env, jclass cls);
+
+/* Start up the SDL app */
+JNIEXPORT int JNICALL Java_org_libsdl_app_SDLActivity_nativeInit(JNIEnv* env, jclass cls, jobject array)
+{
+ int i;
+ int argc;
+ int status;
+
+ /* This interface could expand with ABI negotiation, callbacks, etc. */
+ SDL_Android_Init(env, cls);
+
+ SDL_SetMainReady();
+
+ /* Prepare the arguments. */
+
+ int len = (*env)->GetArrayLength(env, array);
+ char* argv[1 + len + 1];
+ argc = 0;
+ /* Use the name "app_process" so PHYSFS_platformCalcBaseDir() works.
+ https://bitbucket.org/MartinFelis/love-android-sdl2/issue/23/release-build-crash-on-start
+ */
+ argv[argc++] = SDL_strdup("app_process");
+ for (i = 0; i < len; ++i) {
+ const char* utf;
+ char* arg = NULL;
+ jstring string = (*env)->GetObjectArrayElement(env, array, i);
+ if (string) {
+ utf = (*env)->GetStringUTFChars(env, string, 0);
+ if (utf) {
+ arg = SDL_strdup(utf);
+ (*env)->ReleaseStringUTFChars(env, string, utf);
+ }
+ (*env)->DeleteLocalRef(env, string);
+ }
+ if (!arg) {
+ arg = SDL_strdup("");
+ }
+ argv[argc++] = arg;
+ }
+ argv[argc] = NULL;
+
+
+ /* Run the application. */
+
+ status = SDL_main(argc, argv);
+
+ /* Release the arguments. */
+
+ for (i = 0; i < argc; ++i) {
+ SDL_free(argv[i]);
+ }
+
+ /* Do not issue an exit or the whole application will terminate instead of just the SDL thread */
+ /* exit(status); */
+
+ return status;
+}
+
+#endif /* __ANDROID__ */
+
+/* vi: set ts=4 sw=4 expandtab: */