mirror of
https://github.com/encounter/SDL.git
synced 2025-12-17 00:47:15 +00:00
Removed the need for libSDL2main.a on Android, and separated JNI initialization out for other integrations
This commit is contained in:
@@ -1,88 +1,7 @@
|
||||
/*
|
||||
SDL_android_main.c, placed in the public domain by Sam Lantinga 3/13/14
|
||||
|
||||
As of SDL 2.0.6 this file is no longer necessary.
|
||||
*/
|
||||
|
||||
#include "SDL_config.h"
|
||||
#include "SDL.h"
|
||||
|
||||
#ifdef __ANDROID__
|
||||
|
||||
/* Include the SDL main definition header */
|
||||
#include "SDL_main.h"
|
||||
|
||||
/*******************************************************************************
|
||||
Functions called by JNI
|
||||
*******************************************************************************/
|
||||
#include <jni.h>
|
||||
|
||||
/* Dummy symbol so '-u SDL_main_dummy' forces ld to link in libSDL2main.a */
|
||||
JNIEXPORT int SDL_main_dummy;
|
||||
|
||||
/* Called before SDL_main() to initialize JNI bindings in SDL library */
|
||||
extern void SDL_Android_Init(JNIEnv* env, jclass cls);
|
||||
|
||||
/* This prototype is needed to prevent a warning about the missing prototype for global function below */
|
||||
JNIEXPORT int JNICALL Java_org_libsdl_app_SDLActivity_nativeInit(JNIEnv* env, jclass cls, jobject array);
|
||||
|
||||
/* 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;
|
||||
int len;
|
||||
char** argv;
|
||||
|
||||
/* This interface could expand with ABI negotiation, callbacks, etc. */
|
||||
SDL_Android_Init(env, cls);
|
||||
|
||||
SDL_SetMainReady();
|
||||
|
||||
/* Prepare the arguments. */
|
||||
|
||||
len = (*env)->GetArrayLength(env, array);
|
||||
argv = SDL_stack_alloc(char*, 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]);
|
||||
}
|
||||
SDL_stack_free(argv);
|
||||
/* 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: */
|
||||
|
||||
Reference in New Issue
Block a user