From 606b0cda7f08e9b8589423fbfa69648e326309ff Mon Sep 17 00:00:00 2001
From: Sam Lantinga <slouken@libsdl.org>
Date: Thu, 6 Jan 2011 16:11:21 -0800
Subject: [PATCH] Build the SDL library as a shared object on Android, so it
 will work correctly with SDL_image and SDL_ttf.

---
 Android.mk                                    |  41 ++
 Makefile.android                              |  58 --
 README.android                                |  43 +-
 android/config.cfg.example                    |   8 -
 android/project/AndroidManifest.xml           |  15 -
 android/project/build.properties              |  17 -
 android/project/build.xml                     |  67 --
 android/project/default.properties            |  11 -
 android/project/jni/Android.mk                |  18 -
 android/project/jni/lesson05.c                | 574 ------------------
 android/project/local.properties              |  10 -
 android/project/res/drawable-hdpi/icon.png    | Bin 4147 -> 0 bytes
 android/project/res/drawable-ldpi/icon.png    | Bin 1723 -> 0 bytes
 android/project/res/drawable-mdpi/icon.png    | Bin 2574 -> 0 bytes
 android/project/res/layout/main.xml           |  13 -
 android/project/res/values/strings.xml        |   4 -
 .../src/org/libsdl/app/SDLActivity.java       | 388 ------------
 include/SDL_config_android.h                  |   2 +-
 .../SDL_android.cpp                           | 164 +++--
 src/main/android/SDL_android_main.cpp         |  30 +
 20 files changed, 178 insertions(+), 1285 deletions(-)
 create mode 100755 Android.mk
 delete mode 100755 Makefile.android
 delete mode 100644 android/config.cfg.example
 delete mode 100644 android/project/AndroidManifest.xml
 delete mode 100644 android/project/build.properties
 delete mode 100644 android/project/build.xml
 delete mode 100644 android/project/default.properties
 delete mode 100644 android/project/jni/Android.mk
 delete mode 100644 android/project/jni/lesson05.c
 delete mode 100644 android/project/local.properties
 delete mode 100644 android/project/res/drawable-hdpi/icon.png
 delete mode 100644 android/project/res/drawable-ldpi/icon.png
 delete mode 100644 android/project/res/drawable-mdpi/icon.png
 delete mode 100644 android/project/res/layout/main.xml
 delete mode 100644 android/project/res/values/strings.xml
 delete mode 100644 android/project/src/org/libsdl/app/SDLActivity.java
 rename android/project/jni/android-support.cpp => src/SDL_android.cpp (74%)
 create mode 100644 src/main/android/SDL_android_main.cpp

diff --git a/Android.mk b/Android.mk
new file mode 100755
index 00000000..12f534de
--- /dev/null
+++ b/Android.mk
@@ -0,0 +1,41 @@
+LOCAL_PATH := $(call my-dir)
+
+###########################
+#
+# SDL shared library
+#
+###########################
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := SDL
+
+LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
+
+LOCAL_SRC_FILES := src/SDL_android.cpp \
+	$(subst $(LOCAL_PATH)/,, \
+	$(wildcard $(LOCAL_PATH)/src/*.c) \
+	$(wildcard $(LOCAL_PATH)/src/audio/*.c) \
+	$(wildcard $(LOCAL_PATH)/src/cpuinfo/*.c) \
+	$(wildcard $(LOCAL_PATH)/src/events/*.c) \
+	$(wildcard $(LOCAL_PATH)/src/file/*.c) \
+	$(wildcard $(LOCAL_PATH)/src/joystick/*.c) \
+	$(wildcard $(LOCAL_PATH)/src/haptic/*.c) \
+	$(wildcard $(LOCAL_PATH)/src/stdlib/*.c) \
+	$(wildcard $(LOCAL_PATH)/src/thread/*.c) \
+	$(wildcard $(LOCAL_PATH)/src/timer/*.c) \
+	$(wildcard $(LOCAL_PATH)/src/video/*.c) \
+	$(wildcard $(LOCAL_PATH)/src/power/*.c) \
+	$(wildcard $(LOCAL_PATH)/src/audio/android/*.c) \
+	$(wildcard $(LOCAL_PATH)/src/audio/dummy/*.c) \
+	$(wildcard $(LOCAL_PATH)/src/video/android/*.c) \
+	$(wildcard $(LOCAL_PATH)/src/joystick/android/*.c) \
+	$(wildcard $(LOCAL_PATH)/src/haptic/dummy/*.c) \
+	$(wildcard $(LOCAL_PATH)/src/atomic/dummy/*.c) \
+	$(wildcard $(LOCAL_PATH)/src/thread/pthread/*.c) \
+	$(wildcard $(LOCAL_PATH)/src/timer/unix/*.c) \
+	$(wildcard $(LOCAL_PATH)/src/loadso/dlopen/*.c))
+
+LOCAL_LDLIBS := -ldl -lGLESv1_CM -llog
+
+include $(BUILD_SHARED_LIBRARY)
diff --git a/Makefile.android b/Makefile.android
deleted file mode 100755
index 6666b910..00000000
--- a/Makefile.android
+++ /dev/null
@@ -1,58 +0,0 @@
-# Makefile to build the SDL library
-
-include ./android/config.cfg #get ANDROID_NDK, ANDROID_NDK_HOST
-
-# For NDK R4
-TOOLS_PATH=$(ANDROID_NDK)/build/prebuilt/$(ANDROID_NDK_HOST)/arm-eabi-4.2.1/bin
-ANDROID_INCLUDES = -I$(ANDROID_NDK)/build/platforms/android-4/arch-arm/usr/include 
-
-# For NDK R5
-#TOOLS_PATH=$(ANDROID_NDK)/toolchains/arm-eabi-4.4.0/prebuilt/$(ANDROID_NDK_HOST)/bin
-#ANDROID_INCLUDES = -I$(ANDROID_NDK)/platforms/android-4/arch-arm/usr/include 
-
-INCLUDE = -I./include
-CFLAGS  = -g -O2 -fno-short-enums $(INCLUDE) $(ANDROID_INCLUDES) -DANDROID -DANDROID_NDK -static
-
-AR	= $(TOOLS_PATH)/arm-eabi-ar
-RANLIB	= $(TOOLS_PATH)/arm-eabi-ranlib
-CC = $(TOOLS_PATH)/arm-eabi-gcc
-
-
-CONFIG_H = include/SDL_config.h
-TARGET  = libSDL.a
-SOURCES = \
-	src/*.c \
-	src/audio/*.c \
-	src/cpuinfo/*.c \
-	src/events/*.c \
-	src/file/*.c \
-	src/joystick/*.c \
-	src/haptic/*.c \
-	src/stdlib/*.c \
-	src/thread/*.c \
-	src/timer/*.c \
-	src/video/*.c \
-	src/power/*.c \
-	src/audio/android/*.c \
-	src/audio/dummy/*.c \
-	src/video/android/*.c \
-	src/joystick/android/*.c \
-	src/haptic/dummy/*.c \
-	src/atomic/dummy/*.c \
-	src/thread/pthread/*.c \
-	src/timer/unix/*.c \
-	src/loadso/dummy/*.c \
-
-OBJECTS = $(shell echo $(SOURCES) | sed -e 's,\.c,\.o,g')
-
-all: $(TARGET)
-
-$(TARGET): $(CONFIG_H) $(OBJECTS)
-	$(AR) crv $@ $^
-	$(RANLIB) $@
-
-$(CONFIG_H):
-	cp $(CONFIG_H).default $(CONFIG_H)
-
-clean:
-	rm -f $(TARGET) $(OBJECTS)
diff --git a/README.android b/README.android
index 23b13e68..dade7eea 100644
--- a/README.android
+++ b/README.android
@@ -2,7 +2,8 @@
 Simple DirectMedia Layer for Android
 ================================================================================
 
-Requirements: Android NDK r4 or later
+Requirements: Android SDK and Android NDK r4 or later
+http://developer.android.com/
 
 ================================================================================
  How the port works
@@ -16,26 +17,44 @@ Java project, along with some C support code that communicates with Java
 - This eventually produces a standard Android .apk package
 
 
+================================================================================
+ Building an app
+================================================================================
 
+Instructions:
+1. Copy the android-project directory wherever you want your Android project to go
+2. Move this SDL directory into the <project>/jni directory
+3. Place your application source files in the <project>/jni/src directory
+4. Edit <project>/jni/src/Android.mk to include your source files
+5. Run 'ndk-build' (a script provided by the NDK). This compiles the C source
 
+If you want to use the Eclipse IDE, skip to the Eclipse section below.
+
+6. Edit <project>/local.properties to point to the Android SDK directory
+7. Run 'ant debug' in android/project. This compiles the .java and eventually 
+creates a .apk with the native code embedded
+8. 'ant install' will push the apk to the device or emulator (if connected)
 
 
 ================================================================================
- Building an app
+ Using Eclipse
 ================================================================================
 
-Instructions:
-1. Edit android/config.cfg to point to the location of the NDK
-2. Run 'make -f Makefile.android'. If all goes well, libsdl.a should be created
-3. Place your application source files in android/project/jni
-4. Edit the Android.mk to include your source files
-5. Run 'ndk-build' (a script provided by the NDK). This compiles the C source
-6. Edit project/local.properties to point to the SDK directory
-6. Run 'ant debug' in android/project. This compiles the .java and eventually 
-creates a .apk with the C source embedded
-7. 'ant install' will push the apk to the device or emulator (if connected)
+NEED CONTENT
 
 
+================================================================================
+ Loading files
+================================================================================
+
+NEED CONTENT
+
+
+================================================================================
+ Troubleshooting
+================================================================================
+
+NEED CONTENT
 
 
 ================================================================================
diff --git a/android/config.cfg.example b/android/config.cfg.example
deleted file mode 100644
index a9bde985..00000000
--- a/android/config.cfg.example
+++ /dev/null
@@ -1,8 +0,0 @@
-# This file sets up paths needed to find the NDK build tools.
-# Edit it appropriately for your configuration and save it as "config.cfg".
-
-# This should be the full path to the Android NDK
-ANDROID_NDK := /Users/hercules/eclipse/android-ndk-r5
-
-# This should be "linux-x86" for linux, "darwin-x86" for mac
-ANDROID_NDK_HOST := darwin-x86
diff --git a/android/project/AndroidManifest.xml b/android/project/AndroidManifest.xml
deleted file mode 100644
index 18223258..00000000
--- a/android/project/AndroidManifest.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-      package="org.libsdl.app"
-      android:versionCode="1"
-      android:versionName="1.0">
-    <application android:label="@string/app_name" android:icon="@drawable/icon">
-        <activity android:name="SDLActivity"
-                  android:label="@string/app_name">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
-        </activity>
-    </application>
-</manifest> 
diff --git a/android/project/build.properties b/android/project/build.properties
deleted file mode 100644
index edc7f230..00000000
--- a/android/project/build.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-# This file is used to override default values used by the Ant build system.
-# 
-# This file must be checked in Version Control Systems, as it is
-# integral to the build system of your project.
-
-# This file is only used by the Ant script.
-
-# You can use this to override default values such as
-#  'source.dir' for the location of your java source folder and
-#  'out.dir' for the location of your output folder.
-
-# You can also use it define how the release builds are signed by declaring
-# the following properties:
-#  'key.store' for the location of your keystore and
-#  'key.alias' for the name of the key to use.
-# The password will be asked during the build when you use the 'release' target.
-
diff --git a/android/project/build.xml b/android/project/build.xml
deleted file mode 100644
index 37b37680..00000000
--- a/android/project/build.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project name="SDLApp" default="help">
-
-    <!-- The local.properties file is created and updated by the 'android' tool.
-         It contains the path to the SDK. It should *NOT* be checked in in Version
-         Control Systems. -->
-    <property file="local.properties" />
-
-    <!-- The build.properties file can be created by you and is never touched
-         by the 'android' tool. This is the place to change some of the default property values
-         used by the Ant rules.
-         Here are some properties you may want to change/update:
-
-         application.package
-             the name of your application package as defined in the manifest. Used by the
-             'uninstall' rule.
-         source.dir
-             the name of the source directory. Default is 'src'.
-         out.dir
-             the name of the output directory. Default is 'bin'.
-
-         Properties related to the SDK location or the project target should be updated
-          using the 'android' tool with the 'update' action.
-
-         This file is an integral part of the build system for your application and
-         should be checked in in Version Control Systems.
-
-         -->
-    <property file="build.properties" />
-
-    <!-- The default.properties file is created and updated by the 'android' tool, as well
-         as ADT.
-         This file is an integral part of the build system for your application and
-         should be checked in in Version Control Systems. -->
-    <property file="default.properties" />
-
-    <!-- Custom Android task to deal with the project target, and import the proper rules.
-         This requires ant 1.6.0 or above. -->
-    <path id="android.antlibs">
-        <pathelement path="${sdk.dir}/tools/lib/anttasks.jar" />
-        <pathelement path="${sdk.dir}/tools/lib/sdklib.jar" />
-        <pathelement path="${sdk.dir}/tools/lib/androidprefs.jar" />
-        <pathelement path="${sdk.dir}/tools/lib/apkbuilder.jar" />
-        <pathelement path="${sdk.dir}/tools/lib/jarutils.jar" />
-    </path>
-
-    <taskdef name="setup"
-        classname="com.android.ant.SetupTask"
-        classpathref="android.antlibs" />
-
-    <!-- Execute the Android Setup task that will setup some properties specific to the target,
-         and import the build rules files.
-
-         The rules file is imported from
-            <SDK>/platforms/<target_platform>/templates/android_rules.xml
-
-         To customize some build steps for your project:
-         - copy the content of the main node <project> from android_rules.xml
-         - paste it in this build.xml below the <setup /> task.
-         - disable the import by changing the setup task below to <setup import="false" />
-
-         This will ensure that the properties are setup correctly but that your customized
-         build steps are used.
-    -->
-    <setup />
-
-</project>
diff --git a/android/project/default.properties b/android/project/default.properties
deleted file mode 100644
index 9d79b12c..00000000
--- a/android/project/default.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-# This file is automatically generated by Android Tools.
-# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
-# 
-# This file must be checked in Version Control Systems.
-# 
-# To customize properties used by the Ant build system use,
-# "build.properties", and override values to adapt the script to your
-# project structure.
-
-# Project target.
-target=android-4
diff --git a/android/project/jni/Android.mk b/android/project/jni/Android.mk
deleted file mode 100644
index 585f5f34..00000000
--- a/android/project/jni/Android.mk
+++ /dev/null
@@ -1,18 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := sdlapp
-SDL := ../../../
-
-LOCAL_CFLAGS := -DANDROID_NDK \
-                -DDISABLE_IMPORTGL \
-                -I$(SDL)/include
-
-LOCAL_SRC_FILES := \
-    android-support.cpp \
-    lesson05.c \
-
-LOCAL_LDLIBS := -lGLESv1_CM -ldl -llog -lSDL -lgcc -L$(SDL)
-
-include $(BUILD_SHARED_LIBRARY)
diff --git a/android/project/jni/lesson05.c b/android/project/jni/lesson05.c
deleted file mode 100644
index 01560dfd..00000000
--- a/android/project/jni/lesson05.c
+++ /dev/null
@@ -1,574 +0,0 @@
-/*
- * This code was created by Jeff Molofee '99 
- * (ported to Linux/SDL by Ti Leggett '01)
- *
- * If you've found this code useful, please let me know.
- *
- * Visit Jeff at http://nehe.gamedev.net/
- * 
- * or for port-specific comments, questions, bugreports etc. 
- * email to leggett@eecs.tulane.edu
- */
- 
-#include <stdio.h>
-#include <stdlib.h>
-#include <math.h>
-
-#include <signal.h>
-
-#include <android/log.h>
-
-
-#ifdef ANDROID
-#include <GLES/gl.h>
-#else
-#include <GL/gl.h>
-#include <GL/glu.h>
-#endif
-#include "SDL.h"
-
-/* screen width, height, and bit depth */
-#define SCREEN_WIDTH  320
-#define SCREEN_HEIGHT 430
-#define SCREEN_BPP     16
-
-/* Define our booleans */
-#define TRUE  1
-#define FALSE 0
-
-/* This is our SDL surface */
-SDL_Surface *surface;
-
-int rotation = 0;
-
-
-/**************************************
-	gluperspective implementation
-**************************************/
-void gluPerspective(double fovy, double aspect, double zNear, double zFar){
-	glMatrixMode(GL_PROJECTION);
-	glLoadIdentity();
-	double xmin, xmax, ymin, ymax;
-	ymax = zNear * tan(fovy * M_PI / 360.0);
-	ymin = -ymax;
-	xmin = ymin * aspect;
-	xmax = ymax * aspect;
-	glFrustumf(xmin, xmax, ymin, ymax, zNear, zFar);
-}
-
-
-/**************************************
-	  glulookat implementation
-**************************************/
-void gluLookAt(GLfloat eyex, GLfloat eyey, GLfloat eyez,
-          GLfloat centerx, GLfloat centery, GLfloat centerz,
-          GLfloat upx, GLfloat upy, GLfloat upz)
-{
-    GLfloat m[16];
-    GLfloat x[3], y[3], z[3];
-    GLfloat mag;
-    
-    /* Make rotation matrix */
-    
-    /* Z vector */
-    z[0] = eyex - centerx;
-    z[1] = eyey - centery;
-    z[2] = eyez - centerz;
-    mag = sqrt(z[0] * z[0] + z[1] * z[1] + z[2] * z[2]);
-    if (mag) {          /* mpichler, 19950515 */
-        z[0] /= mag;
-        z[1] /= mag;
-        z[2] /= mag;
-    }
-    
-    /* Y vector */
-    y[0] = upx;
-    y[1] = upy;
-    y[2] = upz;
-    
-    /* X vector = Y cross Z */
-    x[0] = y[1] * z[2] - y[2] * z[1];
-    x[1] = -y[0] * z[2] + y[2] * z[0];
-    x[2] = y[0] * z[1] - y[1] * z[0];
-    
-    /* Recompute Y = Z cross X */
-    y[0] = z[1] * x[2] - z[2] * x[1];
-    y[1] = -z[0] * x[2] + z[2] * x[0];
-    y[2] = z[0] * x[1] - z[1] * x[0];
-    
-    /* mpichler, 19950515 */
-    /* cross product gives area of parallelogram, which is < 1.0 for
-     * non-perpendicular unit-length vectors; so normalize x, y here
-     */
-    
-    mag = sqrt(x[0] * x[0] + x[1] * x[1] + x[2] * x[2]);
-    if (mag) {
-        x[0] /= mag;
-        x[1] /= mag;
-        x[2] /= mag;
-    }
-    
-    mag = sqrt(y[0] * y[0] + y[1] * y[1] + y[2] * y[2]);
-    if (mag) {
-        y[0] /= mag;
-        y[1] /= mag;
-        y[2] /= mag;
-    }
-    
-#define M(row,col)  m[col*4+row]
-    M(0, 0) = x[0];
-    M(0, 1) = x[1];
-    M(0, 2) = x[2];
-    M(0, 3) = 0.0;
-    M(1, 0) = y[0];
-    M(1, 1) = y[1];
-    M(1, 2) = y[2];
-    M(1, 3) = 0.0;
-    M(2, 0) = z[0];
-    M(2, 1) = z[1];
-    M(2, 2) = z[2];
-    M(2, 3) = 0.0;
-    M(3, 0) = 0.0;
-    M(3, 1) = 0.0;
-    M(3, 2) = 0.0;
-    M(3, 3) = 1.0;
-#undef M
-    glMultMatrixf(m);
-    
-    /* Translate Eye to Origin */
-    glTranslatef(-eyex, -eyey, -eyez);
-    
-}
-
-
-
-
-
-/* function to release/destroy our resources and restoring the old desktop */
-void Quit( int returnCode )
-{
-    /* clean up the window */
-    SDL_Quit( );
-
-    /* and exit appropriately */
-    exit( returnCode );
-}
-
-/* function to reset our viewport after a window resize */
-int resizeWindow( int width, int height )
-{
-    /* Height / width ration */
-    GLfloat ratio;
- 
-    /* Protect against a divide by zero */
-   if ( height == 0 )
-	height = 1;
-
-    ratio = ( GLfloat )width / ( GLfloat )height;
-
-    /* Setup our viewport. */
-    glViewport( 0, 0, ( GLsizei )width, ( GLsizei )height );
-
-    /* change to the projection matrix and set our viewing volume. */
-    glMatrixMode( GL_PROJECTION );
-    glLoadIdentity( );
-
-    /* Set our perspective */
-    gluPerspective( 45.0f, ratio, 0.1f, 100.0f );
-
-    /* Make sure we're chaning the model view and not the projection */
-    glMatrixMode( GL_MODELVIEW );
-
-    /* Reset The View */
-    glLoadIdentity( );
-
-    return( TRUE );
-}
-
-/* function to handle key press events */
-void handleKeyPress( SDL_keysym *keysym )
-{
-    switch ( keysym->sym )
-	{
-	case SDLK_ESCAPE:
-	    /* ESC key was pressed */
-	    Quit( 0 );
-	    break;
-	case SDLK_F1:
-	    /* F1 key was pressed
-	     * this toggles fullscreen mode
-	     */
-	    SDL_WM_ToggleFullScreen( surface );
-	    break;
-    case SDLK_LEFT:
-        rotation -= 30;
-        break;
-
-    case SDLK_RIGHT:
-        rotation += 30;
-        break;
-        
-	default:
-	    break;
-	}
-
-    __android_log_print(ANDROID_LOG_INFO, "SDL","Keycode: %d, %d, %d\n", keysym->sym, SDLK_LEFT, SDLK_RIGHT);
-
-    return;
-}
-
-/* general OpenGL initialization function */
-int initGL( GLvoid )
-{
-
-    /* Enable smooth shading */
-    glShadeModel( GL_SMOOTH );
-
-    /* Set the background black */
-    glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );
-
-    /* Depth buffer setup */
-    //glClearDepth( 1.0f );
-
-    /* Enables Depth Testing */
-    glEnable( GL_DEPTH_TEST );
-
-    /* The Type Of Depth Test To Do */
-    glDepthFunc( GL_LEQUAL );
-
-    /* Really Nice Perspective Calculations */
-    glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST );
-
-    return( TRUE );
-}
-
-/* Here goes our drawing code */
-int drawGLScene( GLvoid )
-{
-      
-	static int Frames = 0;
-	static int T0 = 0;
-	
-    glViewport(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
-
-    glClearColorx(0,0,0,255);
-    glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
-
-    glMatrixMode(GL_PROJECTION);
-    glLoadIdentity();
-    gluPerspective(45, (float)SCREEN_WIDTH / SCREEN_HEIGHT, 0.5f, 150);
-
-    glMatrixMode(GL_MODELVIEW);
-
-    glLoadIdentity();
-
-	//Camera
-	gluLookAt(0,0,5, 0,0,0, 0,1,0);
-			
-	//Draw a triangle
-	//glRotatef(iRot, 0, 1, 0);
-
-	glRotatef( rotation, 0.0f, 1.0f, 0.0f );
-
-
-	glEnableClientState (GL_VERTEX_ARRAY);
-	glEnableClientState (GL_COLOR_ARRAY);
-	
-	/* Rotate The Triangle On The Y axis ( NEW ) */
-    //glRotatef( Frames % 360, 0.0f, 1.0f, 0.0f );
-
-    /* GLES variant of drawing a triangle */
-    const GLfloat triVertices[][9] = {
-      {     /* Front Triangle */
-	 0.0f,  1.0f,  0.0f,               /* Top Of Triangle               */
-	-1.0f, -1.0f,  1.0f,               /* Left Of Triangle              */
-	 1.0f, -1.0f,  1.0f                /* Right Of Triangle             */
-      }, {  /* Right Triangle */
-	 0.0f,  1.0f,  0.0f,               /* Top Of Triangle               */
-	 1.0f, -1.0f,  1.0f,               /* Left Of Triangle              */
-	 1.0f, -1.0f, -1.0f                /* Right Of Triangle             */
-      }, {  /* Back Triangle */
-	 0.0f,  1.0f,  0.0f,               /* Top Of Triangle               */
-	 1.0f, -1.0f, -1.0f,               /* Left Of Triangle              */
-	-1.0f, -1.0f, -1.0f                /* Right Of Triangle             */
-      }, {  /* Left Triangle */
-	 0.0f,  1.0f,  0.0f,               /* Top Of Triangle               */
-	-1.0f, -1.0f, -1.0f,               /* Left Of Triangle              */
-	-1.0f, -1.0f,  1.0f                /* Right Of Triangle             */
-      }
-    };
-
-    /* unlike GL, GLES does not support RGB. We have to use RGBA instead */
-    const GLfloat triColors[][12] = {
-      {     /* Front triangle */
-        1.0f, 0.0f, 0.0f, 1.0f,            /* Red                           */
-	0.0f, 1.0f, 0.0f, 1.0f,            /* Green                         */
-	0.0f, 0.0f, 1.0f, 1.0f             /* Blue                          */
-      }, {  /* Right triangle */
-        1.0f, 0.0f, 0.0f, 1.0f,            /* Red                           */
-	0.0f, 0.0f, 1.0f, 1.0f,            /* Blue                          */
-	0.0f, 1.0f, 0.0f, 1.0f             /* Green                         */
-      }, {  /* Back triangle */
-        1.0f, 0.0f, 0.0f, 1.0f,            /* Red                           */
-	0.0f, 1.0f, 0.0f, 1.0f,            /* Green                         */
-	0.0f, 0.0f, 1.0f, 1.0f             /* Blue                          */
-      }, {  /* Left triangle */
-        1.0f, 0.0f, 0.0f, 1.0f,            /* Red                           */
-	0.0f, 0.0f, 1.0f, 1.0f,            /* Blue                          */
-	0.0f, 1.0f, 0.0f, 1.0f             /* Green                         */
-      }
-    };
-
-    glEnableClientState(GL_COLOR_ARRAY);
-
-    int tri=0;
-
-    /* Loop through all Triangles */
-    for(tri=0;tri<sizeof(triVertices)/(9*sizeof(GLfloat));tri++) 
-    {
-      glVertexPointer(3, GL_FLOAT, 0, triVertices[tri]);
-      glColorPointer(4, GL_FLOAT, 0, triColors[tri]);
-      
-      glDrawArrays(GL_TRIANGLE_STRIP, 0, 3);
-    }
-		
-    //__android_log_print(ANDROID_LOG_INFO, "SDL", "render %d", Frames++);
-
-    /* Draw it to the screen */
-    SDL_GL_SwapBuffers( );
-
-    /* Gather our frames per second */
-    Frames++;
-    {
-	GLint t = SDL_GetTicks();
-	if (t - T0 >= 5000) {
-	    GLfloat seconds = (t - T0) / 1000.0;
-	    GLfloat fps = Frames / seconds;
-	    __android_log_print(ANDROID_LOG_INFO, "SDL","%d frames in %g seconds = %g FPS\n", Frames, seconds, fps);
-	    T0 = t;
-	    Frames = 0;
-	}
-    }
-
-    rotation++;
-
-    return( TRUE );
-}
-
-
-struct
-{
-    SDL_AudioSpec spec;
-    Uint8 *sound;               /* Pointer to wave data */
-    Uint32 soundlen;            /* Length of wave data */
-    int soundpos;               /* Current play position */
-} wave;
-
-void SDLCALL
-fillerup(void *unused, Uint8 * stream, int len)
-{
-    __android_log_print(ANDROID_LOG_INFO, "SDL","FILLERUP\n");
-    
-    Uint8 *waveptr;
-    int waveleft;
-
-    /* Set up the pointers */
-    waveptr = wave.sound + wave.soundpos;
-    waveleft = wave.soundlen - wave.soundpos;
-
-    /* Go! */
-    while (waveleft <= len) {
-        SDL_memcpy(stream, waveptr, waveleft);
-        stream += waveleft;
-        len -= waveleft;
-        waveptr = wave.sound;
-        waveleft = wave.soundlen;
-        wave.soundpos = 0;
-    }
-    SDL_memcpy(stream, waveptr, len);
-    wave.soundpos += len;
-}
-
-void testAudio(){
-
-    const char *file = "/sdcard/sample.wav";
-
-    /* Load the SDL library */
-    if (SDL_Init(SDL_INIT_AUDIO) < 0) {
-        __android_log_print(ANDROID_LOG_INFO, "SDL","Couldn't initialize SDL Audio: %s\n", SDL_GetError());
-        return;
-    }else{
-        __android_log_print(ANDROID_LOG_INFO, "SDL","Init audio ok\n");
-    }
-
-    /* Load the wave file into memory */
-    if (SDL_LoadWAV(file, &wave.spec, &wave.sound, &wave.soundlen) == NULL) {
-        __android_log_print(ANDROID_LOG_INFO, "SDL", "Couldn't load %s: %s\n", file, SDL_GetError());
-        return;
-    }
-
-    wave.spec.callback = fillerup;
-
-    __android_log_print(ANDROID_LOG_INFO, "SDL","Loaded: %d\n", wave.soundlen);
-
-
-    /* Initialize fillerup() variables */
-    if (SDL_OpenAudio(&wave.spec, NULL) < 0) {
-        __android_log_print(ANDROID_LOG_INFO, "SDL", "Couldn't open audio: %s\n", SDL_GetError());
-        SDL_FreeWAV(wave.sound);
-        return;
-    }
-
-     __android_log_print(ANDROID_LOG_INFO, "SDL","Using audio driver: %s\n", SDL_GetCurrentAudioDriver());
-
-    /* Let the audio run */
-    SDL_PauseAudio(0);
-
-     __android_log_print(ANDROID_LOG_INFO, "SDL","Playing\n");
-    
-    while (SDL_GetAudioStatus() == SDL_AUDIO_PLAYING){
-         //__android_log_print(ANDROID_LOG_INFO, "SDL","Still playing\n");
-        SDL_Delay(100);
-    }
-
-     __android_log_print(ANDROID_LOG_INFO, "SDL","Closing down\n");
-
-    /* Clean up on signal */
-    SDL_CloseAudio();
-    SDL_FreeWAV(wave.sound);
-}
-
-int SDL_main( int argc, char **argv )
-{
-
-	__android_log_print(ANDROID_LOG_INFO, "SDL","entry\n");
-
-    /* Flags to pass to SDL_SetVideoMode */
-    int videoFlags;
-    /* main loop variable */
-    int done = FALSE;
-    /* used to collect events */
-    SDL_Event event;
-    /* this holds some info about our display */
-    const SDL_VideoInfo *videoInfo;
-    /* whether or not the window is active */
-    int isActive = TRUE;
-
-    /* initialize SDL */
-    if ( SDL_Init( SDL_INIT_VIDEO ) < 0 )
-	{
-	    __android_log_print(ANDROID_LOG_INFO, "SDL", "Video initialization failed: %s\n",
-		     SDL_GetError( ) );
-	    Quit( 1 );
-	}
-
-    /* Fetch the video info */
-    videoInfo = SDL_GetVideoInfo( );
-
-    if ( !videoInfo )
-	{
-	    __android_log_print(ANDROID_LOG_INFO, "SDL", "Video query failed: %s\n",
-		     SDL_GetError( ) );
-	    Quit( 1 );
-	}
-
-    /* the flags to pass to SDL_SetVideoMode */
-    videoFlags  = SDL_OPENGL;          /* Enable OpenGL in SDL */
-    videoFlags |= SDL_GL_DOUBLEBUFFER; /* Enable double buffering */
-    videoFlags |= SDL_HWPALETTE;       /* Store the palette in hardware */
-    videoFlags |= SDL_RESIZABLE;       /* Enable window resizing */
-
-    /* This checks to see if surfaces can be stored in memory */
-    if ( videoInfo->hw_available )
-	videoFlags |= SDL_HWSURFACE;
-    else
-	videoFlags |= SDL_SWSURFACE;
-
-    /* This checks if hardware blits can be done */
-    if ( videoInfo->blit_hw )
-	videoFlags |= SDL_HWACCEL;
-
-    /* Sets up OpenGL double buffering */
-    SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
-
-    /* get a SDL surface */
-    surface = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP,
-				videoFlags );
-
-    /* Verify there is a surface */
-    if ( !surface )
-	{
-	    __android_log_print(ANDROID_LOG_INFO, "SDL",  "Video mode set failed: %s\n", SDL_GetError( ) );
-	    Quit( 1 );
-	}
-
-	__android_log_print(ANDROID_LOG_INFO, "SDL","Made a video mode!\n");
-
-    /* initialize OpenGL */
-    initGL( );
-
-    /* resize the initial window */
-    resizeWindow( SCREEN_WIDTH, SCREEN_HEIGHT );
-
-
-    //testAudio();
-
-
-    /* wait for events */ 
-    while ( !done )
-	{
-	    /* handle the events in the queue */
-
-	    while ( SDL_PollEvent( &event ) )
-		{
-		    switch( event.type )
-			{
-			case SDL_ACTIVEEVENT:
-			    /* Something's happend with our focus
-			     * If we lost focus or we are iconified, we
-			     * shouldn't draw the screen
-			     */
-			    if ( event.active.gain == 0 )
-				isActive = FALSE;
-			    else
-				isActive = TRUE;
-			    break;			    
-			case SDL_VIDEORESIZE:
-			    /* handle resize event */
-			    surface = SDL_SetVideoMode( event.resize.w,
-							event.resize.h,
-							16, videoFlags );
-			    if ( !surface )
-				{
-				    __android_log_print(ANDROID_LOG_INFO, "SDL","Could not get a surface after resize: %s\n", SDL_GetError( ) );
-				    Quit( 1 );
-				}
-			    resizeWindow( event.resize.w, event.resize.h );
-			    break;
-			case SDL_KEYDOWN:
-			    /* handle key presses */
-			    handleKeyPress( &event.key.keysym );
-			    break;
-			case SDL_QUIT:
-			    /* handle quit requests */
-			    done = TRUE;
-			    __android_log_print(ANDROID_LOG_INFO, "SDL","App is shutting down\n");
-			    break;
-			default:
-			    break;
-			}
-		}
-
-	    /* draw the scene */
-	    if ( isActive )
-		drawGLScene( );
-	}
-
-    /* clean ourselves up and exit */
-    Quit( 0 );
-
-    /* Should never get here */
-    return( 0 );
-}
-
-
diff --git a/android/project/local.properties b/android/project/local.properties
deleted file mode 100644
index 27accedc..00000000
--- a/android/project/local.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-# This file is automatically generated by Android Tools.
-# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
-# 
-# This file must *NOT* be checked in Version Control Systems,
-# as it contains information specific to your local configuration.
-
-# location of the SDK. This is only used by Ant
-# For customization when using a Version Control System, please read the
-# header note.
-sdk.dir=/home/paul/Projects/gsoc/sdk/android-sdk-linux_86
diff --git a/android/project/res/drawable-hdpi/icon.png b/android/project/res/drawable-hdpi/icon.png
deleted file mode 100644
index 8074c4c571b8cd19e27f4ee5545df367420686d7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4147
zcmV-35X|q1P)<h;3K|Lk000e1NJLTq002k;002k`1^@s6RqeA!00004b3#c}2nYxW
zd<bNS00009a7bBm000W`000W`0Ya=am;e9(9CSrkbW?9;ba!ELWdK2BZ(?O2Mrm?o
zcW-iQb09-gGzPNMpa1|5tw}^dRCt{2oOy6v)qTf5=iKFO(zBjyS+Xo+%Qj{)!7Q$W
z6KBFe9H5z!Cet*NNr0A2LK&8HhBBEZoyic|G);$p5}K_o1!mG|N`@p9l1vB;J7GzU
z0UH||Z?dh;mfn-zdhc2K$9>OwvMs$Q8_8nISM!^>PxsujeDCl4&hPxrxkp%Qc^^|l
zp6LqAcf3zf1H4aA1Gv-O6ha)ktct9Y+VA@N^9i;p0H%6v>ZJZYQ`zEa396z-gi{r_
zDz)D=vgRv62GCVeRjK{15j7<m5mZl(2gHEX4d3YbCqHS|8EZwgD)Wt;2qJ2{6v75Y
zvGsww4t^CV0F}B_(~=~n8|H-&l88hPhy!ic-_?C@ysdn7po;H83+4{Ko1~nL|K`DO
z9KIFE0%ag1(kL?(4~+<_k&^&YU;FXK@3ppjpEO#}zYf(17Np}aJ`(=&TVH<hHX=<b
z5s{?r6ht)YVl@ql0gJj;%S|0!N#3izr4TSYFun;`M5H+(6ZYt&XojGg?MdgxMnbQ(
zfHCh)hNKka#wsC@21bc&QApGuPFaI$20D(BQsC5V9{>V@v6|2nafFX6W7z2j1_T0a
zLyT3pGTubf1lB5)32>bl0*BflrA!$|_(<V4RW3$KB75pFc@&<Kfa&v`Fw!w=tK8Iy
zHVRiH=xw{4ws<c}SHKc=Lkreetg(}xDTiaMY5!xcI{O}^bumUCOUp@~3ss5EmUUcv
z?hlDO8H^6mIwbC7xc1y1)0w)EKovQ@ZYL8PjkvLDn_L>WD2)iJIfV}37=<tz>ZKAC
zSe3boYtQ=;o0i>)RtBvsI#iT{0!oF1VFeW`jDjF2Q4aE?{pGCAd>o8Kg#neIh*AMY
zLl{;F!vLiem7s*x0<9FKAd6LoPz3~G32P+F+cuGOJ5gcC@pU_?C<K#zxM?|P#!;*h
z<yaeeoHc_VQSY*5(bXKxzCv5Fm-fVJhKt+z;Idmt`HNZ7dLb2^=kZ;C$5{Cwn^xRG
zZ~I3Hb%|X0Ab~D%ara-4jxS|#%LP2Y?;eW55jL;+ds_T1et+Qmyx#v41QKfv%7pZ!
zH}KI_U!xctA=G7zRgr=;7(HxFvnR-Ds^N`rOa*J?)FjYl+7i8Vq}KApuDd8yhFQ7r
z3QEBkovrIw+xcf~8~8bAWiDey=A&d1tN5d3Ut-sh$0-EENIaAY=t!N%MN2<V-{|kj
zmHW7A&3CA%0<RDJl#i{xoA%_{#M}($cm63cw~Y_4xPwra**EeWu8d=hIiYUT$?@$v
z9fImJ5!Qk=6B4Ql%hDet?zeE^lFyO!+gaYW2}i`RR&#i43orNm8^uZvtiyuXa<K6H
z-tY3(;G+m3!AdNGf!v!svHLE9uuNC_0^aC<m>2fmix7g2<OKw(NJSO!Wh<G)O12OD
zk{9;hOR+MF#G6#FX=OtB>)SUaQO$NS07~H)#fn!Q<}KQWtX}wW`g2>cMld+`7Rxgq
zChaey66SG560JhO66zA!;sK1cWa2AG$9k~VQY??6bOmJsw9@3uL*z;WWa7(Nm{^TA
zilc?y#N9O3LcTo2c)6d}SQl-v-pE4^#wb=s(RxaE28f3FQW(yp$ulG9{KcQ7r>7mQ
zE!HYxUYex~*7IinL+l*>HR*UaD;HkQhkL(5I@UwN%Wz504M^d!ylo>ANvKPF_TvA<
zkugG5;F6x}$s~J8cnev->_(Ic7%lGQgUi3n#XVo36lUpcS<B*<^O3@1)uNA43bS0?
za~<a`{v?j@Ske9wVqO|oCZ?^w;|LChBf!5j-{=N?H4Q8SE&@KYZ+HK&Jq|$-TC1x+
zjI}`!SgWno%32kg6Ve1hV0CD17-|~^%35o!4y{$8K9;8rtqlWhby$7YT5EMR?_>9s
z)ympRr7}@|6WF)Ae;D{owN1;aZS<z%U`85L3`Wtq;{;U>R50al9h~?-WhbtKK%bDd
zhML131oi1Bu1&Qb$Cp199LJ#;j5d|FhW8_i4KO1OI>}J^p2DfreMSVGY9aFlr&90t
zyI2FvxQiKMFviSQeP$Ixh#70qj5O%I+O_I2t2XHWqmh2!1~tHpN3k<ugQ5k@C@Ok7
z+FQ2}+B9a|#m)q5Ej;-ypgId^I<pxY>A4n=1iHj?`@c<~3q<khQ_D+AiSPS(o;PhA
z`n^Sv1#1+erM+mQs!_q26XUurrBaD_Jl?i>^X6_Q$AqTDjBU`|!y<&lkqL|m5tG(b
z8a!z&j^m(|;?SW(l*?tZ*{m2H9d&3jqBtXh>O-5e4Qp-W*a5=2NL&Oi62BUM)>zE3
zbSHb>aU3d@3cGggA`C-PsT9^)oy}%dHCaO~nwOrm5E54=aD<PxWdc(q&_xc9ze;;z
zHLgsOaNCGEX{@j)Q^Ht%Tpp3F>g(&HR4S23Oa#-a^=}w%g?ZP-1iq8PSjE8jYaGZu
z$I<dGMoPOWg+~}HypAJW1P(3!5;{{KV0qg|Sem{J-)X5D@d@oNm&=TgkK?+NnkmGD
z-_Q{A#FMr-B8Dqt^yOY;>)?YN8he?F9>)<bj*Q_57qEn;3|Nj9cQTmY%C_N$=t`~Q
z;w4{XMcd^l6D<P?Ay7&Y1OdM9A8)vuc8KPXAd4&GNZ}FcLfta4#gi!lo#*+!e`fp8
z&(OAv=d=)a+Um*{SaelE1QL&!lK>2d$G6a*zm0XB*Rf&gZAjq(8l@CUDSY1tB#!i>
zW$VfG%#SYSiZ}<yUM62T%y}K3#sZ-(5_4L}RSxpRzOQpA_YyHTjW5$2?;2XGa7B!d
ztoRyIcszIDAF1eZgm9|eQuBwy|4Kd>;)>pHA`qlfDTEYQEwN6>NNEp+uxuqx({Fgr
zjI@!4xRc?vk^9+~eU|mzH__dCDI=xb{Cd}4bELS9xRaS!*FXMwtMR-RR%SLMh0Cjl
zencr8#Su<4(%}$yGVB<Bgt*hjhnC%m<GA#mwVG#MdW;e0Y1~wZEwtgvc)kC3T3hfY
zSMoH5`B0b0#8+|6>U-HX{18v=yPH*+%^Vtknc>2A;%-~DrYFx^3XfuVgvZ{#1tA==
zm3>IzAM2{3Iv_d1XG{P6^tN3|PkJMnjs&CWN7%7_CmjoVakUhsa&dMv==2~^ri?&x
zVdv*rnfVyM+I1^Kg*S=23mR@+0T9BWFZUu~@toA8d)fw6be=`Yb6DSX6D?jB%2YT~
z*aHjtIOozfMhA!Jd*?u5_n!SnX>vX`=Ti-1HA<HWRGx~;;frK-Ys%y;GE<2slXx;!
zx1GgM4s$rf_|Ve7;o7tR9cwMW*zuR_9{CMPZ!v@(j)WyE5}b8zA|%>4RiE>eI3vTn
zz+>Ccf0HX6Ans-ebOB>RJST-Cyr#4XAk+mAlJgdQnoE{^iIN)OcYFSpgJUmXtl@tT
z-^ZuUeSj5hSFrQwqX>~EtZ*{>Gi8Bu9_|o06oNtaXP?E936!a@DsvS*tsB@fa6kEA
z5GkjwmH?EgpiG&itsB_Tb1NxtF<S=iW9N}aFjnEobhIC__!e&t|CIIJH?ueUG}@}#
z*5IbJ2TmcPSR2JoRU8pxF#iT)<-^sjbdq(QH?VQp^>nvxh_s@9KYX1Sttf?AlI~)z
zT=6Y7ulx=}<8Scr_UqU-_z)5gPo%050PsbM*ZLno;_-ow&k?FZJtYmb2hPA$LkP)8
z=^d0Q6PImh6Y|QT?{grxj)S=uBKvY2EQUbm@ns9^yKiP~$DcD)c$5Em`zDSScH%iH
zVov&m=cMo`1tYwA=!a}vb_ef_{)Q2?FUqn>BR$6phXQRv^1%=YfyE-F$AR4Q?9D!f
zCzB^^#td~4u&l~l#rp2QLfe3+_ub9@+|x+m;=2(sQ`s%gO|j$XBb>A7Q(Uy<Ms~mR
z)sr@Bsv6HJK@x#68l_8!W4+tria4%_*Y>dipiMw%igcweV#Cr~SP);q>w`bxts_4}
znKHg?X==JDkQl3Y>Ckt%`s{n?Nq-1<xam62X*|eake2F>Fw5~%Mq$CAsi-`yu_bKm
zxs#QdE7&vgJD%M84f4SNzSDv)S|V?|$!d5a#lhT5>>YWE4NGqa9-fbmV$=<!@JM<c
zC&X_omO$rmWt??g*K=X#7Z@$=;a9tEXDI(Vu9G}wXJ-C-A`g4(;Dem+-U&z%S^l~N
zQ((^hAY(O|#LDVE#%LB51-uk1+Ae2(_f1IQ@xp<7*qeP4fxvebRLei*VsS*AT)B@e
zWA_nla&2xtIp+k0rc6h2Eh(>)@k&32kdEYetna>=j@0>V8+wRsL;po!3ivVwh<9tn
z2S<1u9DAAQ>x1Sn=fk`)At|quvleV($B|#Kap_lB-F^*yV=wZ{9baUu(uXfokr95^
zA*!*W=5a>$2Ps`<ZO3O>-F^+qRQT<luhKvM2V5DC;>^{*cN>vipT*4!r#p%{(#I7s
z0NN94*q?ib$KJjfDI_sjHNdmEVp5wB&j54O#VoFqBwy)gfA$%)4d_X4q${<K?$%4`
zAKx-J)i?#riIMhXoFj#uJh}JljFtNkLb7$>L9Xom2R3xy&ZBSNgt4a1d7K^CDWa9r
zVb-_52m}Vp)`9;ZSKd#|U4ZYj5}Gp49{4utST|=c`~(#>KHF6}CCov<Oc3fKBc;8#
zGIi`Nx+1|?<uF?Y9^~S#8%cQ`XcHd0KbtaZ1f3cTu8gxFwmkaSt`43|v19n>1iHYw
zt{bWo)A@yF2$~c(nR$rSAaFQ$(Wh{vkG1AlutDMw=mM`C`T=X&|Ad9fb5Od}ROt1z
z<iuFelzP>OpczHqrb4Jo^rSCiW#&o(m7jFamnrsTpQb;*h4o8r#$aZ}2RaT-x2u^^
z%u@YyIv$U^u~@9(XGbSwU@fk6SikH>j+D1jQrYTKGJpW%vUT{!d}7THI5&Sa?~MKy
zS0-mvMl+BOcroEJ@hN!2H_?coTEJ5Q<;Nd?yx;eIj4{$$E2?YUO|NtNPJ-PdDf;s}
zab;}Mz0kbOI}5*w@3gROcnl#5)wQnEhDBfn!Xhy`u>C}*E~vWpO^HS)FC>8^umI=+
z&H;LW6w#;EF`}vQd_9Muru`KnQVPI9U?(sD<bWa&SZmeEGH6DFY6WD0w}C;Rh4&^w
zc_LD>)&Dg-0j3#(!fNKVZ_GoYH{la~d*1Yh$TI-TL>mI4vpNb@sU2=IZ8vL%AXUx0
zz{K0|nK(yizLHaeW#ZhRfQXoK^}1$<rbM${EMT&_)(%*j&)QQ%O^fOeSPGdq*yOYb
xs*zGFL~-IVT`+%1s&@qImmziC^|Zdw{{iC%_e>=$#1{Yn002ovPDHLkV1n#w+^+xt

diff --git a/android/project/res/drawable-ldpi/icon.png b/android/project/res/drawable-ldpi/icon.png
deleted file mode 100644
index 1095584ec21f71cd0afc9e0993aa2209671b590c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1723
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
Rn%e*X002ovPDHLkV1g`*Fem^3

diff --git a/android/project/res/drawable-mdpi/icon.png b/android/project/res/drawable-mdpi/icon.png
deleted file mode 100644
index a07c69fa5a0f4da5d5efe96eea12a543154dbab6..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2574
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

diff --git a/android/project/res/layout/main.xml b/android/project/res/layout/main.xml
deleted file mode 100644
index 123c4b6e..00000000
--- a/android/project/res/layout/main.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:orientation="vertical"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent"
-    >
-<TextView  
-    android:layout_width="fill_parent" 
-    android:layout_height="wrap_content" 
-    android:text="Hello World, SDLActivity"
-    />
-</LinearLayout>
-
diff --git a/android/project/res/values/strings.xml b/android/project/res/values/strings.xml
deleted file mode 100644
index 17e33264..00000000
--- a/android/project/res/values/strings.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <string name="app_name">SDLActivity</string>
-</resources>
diff --git a/android/project/src/org/libsdl/app/SDLActivity.java b/android/project/src/org/libsdl/app/SDLActivity.java
deleted file mode 100644
index 07d750e8..00000000
--- a/android/project/src/org/libsdl/app/SDLActivity.java
+++ /dev/null
@@ -1,388 +0,0 @@
-package org.libsdl.app;
-
-import javax.microedition.khronos.egl.EGLConfig;
-import javax.microedition.khronos.opengles.GL10;
-import javax.microedition.khronos.egl.*;
-
-import android.app.*;
-import android.content.*;
-import android.view.*;
-import android.os.*;
-import android.util.Log;
-import android.graphics.*;
-import android.text.method.*;
-import android.text.*;
-import android.media.*;
-import android.hardware.*;
-import android.content.*;
-
-import java.lang.*;
-
-
-/**
-    SDL Activity
-*/
-public class SDLActivity extends Activity {
-
-    //Main components
-    private static SDLActivity mSingleton;
-    private static SDLSurface mSurface;
-
-    //Audio
-    private static AudioTrack mAudioTrack;
-    private static boolean bAudioIsEnabled;
-
-    //Sensors
-    private static boolean bAccelIsEnabled;
-
-    //feature IDs. Must match up on the C side as well.
-    private static int FEATURE_AUDIO = 1;
-    private static int FEATURE_ACCEL = 2;
-
-    //Load the .so
-    static {
-        System.loadLibrary("sdlapp");
-    }
-
-    //Setup
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        
-        //So we can call stuff from static callbacks
-        mSingleton = this;
-
-        //Set up the surface
-        mSurface = new SDLSurface(getApplication());
-        setContentView(mSurface);
-        SurfaceHolder holder = mSurface.getHolder();
-        holder.setType(SurfaceHolder.SURFACE_TYPE_GPU);
-        
-    }
-
-    //Audio
-    public static boolean initAudio(){        
-
-        //blah. Hardcoded things are bad. FIXME when we have more sound stuff
-        //working properly. 
-        mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
-                    11025,
-                    AudioFormat.CHANNEL_CONFIGURATION_MONO,
-                    AudioFormat.ENCODING_PCM_8BIT,
-                    2048,
-                    AudioTrack.MODE_STREAM);   
-        bAudioIsEnabled = true;     
-        return true;
-    }
-
-    //Accel
-    public static boolean initAccel(){
-        mSurface.enableSensor(Sensor.TYPE_ACCELEROMETER, true);
-        bAccelIsEnabled = true;
-        return true;
-    }
-    
-    public static boolean closeAccel(){
-        mSurface.enableSensor(Sensor.TYPE_ACCELEROMETER, false);
-        bAccelIsEnabled = false;
-        return true;
-    }
-    
-
-    //Events
-    protected void onPause() {
-        super.onPause();
-    }
-
-    protected void onResume() {
-        super.onResume();
-    }
-
-    
-
-
-
-    //C functions we call
-    public static native void nativeInit();
-    public static native void nativeQuit();
-    public static native void nativeSetScreenSize(int width, int height);
-    public static native void onNativeKeyDown(int keycode);
-    public static native void onNativeKeyUp(int keycode);
-    public static native void onNativeTouch(int action, float x, 
-                                            float y, float p);
-    public static native void onNativeResize(int x, int y, int format);
-    public static native void onNativeAccel(float x, float y, float z);
-
-
-
-    //Java functions called from C
-    private static void createGLContext(){
-        mSurface.initEGL();
-    }
-
-    public static void flipBuffers(){
-        mSurface.flipEGL();
-    }
-
-    public static void updateAudio(byte [] buf){
-    
-        if(mAudioTrack == null){
-            return;
-        }
-        
-        mAudioTrack.write(buf, 0, buf.length);
-        mAudioTrack.play();
-        
-        Log.v("SDL","Played some audio");
-    }
-
-    public static void enableFeature(int featureid, int enabled){
-         Log.v("SDL","Feature " + featureid + " = " + enabled);
-
-        //Yuck. This is all horribly inelegent. If it gets to more than a few
-        //'features' I'll rip this out and make something nicer, I promise :)
-        if(featureid == FEATURE_AUDIO){
-            if(enabled == 1){
-                initAudio();
-            }else{
-                //We don't have one of these yet...
-                //closeAudio(); 
-            }
-        }
-
-        else if(featureid == FEATURE_ACCEL){
-            if(enabled == 1){
-                initAccel();
-            }else{
-                closeAccel();
-            }
-        }
-    }
-
-
-
-
-
-    
-    
-}
-
-/**
-    Simple nativeInit() runnable
-*/
-class SDLRunner implements Runnable{
-    public void run(){
-        //SDLActivity.initAudio();
-        
-        //Runs SDL_main()
-        SDLActivity.nativeInit();
-
-        Log.v("SDL","SDL thread terminated");
-    }
-}
-
-
-/**
-    SDLSurface. This is what we draw on, so we need to know when it's created
-    in order to do anything useful. 
-
-    Because of this, that's where we set up the SDL thread
-*/
-class SDLSurface extends SurfaceView implements SurfaceHolder.Callback, 
-    View.OnKeyListener, View.OnTouchListener, SensorEventListener  {
-
-    //This is what SDL runs in. It invokes SDL_main(), eventually
-    private Thread mSDLThread;    
-    
-    //EGL private objects
-    private EGLContext  mEGLContext;
-    private EGLSurface  mEGLSurface;
-    private EGLDisplay  mEGLDisplay;
-
-    //Sensors
-    private static SensorManager mSensorManager;
-
-    //Startup    
-    public SDLSurface(Context context) {
-        super(context);
-        getHolder().addCallback(this); 
-    
-        setFocusable(true);
-        setFocusableInTouchMode(true);
-        requestFocus();
-        setOnKeyListener(this); 
-        setOnTouchListener(this);   
-        
-        mSensorManager = (SensorManager)context.getSystemService("sensor");  
-    }
-
-    //Called when we have a valid drawing surface
-    public void surfaceCreated(SurfaceHolder holder) {
-        Log.v("SDL","Surface created"); 
-
-        int width = getWidth();
-        int height = getHeight();
-
-        //Set the width and height variables in C before we start SDL so we have
-        //it available on init
-        SDLActivity.nativeSetScreenSize(width, height);
-
-        //Now start up the C app thread
-        mSDLThread = new Thread(new SDLRunner(), "SDLThread"); 
-		mSDLThread.start();       
-    }
-
-    //Called when we lose the surface
-    public void surfaceDestroyed(SurfaceHolder holder) {
-        Log.v("SDL","Surface destroyed");
-        
-        SDLActivity.nativeQuit();
-
-        //Now wait for the SDL thread to quit
-        try{
-            mSDLThread.wait();
-        }catch(Exception e){
-            Log.v("SDL","Problem stopping thread: " + e);
-        }
-    }
-
-    //Called when the surface is resized
-    public void surfaceChanged(SurfaceHolder holder, int format, 
-                                int width, int height) {
-        Log.v("SDL","Surface resized");
-        
-        SDLActivity.onNativeResize(width, height, format);
-    }
-
-    //unused
-    public void onDraw(Canvas canvas) {}
-
-    
-    //EGL functions
-    public boolean initEGL(){
-        Log.v("SDL","Starting up");
-
-        try{
-
-            EGL10 egl = (EGL10)EGLContext.getEGL();
-
-            EGLDisplay dpy = egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY);
-
-            int[] version = new int[2];
-            egl.eglInitialize(dpy, version);
-
-            int[] configSpec = {
-                    //EGL10.EGL_DEPTH_SIZE,   16,
-                    EGL10.EGL_NONE
-            };
-            EGLConfig[] configs = new EGLConfig[1];
-            int[] num_config = new int[1];
-            egl.eglChooseConfig(dpy, configSpec, configs, 1, num_config);
-            EGLConfig config = configs[0];
-
-            EGLContext ctx = egl.eglCreateContext(dpy, config, EGL10.EGL_NO_CONTEXT, null);
-
-            EGLSurface surface = egl.eglCreateWindowSurface(dpy, config, this, null);
-
-            egl.eglMakeCurrent(dpy, surface, surface, ctx);
-
-            mEGLContext = ctx;
-            mEGLDisplay = dpy;
-            mEGLSurface = surface;
-            
-            
-        }catch(Exception e){
-            Log.v("SDL", e + "");
-            for(StackTraceElement s : e.getStackTrace()){
-                Log.v("SDL", s.toString());
-            }
-        }
-        Log.v("SDL","Done making!");
-
-        return true;
-    }
-
-    //EGL buffer flip
-    public void flipEGL(){      
-        try{
-        
-            EGL10 egl = (EGL10)EGLContext.getEGL();
-            GL10 gl = (GL10)mEGLContext.getGL();
-
-            egl.eglWaitNative(EGL10.EGL_NATIVE_RENDERABLE, null);
-
-            //drawing here
-
-            egl.eglWaitGL();
-
-            egl.eglSwapBuffers(mEGLDisplay, mEGLSurface);
-
-            
-        }catch(Exception e){
-            Log.v("SDL", "flipEGL(): " + e);
-
-            for(StackTraceElement s : e.getStackTrace()){
-                Log.v("SDL", s.toString());
-            }
-        }
-    }
-
-
-  
-    //Key events
-    public boolean onKey(View  v, int keyCode, KeyEvent event){
-
-        if(event.getAction() == KeyEvent.ACTION_DOWN){
-            SDLActivity.onNativeKeyDown(keyCode);
-            return true;
-        }
-        
-        else if(event.getAction() == KeyEvent.ACTION_UP){
-            SDLActivity.onNativeKeyUp(keyCode);
-            return true;
-        }
-        
-        return false;
-    }
-
-    //Touch events
-    public boolean onTouch(View v, MotionEvent event){
-    
-        int action = event.getAction();
-        float x = event.getX();
-        float y = event.getY();
-        float p = event.getPressure();
-
-        //TODO: Anything else we need to pass?        
-        SDLActivity.onNativeTouch(action, x, y, p);
-        return true;
-    }
-
-    //Sensor events
-    public void enableSensor(int sensortype, boolean enabled){
-        //TODO: This uses getDefaultSensor - what if we have >1 accels?
-        if(enabled){
-            mSensorManager.registerListener(this, 
-                            mSensorManager.getDefaultSensor(sensortype), 
-                            SensorManager.SENSOR_DELAY_GAME, null);
-        }else{
-            mSensorManager.unregisterListener(this, 
-                            mSensorManager.getDefaultSensor(sensortype));
-        }
-    }
-    
-    public void onAccuracyChanged(Sensor sensor, int accuracy){
-        //TODO
-    }
-
-    public void onSensorChanged(SensorEvent event){
-        if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){
-            SDLActivity.onNativeAccel(  event.values[0],
-                                        event.values[1],
-                                        event.values[2] );
-        }
-    }
-
-
-}
-
-
diff --git a/include/SDL_config_android.h b/include/SDL_config_android.h
index 389eef9f..e13182d8 100755
--- a/include/SDL_config_android.h
+++ b/include/SDL_config_android.h
@@ -127,7 +127,7 @@ typedef unsigned int size_t;
 #define SDL_HAPTIC_DUMMY	1
 
 /* Enable various shared object loading systems */
-#define SDL_LOADSO_DUMMY	1
+#define SDL_LOADSO_DLOPEN	1
 
 /* Enable various threading systems */
 #define SDL_THREAD_PTHREAD	1
diff --git a/android/project/jni/android-support.cpp b/src/SDL_android.cpp
similarity index 74%
rename from android/project/jni/android-support.cpp
rename to src/SDL_android.cpp
index 5f73f2b9..de76a22d 100644
--- a/android/project/jni/android-support.cpp
+++ b/src/SDL_android.cpp
@@ -1,31 +1,39 @@
+/*
+    SDL - Simple DirectMedia Layer
+    Copyright (C) 1997-2010 Sam Lantinga
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    Sam Lantinga
+    slouken@libsdl.org
+*/
+#include "SDL_config.h"
+
 /*******************************************************************************
  This file links the Java side of Android with libsdl
 *******************************************************************************/
 #include <jni.h>
-#include <sys/time.h>
-#include <time.h>
 #include <android/log.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <math.h>
-#include <pthread.h>
-
-#define DEBUG
 
 
 /*******************************************************************************
                                Globals
 *******************************************************************************/
-static long _getTime(void){
-	struct timeval  now;
-	gettimeofday(&now, NULL);
-	return (long)(now.tv_sec*1000 + now.tv_usec/1000);
-}
-
+JavaVM* mVM = NULL;
 JNIEnv* mEnv = NULL;
 JNIEnv* mAudioThreadEnv = NULL; //See the note below for why this is necessary
-JavaVM* mVM = NULL;
 
 //Main activity
 jclass mActivityInstance;
@@ -36,7 +44,6 @@ jmethodID midFlipBuffers;
 jmethodID midEnableFeature;
 jmethodID midUpdateAudio;
 
-extern "C" int SDL_main(int argc, char *argv[]);
 extern "C" int Android_OnKeyDown(int keycode);
 extern "C" int Android_OnKeyUp(int keycode);
 extern "C" void Android_SetScreenResolution(int width, int height);
@@ -57,21 +64,22 @@ float fLastAccelerometer[3];
 
 /*******************************************************************************
                  Functions called by JNI
-*******************************************************************************/	
-
-//Library init
-extern "C" jint JNI_OnLoad(JavaVM* vm, void* reserved){
+*******************************************************************************/
 
-    JNIEnv* env = NULL;
-    jint result = -1;
+// Library init
+extern "C" jint JNI_OnLoad(JavaVM* vm, void* reserved)
+{
+    mVM = vm;
 
-    if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
-        return result;
-    }
+    return JNI_VERSION_1_4;
+}
 
+// Called before SDL_main() to initialize JNI bindings
+extern "C" void SDL_Android_Init(JNIEnv* env)
+{
     mEnv = env;
 
-    __android_log_print(ANDROID_LOG_INFO, "SDL", "JNI: OnLoad");
+    __android_log_print(ANDROID_LOG_INFO, "SDL", "SDL_Android_Init()");
 
     jclass cls = mEnv->FindClass ("org/libsdl/app/SDLActivity"); 
     mActivityInstance = cls;
@@ -81,62 +89,41 @@ extern "C" jint JNI_OnLoad(JavaVM* vm, void* reserved){
     midUpdateAudio = mEnv->GetStaticMethodID(cls,"updateAudio","([B)V");
 
     if(!midCreateGLContext || !midFlipBuffers || !midEnableFeature ||
-        !midUpdateAudio){
+        !midUpdateAudio) {
         __android_log_print(ANDROID_LOG_INFO, "SDL", "SDL: Bad mids\n");
-    }else{
+    } else {
 #ifdef DEBUG
         __android_log_print(ANDROID_LOG_INFO, "SDL", "SDL: Good mids\n");
 #endif
     }
-    
-    return JNI_VERSION_1_4;
-}
-
-//Start up the SDL app
-extern "C" void Java_org_libsdl_app_SDLActivity_nativeInit( JNIEnv* env, 
-                                                                jobject obj ){ 
-                                                                   
-	__android_log_print(ANDROID_LOG_INFO, "SDL", "SDL: Native Init");
-
-	mEnv = env;
-	bRenderingEnabled = true;
-
-	Android_EnableFeature(FEATURE_ACCEL, true);
-
-    char *argv[2];
-    argv[0] = strdup("SDL_app");
-    argv[1] = NULL;
-    SDL_main(1, argv);
 }
 
-//Keydown
+// Keydown
 extern "C" void Java_org_libsdl_app_SDLActivity_onNativeKeyDown(JNIEnv* env, 
-               jobject obj, jint keycode){
-    
+               jobject obj, jint keycode)
+{
     int r = Android_OnKeyDown(keycode);
 #ifdef DEBUG
     __android_log_print(ANDROID_LOG_INFO, "SDL", 
                         "SDL: native key down %d, %d\n", keycode, r);
 #endif
-                        
 }
 
-//Keyup
+// Keyup
 extern "C" void Java_org_libsdl_app_SDLActivity_onNativeKeyUp(JNIEnv* env, 
-               jobject obj, jint keycode){
-    
+               jobject obj, jint keycode)
+{
     int r = Android_OnKeyUp(keycode);
 #ifdef DEBUG
     __android_log_print(ANDROID_LOG_INFO, "SDL", 
                         "SDL: native key up %d, %d\n", keycode, r);
 #endif
-                        
 }
 
-//Touch
+// Touch
 extern "C" void Java_org_libsdl_app_SDLActivity_onNativeTouch(JNIEnv* env, 
-               jobject obj, jint action, jfloat x, jfloat y, jfloat p){
-
+               jobject obj, jint action, jfloat x, jfloat y, jfloat p)
+{
 #ifdef DEBUG
     __android_log_print(ANDROID_LOG_INFO, "SDL", 
                         "SDL: native touch event %d @ %f/%f, pressure %f\n", 
@@ -144,42 +131,40 @@ extern "C" void Java_org_libsdl_app_SDLActivity_onNativeTouch(JNIEnv* env,
 #endif
 
     //TODO: Pass this off to the SDL multitouch stuff
-                        
 }
 
-//Quit
+// Quit
 extern "C" void Java_org_libsdl_app_SDLActivity_nativeQuit( JNIEnv*  env, 
-                                                                jobject obj ){    
-
-    //Stop rendering as we're no longer in the foreground
-	bRenderingEnabled = false;
+                                                                jobject obj )
+{    
+    // Stop rendering as we're no longer in the foreground
+    bRenderingEnabled = false;
 
-    //Inject a SDL_QUIT event
-    int r = SDL_SendQuit();
-
-    __android_log_print(ANDROID_LOG_INFO, "SDL", "SDL: Native quit %d", r);        
+    // Inject a SDL_QUIT event
+    SDL_SendQuit();
 }
 
-//Screen size
+// Screen size
 extern "C" void Java_org_libsdl_app_SDLActivity_nativeSetScreenSize(
-                JNIEnv*  env, jobject obj, jint width, jint height){
-
+                JNIEnv*  env, jobject obj, jint width, jint height)
+{
     __android_log_print(ANDROID_LOG_INFO, "SDL", 
                         "SDL: Set screen size on init: %d/%d\n", width, height);
     Android_SetScreenResolution(width, height);
-                        
 }
 
-//Resize
+// Resize
 extern "C" void Java_org_libsdl_app_SDLActivity_onNativeResize(
                                         JNIEnv*  env, jobject obj, jint width, 
-                                        jint height, jint format){
+                                        jint height, jint format)
+{
     Android_OnResize(width, height, format);
 }
 
 extern "C" void Java_org_libsdl_app_SDLActivity_onNativeAccel(
                                         JNIEnv*  env, jobject obj,
-                                        jfloat x, jfloat y, jfloat z){
+                                        jfloat x, jfloat y, jfloat z)
+{
     fLastAccelerometer[0] = x;
     fLastAccelerometer[1] = y;
     fLastAccelerometer[2] = z;   
@@ -190,38 +175,39 @@ extern "C" void Java_org_libsdl_app_SDLActivity_onNativeAccel(
 /*******************************************************************************
              Functions called by SDL into Java
 *******************************************************************************/
-extern "C" void Android_CreateContext(){
-	__android_log_print(ANDROID_LOG_INFO, "SDL", "SDL: sdl_create_context()\n");
+extern "C" void Android_CreateContext()
+{
+    __android_log_print(ANDROID_LOG_INFO, "SDL", "SDL: sdl_create_context()\n");
 
-	bRenderingEnabled = true;
+    bRenderingEnabled = true;
 
     mEnv->CallStaticVoidMethod(mActivityInstance, midCreateGLContext ); 
 }
 
-extern "C" void Android_Render(){
-
-    if(!bRenderingEnabled){
+extern "C" void Android_Render()
+{
+    if (!bRenderingEnabled) {
         return;
     }
 
-    //When we get here, we've accumulated a full frame    
-    mEnv->CallStaticVoidMethod(mActivityInstance, midFlipBuffers ); 
+    // When we get here, we've accumulated a full frame    
+    mEnv->CallStaticVoidMethod(mActivityInstance, midFlipBuffers); 
 }
 
-extern "C" void Android_EnableFeature(int featureid, bool enabled){
-
+extern "C" void Android_EnableFeature(int featureid, bool enabled)
+{
     mEnv->CallStaticVoidMethod(mActivityInstance, midEnableFeature, 
                                 featureid, (int)enabled); 
 }
 
-extern "C" void Android_UpdateAudioBuffer(unsigned char *buf, int len){
-
+extern "C" void Android_UpdateAudioBuffer(unsigned char *buf, int len)
+{
     //Annoyingly we can't just call into Java from any thread. Because the audio
     //callback is dispatched from the SDL audio thread (that wasn't made from
     //java, we have to do some magic here to let the JVM know about the thread.
     //Because everything it touches on the Java side is static anyway, it's 
     //not a big deal, just annoying.
-    if(!mAudioThreadEnv){
+    if(!mAudioThreadEnv) {
         __android_log_print(ANDROID_LOG_INFO, "SDL", "SDL: Need to set up audio thread env\n");
 
         mVM->AttachCurrentThread(&mAudioThreadEnv, NULL);
diff --git a/src/main/android/SDL_android_main.cpp b/src/main/android/SDL_android_main.cpp
new file mode 100644
index 00000000..c675b110
--- /dev/null
+++ b/src/main/android/SDL_android_main.cpp
@@ -0,0 +1,30 @@
+
+/* 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 "C" void SDL_Android_Init(JNIEnv* env);
+
+// Library init
+extern "C" jint JNI_OnLoad(JavaVM* vm, void* reserved)
+{
+    return JNI_VERSION_1_4;
+}
+
+// Start up the SDL app
+extern "C" void Java_org_libsdl_app_SDLActivity_nativeInit( JNIEnv* env, jobject obj )
+{
+    /* This interface could expand with ABI negotiation, calbacks, etc. */
+    SDL_Android_Init(env);
+
+    /* Run the application code! */
+    char *argv[2];
+    argv[0] = strdup("SDL_app");
+    argv[1] = NULL;
+    SDL_main(1, argv);
+}
-- 
2.18.1