project_files/Android-build/SDL-android-project/jni/SDL/src/main/android/SDL_android_main.cpp
author Xeli
Fri, 16 Sep 2011 18:24:50 +0200
branchhedgeroid
changeset 5934 9f05a0f43003
parent 5389 b3cc5b4099f1
child 6047 10011f051f9c
permissions -rw-r--r--
Exit hedgewars cleanly and return to the frontend with out crashing + fixed error messages "foo" -> HWEngine_Loader
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5335
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
     1
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
     2
/* Include the SDL main definition header */
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
     3
#include "SDL_main.h"
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
     4
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
     5
/*******************************************************************************
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
     6
                 Functions called by JNI
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
     7
*******************************************************************************/
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
     8
#include <jni.h>
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
     9
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
    10
// Called before SDL_main() to initialize JNI bindings in SDL library
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
    11
extern "C" void SDL_Android_Init(JNIEnv* env, jclass cls);
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
    12
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
    13
// Library init
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
    14
extern "C" jint JNI_OnLoad(JavaVM* vm, void* reserved)
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
    15
{
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
    16
    return JNI_VERSION_1_4;
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
    17
}
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
    18
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
    19
// Start up the SDL app
5389
b3cc5b4099f1 Changed package name from org.hedgewars to org.hedgewars.mobile
Xeli
parents: 5353
diff changeset
    20
extern "C" void Java_org_hedgewars_mobile_SDLActivity_nativeInit(JNIEnv* env, jclass cls, jobjectArray strArray)
5335
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
    21
{
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
    22
    /* This interface could expand with ABI negotiation, calbacks, etc. */
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
    23
    SDL_Android_Init(env, cls);
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
    24
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
    25
    //Get the String array from java
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
    26
    int argc = env->GetArrayLength(strArray);
5353
37b0fb82e22c Fixed a fault strcpy
Xeli
parents: 5335
diff changeset
    27
    char *argv[argc];
5335
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
    28
    jstring jstringArgv[argc];
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
    29
    for(int i = 0; i < argc; i++){
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
    30
        jstringArgv[i] = (jstring)env->GetObjectArrayElement(strArray, i);  //get the element
5353
37b0fb82e22c Fixed a fault strcpy
Xeli
parents: 5335
diff changeset
    31
	argv[i] = (char*)malloc(sizeof(char) * env->GetStringLength(jstringArgv[i]));
5335
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
    32
	strcpy(argv[i], env->GetStringUTFChars(jstringArgv[i], JNI_FALSE)); //copy it to a mutable location
5353
37b0fb82e22c Fixed a fault strcpy
Xeli
parents: 5335
diff changeset
    33
	//Don't release memory the JAVA GC will take care of it
37b0fb82e22c Fixed a fault strcpy
Xeli
parents: 5335
diff changeset
    34
        //env->ReleaseStringChars(jstringArgv[i], (jchar*)argv[i]);           
5335
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
    35
    }
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
    36
    
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
    37
    /* Run the application code! */
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
    38
    int status;
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
    39
    status = SDL_main(argc, argv);
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
    40
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
    41
    //Clean up argv
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
    42
    for(int i = 0; i < argc; i++){
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
    43
    }
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
    44
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
    45
    /* We exit here for consistency with other platforms. */
5934
9f05a0f43003 Exit hedgewars cleanly and return to the frontend with out crashing + fixed error messages "foo" -> HWEngine_Loader
Xeli
parents: 5389
diff changeset
    46
    //exit(status); Xeli: Or lets not crash the entire app.....
5335
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
    47
}
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
    48
cd9b7b170fbf more packing name changes
Xeli
parents:
diff changeset
    49
/* vi: set ts=4 sw=4 expandtab: */