Browse Source

initial import of android-studio project

cdoran2011 10 years ago
parent
commit
bb93feee94
30 changed files with 2092 additions and 2 deletions
  1. 7 2
      .gitignore
  2. 19 0
      engine/compilers/android-studio/android-studio.iml
  3. 95 0
      engine/compilers/android-studio/app/app.iml
  4. 53 0
      engine/compilers/android-studio/app/build.gradle
  5. 38 0
      engine/compilers/android-studio/app/src/main/AndroidManifest.xml
  6. BIN
      engine/compilers/android-studio/app/src/main/assets/splash.png
  7. 339 0
      engine/compilers/android-studio/app/src/main/java/com/garagegames/torque2d/FileWalker.java
  8. 287 0
      engine/compilers/android-studio/app/src/main/java/com/garagegames/torque2d/FontManager.java
  9. 9 0
      engine/compilers/android-studio/app/src/main/java/com/garagegames/torque2d/MyNativeActivity.java
  10. 69 0
      engine/compilers/android-studio/app/src/main/java/com/garagegames/torque2d/SplashScreen.java
  11. 75 0
      engine/compilers/android-studio/app/src/main/java/com/garagegames/torque2d/StreamingAudioPlayer.java
  12. 139 0
      engine/compilers/android-studio/app/src/main/java/com/garagegames/torque2d/T2DUtilities.java
  13. 589 0
      engine/compilers/android-studio/app/src/main/jni/Android.mk
  14. 4 0
      engine/compilers/android-studio/app/src/main/jni/Application.mk
  15. BIN
      engine/compilers/android-studio/app/src/main/res/drawable-hdpi/ic_launcher.png
  16. BIN
      engine/compilers/android-studio/app/src/main/res/drawable-ldpi/ic_launcher.png
  17. BIN
      engine/compilers/android-studio/app/src/main/res/drawable-mdpi/ic_launcher.png
  18. BIN
      engine/compilers/android-studio/app/src/main/res/drawable-xhdpi/ic_launcher.png
  19. 3 0
      engine/compilers/android-studio/app/src/main/res/menu/activity_main.xml
  20. 11 0
      engine/compilers/android-studio/app/src/main/res/values-v11/styles.xml
  21. 12 0
      engine/compilers/android-studio/app/src/main/res/values-v14/styles.xml
  22. 5 0
      engine/compilers/android-studio/app/src/main/res/values/strings.xml
  23. 20 0
      engine/compilers/android-studio/app/src/main/res/values/styles.xml
  24. 15 0
      engine/compilers/android-studio/build.gradle
  25. BIN
      engine/compilers/android-studio/gradle/wrapper/gradle-wrapper.jar
  26. 6 0
      engine/compilers/android-studio/gradle/wrapper/gradle-wrapper.properties
  27. 164 0
      engine/compilers/android-studio/gradlew
  28. 90 0
      engine/compilers/android-studio/gradlew.bat
  29. 42 0
      engine/compilers/android-studio/import-summary.txt
  30. 1 0
      engine/compilers/android-studio/settings.gradle

+ 7 - 2
.gitignore

@@ -26,7 +26,7 @@ Torque2D_DEBUG.exe
 Torque2DGame.app
 Torque2DGame.app
 Torque2DGame_Debug.app
 Torque2DGame_Debug.app
 linkmap.txt
 linkmap.txt
-    
+
 # Compiled source #
 # Compiled source #
 ###################
 ###################
 *.com
 *.com
@@ -68,4 +68,9 @@ engine/compilers/android/.settings/org.eclipse.cdt.core.prefs
 engine/compilers/android/bin/
 engine/compilers/android/bin/
 engine/compilers/android/gen/
 engine/compilers/android/gen/
 engine/compilers/android/obj/
 engine/compilers/android/obj/
-
+engine/compilers/android-studio/.gradle/
+engine/compilers/android-studio/build/
+engine/compilers/android-studio/app/build/
+engine/compilers/android-studio/local.properties
+engine/compilers/android-studio/app/src/main/obj/
+engine/compilers/android-studio/app/src/main/libs/

+ 19 - 0
engine/compilers/android-studio/android-studio.iml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module external.linked.project.id="android-studio" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" external.system.module.group="" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="java-gradle" name="Java-Gradle">
+      <configuration>
+        <option name="BUILD_FOLDER_PATH" value="$MODULE_DIR$/build" />
+        <option name="BUILDABLE" value="false" />
+      </configuration>
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_6" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <excludeFolder url="file://$MODULE_DIR$/.gradle" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>

+ 95 - 0
engine/compilers/android-studio/app/app.iml

@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module external.linked.project.id=":app" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" external.system.module.group="android-studio" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="android-gradle" name="Android-Gradle">
+      <configuration>
+        <option name="GRADLE_PROJECT_PATH" value=":app" />
+      </configuration>
+    </facet>
+    <facet type="android" name="Android">
+      <configuration>
+        <option name="SELECTED_BUILD_VARIANT" value="debug" />
+        <option name="SELECTED_TEST_ARTIFACT" value="_android_test_" />
+        <option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
+        <option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
+        <option name="ASSEMBLE_TEST_TASK_NAME" value="assembleDebugAndroidTest" />
+        <option name="COMPILE_JAVA_TEST_TASK_NAME" value="compileDebugAndroidTestSources" />
+        <afterSyncTasks>
+          <task>generateDebugAndroidTestSources</task>
+          <task>generateDebugSources</task>
+        </afterSyncTasks>
+        <option name="ALLOW_USER_CONFIGURATION" value="false" />
+        <option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
+        <option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
+        <option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res" />
+        <option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
+      </configuration>
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_6" inherit-compiler-output="false">
+    <output url="file://$MODULE_DIR$/build/intermediates/classes/debug" />
+    <output-test url="file://$MODULE_DIR$/build/intermediates/classes/androidTest/debug" />
+    <exclude-output />
+    <content url="file://$MODULE_DIR$/../../../..">
+      <sourceFolder url="file://$MODULE_DIR$/../../../.." type="java-resource" />
+      <excludeFolder url="file://$MODULE_DIR$/build/tmp" />
+    </content>
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/debug" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/debug" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/generated/debug" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/androidTest/debug" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/generated/androidTest/debug" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/jni" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/coverage-instrumented-classes" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex-cache" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/jacoco" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/javaResources" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/libs" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/ndk" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/proguard" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
+      <excludeFolder url="file://$MODULE_DIR$/build/outputs" />
+      <excludeFolder url="file://$MODULE_DIR$/build/tmp" />
+    </content>
+    <orderEntry type="jdk" jdkName="Android API 18 Platform" jdkType="Android SDK" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>

+ 53 - 0
engine/compilers/android-studio/app/build.gradle

@@ -0,0 +1,53 @@
+apply plugin: 'com.android.application'
+
+
+android {
+    compileSdkVersion 18
+    buildToolsVersion "22.0.1"
+
+    defaultConfig {
+        applicationId "com.garagegames.torque2d"
+        minSdkVersion 9
+        targetSdkVersion 18
+
+        sourceSets.main {
+            assets.srcDirs=[
+                    'src/main/assets',
+                    '../../../../'
+            ]
+            jni.srcDirs = []
+            jniLibs.srcDir 'src/main/libs'
+
+        }
+        task buildNative(type: Exec, description: 'Compile JNI source via NDK') {
+            def ndkDir = plugins.getPlugin('com.android.application').sdkHandler.getNdkFolder()
+            commandLine "$ndkDir/ndk-build",
+                    '-C', file('src/main/jni').absolutePath, // Change src/main/jni the relative path to your jni source
+                    '-j', Runtime.runtime.availableProcessors(),
+                    'all',
+                    'NDK_DEBUG=1'
+        }
+
+        task cleanNative(type: Exec, description: 'Clean JNI object files') {
+            def ndkDir = plugins.getPlugin('com.android.application').sdkHandler.getNdkFolder()
+            commandLine "$ndkDir/ndk-build",
+                    '-C', file('src/main/jni').absolutePath, // Change src/main/jni the relative path to your jni source
+                    'clean'
+        }
+
+        clean.dependsOn 'cleanNative'
+
+        tasks.withType(JavaCompile) {
+            compileTask -> compileTask.dependsOn buildNative
+        }
+    }
+
+    buildTypes {
+        release {
+            minifyEnabled false
+            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
+        }
+    }
+
+}
+

+ 38 - 0
engine/compilers/android-studio/app/src/main/AndroidManifest.xml

@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest package="com.garagegames.torque2d"
+    android:versionCode="1"
+    android:versionName="3.0" xmlns:android="http://schemas.android.com/apk/res/android">
+    
+    <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="com.android.vending.CHECK_LICENSE" />
+    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
+    <uses-permission android:name="android.permission.VIBRATE"/>
+
+    <uses-sdk
+        android:minSdkVersion="9"
+        android:targetSdkVersion="18" />   
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+    <uses-feature android:glEsVersion="0x00010001" />
+
+    <application
+        android:allowBackup="true"
+        android:icon="@drawable/ic_launcher"
+        android:label="@string/app_name"
+        android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
+        android:hardwareAccelerated="true" android:hasCode="true">
+        <activity
+            android:name="com.garagegames.torque2d.MyNativeActivity"
+            android:label="@string/app_name"
+            android:screenOrientation="sensorLandscape" >
+            <!-- Tell NativeActivity the name of or .so -->
+            <meta-data android:name="android.app.lib_name"
+                    android:value="torque2d" />
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+    </application>
+
+</manifest>

BIN
engine/compilers/android-studio/app/src/main/assets/splash.png


+ 339 - 0
engine/compilers/android-studio/app/src/main/java/com/garagegames/torque2d/FileWalker.java

@@ -0,0 +1,339 @@
+package com.garagegames.torque2d;
+
+import java.io.IOException;
+import java.util.Hashtable;
+import java.util.Vector;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.res.AssetFileDescriptor;
+import android.content.res.AssetManager;
+import android.net.Uri;
+import android.util.Log;
+
+public class FileWalker
+{
+	public static Hashtable<String,Vector<String>> directories = new Hashtable<String,Vector<String>>();
+	public static Hashtable<String,Vector<String>> files = new Hashtable<String,Vector<String>>();
+	public static Vector<String> dumpPathVec = new Vector<String>();
+	public static Vector<String> dumpDirVec = new Vector<String>();
+	public static Vector<String> dumpDirList = new Vector<String>();
+	
+	public static void InitDirList(Context context, String dir)
+	{
+		AssetManager assetMgr = context.getAssets();
+		try {
+			String[] assets = assetMgr.list(dir);
+			if (directories.containsKey(dir))
+				directories.remove(dir);
+			directories.put(dir, new Vector<String>());
+			if (files.containsKey(dir))
+				files.remove(dir);
+			files.put(dir, new Vector<String>());
+			
+			for(String asset: assets) {
+				if (asset.indexOf('.') == -1)
+				{
+					directories.get(dir).add(asset);
+				}
+				else
+				{
+					files.get(dir).add(asset);
+				}
+			}
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	public static String[] DumpDirectories(Context context, String basePath, String path, boolean depth, boolean noBasePath)
+	{
+		double time = System.currentTimeMillis();
+	    dumpPathVec.clear();
+		dumpDirVec.clear();
+		
+		String dirPath = basePath;
+		
+		//remove any ./ from path since the apk code chokes on it
+		while (dirPath.contains("./"))
+			dirPath = dirPath.replace("./", "");
+		
+		//remove any ../ from path since the apk code chokes on it
+		String search = "/../";
+		while (dirPath.contains(search))
+		{
+			int pos = dirPath.indexOf(search);
+			int posStart = dirPath.lastIndexOf("/", pos-1);
+			dirPath = dirPath.substring(0, posStart+1) + dirPath.substring(pos+4);
+		}
+	    
+		if (dirPath.startsWith("/"))
+	    	dirPath = dirPath.substring(1);
+		
+		if (dirPath.endsWith("/"))
+	    	dirPath = dirPath.substring(0,dirPath.length()-1);
+	   
+	    if ( !noBasePath )
+	        dumpPathVec.add(dirPath);
+	   
+	    if (!path.equals(""))
+	    {
+		    dirPath = basePath + "/" + path; 
+		    
+		    if (dirPath.endsWith("/"))
+		    	dirPath = dirPath.substring(0,dirPath.length()-1);
+		   
+	    }
+		DumpDir2(context, dirPath);
+		
+		while (depth && dumpDirVec.size() > 0)
+		{
+			String newdir = dumpDirVec.remove(0);
+			DumpDir2(context,newdir);
+		}
+		
+		int size = dumpPathVec.size();
+		if (size > 500)
+			size = 500;
+		String[] retStringArray = new String[size];
+		int cnt = 0;
+		for(cnt = 0; cnt < size; cnt++)
+		{
+			String s = dumpPathVec.remove(0);
+			if (noBasePath)
+				s = s.replace(basePath + "/", "");
+			retStringArray[cnt] = "/" + s;
+		}
+		Log.i("torque2d", "time in dir java: " + (System.currentTimeMillis() - time) );
+		
+		return retStringArray;
+	}
+	
+	public static void DumpDir2(Context context, String dir)
+	{
+		for (String d : dumpDirList)
+		{
+			String d2 = d.substring(1);
+			if (d2.equals(dir))
+				continue;
+			
+			if (d2.length() < dir.length())
+				continue;
+			
+			String newdir = "";
+			if (dir.equals(""))
+			{
+				if (!d2.contains("/"))
+				{
+					dumpPathVec.add(d2);
+					newdir = d2;
+				}
+			}
+			else
+			{
+				if (d2.startsWith(dir))
+				{
+					String asset = d2.replace(dir, "").substring(1);
+					if (!asset.contains("/"))
+					{
+						dumpPathVec.add(d2);
+						newdir = d2;
+					}
+				}
+			}
+			
+			
+			if (!newdir.equals("")) {
+				dumpDirVec.add(newdir);
+			}
+		}
+	}
+	
+	public static String[] DumpPath(Context context, String dirPath, boolean depth)
+	{
+		double time = System.currentTimeMillis();
+		dumpPathVec.clear();
+		dumpDirVec.clear();
+		dumpDirList.clear();
+		
+		String dir = dirPath;
+		
+		//remove any ./ from path since the apk code chokes on it
+		while (dir.contains("./"))
+			dir = dir.replace("./", "");
+		
+		//remove any ../ from path since the apk code chokes on it
+		String search = "/../";
+		while (dir.contains(search))
+		{
+			int pos = dir.indexOf(search);
+			int posStart = dir.lastIndexOf("/", pos-1);
+			dir = dir.substring(0, posStart+1) + dir.substring(pos+4);
+		}
+		
+		if (dir.startsWith("/"))
+	    	dir = dir.substring(1);
+		
+		if (dir.endsWith("/"))
+	    	dir = dir.substring(0,dir.length()-1);
+	   
+		//Log.i("torque2d","path start: " + dir);
+		DumpDir(context, dir);
+		
+		while (depth && dumpDirVec.size() > 0)
+		{
+			String newdir = dumpDirVec.remove(0);
+			//Log.i("torque2d","newpath " + newdir);
+			DumpDir(context,newdir);
+		}
+		
+		int size = dumpPathVec.size();
+		if (size > 500)
+			size = 500;
+		//Log.i("torque2d","size " + size);
+		String[] retStringArray = new String[size];
+		int cnt = 0;
+		for(cnt = 0; cnt < size; cnt++)
+		{
+			String s = dumpPathVec.remove(0);
+			//Log.i("torque2d","file " + s);
+			retStringArray[cnt] = "/" + s;
+		}
+		Log.i("torque2d", "time in java: " + (System.currentTimeMillis() - time) );
+		return retStringArray;
+	}
+	
+	public static String[] getRestOfDump()
+	{
+		int size = dumpPathVec.size();
+		if (size > 500)
+			size = 500;
+		String[] retStringArray = new String[size];
+		int cnt = 0;
+		for(cnt = 0; cnt < size; cnt++)
+		{
+			String s = dumpPathVec.remove(0);
+			retStringArray[cnt] = "/" + s;
+		}
+		return retStringArray;
+	}
+	
+	public static void DumpDir(Context context, String dir)
+	{
+		AssetManager assetMgr = context.getAssets();
+		try {
+			String[] assets = assetMgr.list(dir);
+			for (String asset : assets)
+			{
+				if (asset.equals(".") || asset.equals(".."))
+					continue;
+				
+				if (dir.equals(""))
+				{
+					if (asset.equals("images") || asset.equals("webkit") || asset.equals("sounds") || asset.equals("kioskmode"))
+						continue;
+				}
+				
+				if (asset.contains("."))
+				{
+					if (dir.equals(""))
+						dumpPathVec.add(asset);
+					else
+						dumpPathVec.add(dir + "/" + asset);
+				}
+				else
+				{
+					String newdir = asset;
+					if (!dir.equals(""))
+						newdir = dir + "/" + asset;
+					
+					dumpDirVec.add(newdir);
+					if (newdir.startsWith("/"))
+						dumpDirList.add(newdir);
+					else
+						dumpDirList.add("/" + newdir);
+						
+				}
+			}
+				
+		} catch (IOException e) {
+			
+		}
+	}
+	
+	public static String GetNextDir(String dir)
+	{
+		if (directories.get(dir).size() == 0)
+			return null;
+		 
+		return directories.get(dir).remove(0);
+		
+	}
+	
+	public static String GetNextFile(String dir)
+	{
+		if (files.get(dir).size() == 0)
+			return null;
+		 
+		return files.get(dir).remove(0);
+	}
+	
+	public static boolean IsDir(Context context, String dir)
+	{
+		AssetManager assetMgr = context.getAssets();
+		String[] assets;
+		try {
+			assets = assetMgr.list(dir);
+			if (assets != null && assets.length > 0) 
+			{
+				return true;
+			}
+			
+			return false;
+		} catch (IOException e) {
+			e.printStackTrace();
+			return false;
+		}
+	}
+	
+	public static boolean IsFile(Context context, String dir)
+	{
+		AssetManager assetMgr = context.getAssets();
+		String[] assets;
+		try {
+			assets = assetMgr.list(dir);
+			if (assets != null && assets.length > 0) 
+			{
+				return false;
+			}
+			
+			return true;
+		} catch (IOException e) {
+			e.printStackTrace();
+			return false;
+		}
+	}
+	
+	public static int GetFileSize(Context context, String file)
+	{
+		int ret = 0;
+		try {
+			if (file.startsWith("/"))
+				file = file.substring(1);
+			
+			AssetFileDescriptor afd = context.getAssets().openFd(file);
+			ret = (int)afd.getLength();
+			
+			afd.close();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return ret;
+	}
+	
+	public static void OpenURL(Context context, String url)
+	{
+		Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
+		context.startActivity(browserIntent);
+	}
+}

+ 287 - 0
engine/compilers/android-studio/app/src/main/java/com/garagegames/torque2d/FontManager.java

@@ -0,0 +1,287 @@
+package com.garagegames.torque2d;
+/*
+ * Copyright (C) 2011 George Yunaev @ Ulduzsoft
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ */
+ 
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.RandomAccessFile;
+import java.util.HashMap;
+
+import android.content.Context;
+import android.content.res.AssetManager;
+import android.util.Log;
+ 
+public class FontManager
+{
+	static private HashMap< String, String > fonts = null;
+    // This function enumerates all fonts on Android system and returns the HashMap with the font
+    // absolute file name as key, and the font literal name (embedded into the font) as value.
+    static public void enumerateFonts(Context context)
+    {
+        String[] fontdirs = { "/system/fonts", "/system/font", "/data/fonts" };
+        fonts = new HashMap< String, String >();
+        TTFAnalyzer analyzer = new TTFAnalyzer();
+ 
+        for ( String fontdir : fontdirs )
+        {
+            File dir = new File( fontdir );
+ 
+            if ( !dir.exists() )
+                continue;
+ 
+            File[] files = dir.listFiles();
+ 
+            if ( files == null )
+                continue;
+ 
+            for ( File file : files )
+            {
+                String fontname = analyzer.getTtfFontName( file.getAbsolutePath() );
+ 
+                if ( fontname != null )
+                    fonts.put( file.getAbsolutePath(), fontname );
+            }
+            
+        }
+        
+        AssetManager assetMgr = context.getAssets();
+        String[] customFonts;
+        try {
+			customFonts = assetMgr.list("fonts");
+			for (String customFont : customFonts)
+	        {
+				if (customFont.endsWith(".ttf"))
+				{
+					String customFontPath = copyCustomFontToCache(customFont, assetMgr, context);
+					String fontname = analyzer.getTtfFontName( customFontPath );
+					 
+	                if ( fontname != null )
+	                    fonts.put( customFontPath, fontname );
+				}
+	        }
+			
+			
+		} catch (IOException e) {
+			
+		}
+        
+    }
+    
+    static public String copyCustomFontToCache(String customFont, AssetManager assetMgr, Context context)
+    {
+    	InputStream fis = null;
+    	File tmpFile = null;
+    	String outFilePath = "";
+    	try {
+    	    fis = assetMgr.open("fonts/" + customFont);
+    	    // We'll create a file in the application's cache directory
+    	    File dir = context.getCacheDir();
+    	    dir.mkdirs();
+    	    tmpFile = new File(dir, customFont);
+    	    if (tmpFile.exists()) {
+    	        // Delete the temporary file if it already exists
+    	        tmpFile.delete();
+    	    }
+    	    FileOutputStream fos = null;
+    	    try {
+    	        // Write the asset file to the temporary location
+    	        fos = new FileOutputStream(tmpFile);
+    	        byte[] buffer = new byte[1024];
+    	        int bufferLen;
+    	        while ((bufferLen = fis.read(buffer)) != -1) {
+    	            fos.write(buffer, 0, bufferLen);
+    	        }
+    	    } finally {
+    	        if (fos != null) {
+    	            try {
+    	                fos.close();
+    	            } catch (IOException e) {}
+    	        }
+    	    }
+    	    
+    	    outFilePath = dir + "/" + customFont;
+    	    
+    	} catch (IOException e) {
+    	    Log.e("torque2d", "Failed reading asset", e);
+    	} finally {
+    	    if (fis != null) {
+    	        try {
+    	            fis.close();
+    	        } catch (IOException e) {}
+    	    }
+    	    
+    	}
+    	
+    	return outFilePath;
+    }
+    
+    static public void dumpFontList()
+    {
+    	//print list
+        for (String key : fonts.keySet())
+        {
+        	Log.i("torque2d", "font: " + fonts.get(key));
+        }
+    }
+    
+    static public String getFont(String fontName)
+    {
+    	for (String key : fonts.keySet())
+    	{
+    		String data = fonts.get(key);
+    		if (!fontName.contains("Italic") && !fontName.contains("Bold"))
+    		{
+    			if (data.contains(fontName) && !data.contains("Italic") && !data.contains("Bold"))
+    				return key;
+    		} else {
+    			if (data.contains(fontName))
+    				return key;
+    		}
+    	}
+    	
+    	return null;
+    }
+}
+ 
+// The class which loads the TTF file, parses it and returns the TTF font name
+class TTFAnalyzer
+{
+    // This function parses the TTF file and returns the font name specified in the file
+    public String getTtfFontName( String fontFilename )
+    {
+        try
+        {
+            // Parses the TTF file format.
+            // See http://developer.apple.com/fonts/ttrefman/rm06/Chap6.html
+            m_file = new RandomAccessFile( fontFilename, "r" );
+ 
+            // Read the version first
+            int version = readDword();
+ 
+            // The version must be either 'true' (0x74727565) or 0x00010000
+            if ( version != 0x74727565 && version != 0x00010000 )
+                return null;
+ 
+            // The TTF file consist of several sections called "tables", and we need to know how many of them are there.
+            int numTables = readWord();
+ 
+            // Skip the rest in the header
+            readWord(); // skip searchRange
+            readWord(); // skip entrySelector
+            readWord(); // skip rangeShift
+ 
+            // Now we can read the tables
+            for ( int i = 0; i < numTables; i++ )
+            {
+                // Read the table entry
+                int tag = readDword();
+                readDword(); // skip checksum
+                int offset = readDword();
+                int length = readDword();
+ 
+                // Now here' the trick. 'name' field actually contains the textual string name.
+                // So the 'name' string in characters equals to 0x6E616D65
+                if ( tag == 0x6E616D65 )
+                {
+                    // Here's the name section. Read it completely into the allocated buffer
+                    byte[] table = new byte[ length ];
+ 
+                    m_file.seek( offset );
+                    read( table );
+ 
+                    // This is also a table. See http://developer.apple.com/fonts/ttrefman/rm06/Chap6name.html
+                    // According to Table 36, the total number of table records is stored in the second word, at the offset 2.
+                    // Getting the count and string offset - remembering it's big endian.
+                    int count = getWord( table, 2 );
+                    int string_offset = getWord( table, 4 );
+ 
+                    // Record starts from offset 6
+                    for ( int record = 0; record < count; record++ )
+                    {
+                        // Table 37 tells us that each record is 6 words -> 12 bytes, and that the nameID is 4th word so its offset is 6.
+                        // We also need to account for the first 6 bytes of the header above (Table 36), so...
+                        int nameid_offset = record * 12 + 6;
+                        int platformID = getWord( table, nameid_offset );
+                        int nameid_value = getWord( table, nameid_offset + 6 );
+ 
+                        // Table 42 lists the valid name Identifiers. We're interested in 4 but not in Unicode encoding (for simplicity).
+                        // The encoding is stored as PlatformID and we're interested in Mac encoding
+                        if ( nameid_value == 4 && platformID == 1 )
+                        {
+                            // We need the string offset and length, which are the word 6 and 5 respectively
+                            int name_length = getWord( table, nameid_offset + 8 );
+                            int name_offset = getWord( table, nameid_offset + 10 );
+ 
+                            // The real name string offset is calculated by adding the string_offset
+                            name_offset = name_offset + string_offset;
+ 
+                            // Make sure it is inside the array
+                            if ( name_offset >= 0 && name_offset + name_length < table.length )
+                                return new String( table, name_offset, name_length );
+                        }
+                    }
+                }
+            }
+ 
+            return null;
+        }
+        catch (FileNotFoundException e)
+        {
+            // Permissions?
+            return null;
+        }
+        catch (IOException e)
+        {
+            // Most likely a corrupted font file
+            return null;
+        }
+    }
+ 
+    // Font file; must be seekable
+    private RandomAccessFile m_file = null;
+ 
+    // Helper I/O functions
+    private int readByte() throws IOException
+    {
+        return m_file.read() & 0xFF;
+    }
+ 
+    private int readWord() throws IOException
+    {
+        int b1 = readByte();
+        int b2 = readByte();
+ 
+        return b1 << 8 | b2;
+    }
+ 
+    private int readDword() throws IOException
+    {
+        int b1 = readByte();
+        int b2 = readByte();
+        int b3 = readByte();
+        int b4 = readByte();
+ 
+        return b1 << 24 | b2 << 16 | b3 << 8 | b4;
+    }
+ 
+    private void read( byte [] array ) throws IOException
+    {
+        if ( m_file.read( array ) != array.length )
+            throw new IOException();
+    }
+ 
+    // Helper
+    private int getWord( byte [] array, int offset )
+    {
+        int b1 = array[ offset ] & 0xFF;
+        int b2 = array[ offset + 1 ] & 0xFF;
+ 
+        return b1 << 8 | b2;
+    }
+}

+ 9 - 0
engine/compilers/android-studio/app/src/main/java/com/garagegames/torque2d/MyNativeActivity.java

@@ -0,0 +1,9 @@
+package com.garagegames.torque2d;
+
+import android.app.NativeActivity;
+
+public class MyNativeActivity extends NativeActivity {
+  static {
+    System.loadLibrary("openal"); 
+  }
+}

+ 69 - 0
engine/compilers/android-studio/app/src/main/java/com/garagegames/torque2d/SplashScreen.java

@@ -0,0 +1,69 @@
+package com.garagegames.torque2d;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import android.app.Activity;
+import android.app.Dialog;
+import android.content.Context;
+import android.content.res.AssetManager;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Color;
+import android.view.Window;
+import android.view.WindowManager;
+import android.widget.ImageView;
+import android.widget.ImageView.ScaleType;
+
+public class SplashScreen extends Dialog {
+	
+	public SplashScreen(Context context, int theme) {
+		super(context, theme);
+	}
+
+	private static SplashScreen _instance = null;
+	
+	public static void ToggleSplashScreen(final Context context, final boolean show, final int screenWidth, final int screenHeight) 
+	{
+		if (show)
+		{
+			final Activity activity = (Activity)context;
+			activity.runOnUiThread(new Runnable() {			
+				@Override
+					public void run() {
+						
+						_instance = new SplashScreen(context, android.R.style.Theme_Black_NoTitleBar_Fullscreen);
+						
+						try {
+							AssetManager assetMgr = context.getAssets();
+							InputStream stream = assetMgr.open("splash.png");
+							Bitmap splashBitmap = Bitmap.createScaledBitmap(BitmapFactory.decodeStream(stream), screenWidth, screenHeight, true);
+							
+							ImageView view = new ImageView(context);
+							view.setPadding(0, 0, 0, 0);
+							view.setImageBitmap(splashBitmap);
+							view.setScaleType(ScaleType.FIT_CENTER);
+							view.setBackgroundColor(Color.BLACK);
+							_instance.getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
+							         WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
+							_instance.requestWindowFeature(Window.FEATURE_NO_TITLE); 
+							_instance.setCancelable(false);
+							_instance.setContentView(view);
+							_instance.show();
+							
+						} catch (IOException e) {
+							
+						}
+					}
+			});
+		} 
+		else
+		{
+			if (_instance != null)
+			{
+				_instance.dismiss();
+				_instance = null;
+			}
+		}
+	}
+}

+ 75 - 0
engine/compilers/android-studio/app/src/main/java/com/garagegames/torque2d/StreamingAudioPlayer.java

@@ -0,0 +1,75 @@
+package com.garagegames.torque2d;
+
+import java.io.IOException;
+
+import android.content.Context;
+import android.content.res.AssetFileDescriptor;
+import android.media.MediaPlayer;
+import android.util.Log;
+
+public class StreamingAudioPlayer {
+	
+	private static MediaPlayer mediaPlayer = null;
+
+	public static void LoadMusicTrack(Context context, String filename)
+	{
+		mediaPlayer = new MediaPlayer();
+		AssetFileDescriptor fd;
+		try {
+			fd = context.getAssets().openFd(filename);
+			if (fd == null)
+				Log.i("torque2d", "failed to load music file " + filename);
+			
+			mediaPlayer.setDataSource(fd.getFileDescriptor(),fd.getStartOffset(),fd.getLength());
+			mediaPlayer.prepare();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	
+	}
+	
+	public static void UnLoadMusicTrack()
+	{
+		if (mediaPlayer == null)
+			return;
+		
+		mediaPlayer.stop();
+		mediaPlayer.release();
+		mediaPlayer = null;
+		
+	}
+	
+	public static boolean isMusicTrackPlaying()
+	{
+		if (mediaPlayer == null)
+			return false;
+		
+		return mediaPlayer.isPlaying();
+	}
+	
+	public static void startMusicTrack()
+	{
+		if (mediaPlayer == null)
+			return;
+		
+		mediaPlayer.start();
+	}
+	
+	public static void stopMusicTrack()
+	{
+		if (mediaPlayer == null)
+			return;
+		
+		mediaPlayer.stop();
+	}
+	
+	public static void setMusicTrackVolume(float volume)
+	{
+		if (mediaPlayer == null)
+			return;
+		
+		mediaPlayer.setVolume(volume, volume);
+	}
+	
+}

+ 139 - 0
engine/compilers/android-studio/app/src/main/java/com/garagegames/torque2d/T2DUtilities.java

@@ -0,0 +1,139 @@
+package com.garagegames.torque2d;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.net.Uri;
+
+public class T2DUtilities {
+		
+	public static void OpenURL(Context context, String url)
+	{
+		Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
+		context.startActivity(browserIntent);
+	}
+	
+	public static void DisplayAlertOK(final Context context, final String title, final String message)
+	{
+		final Activity activity = (Activity)context;
+		activity.runOnUiThread(new Runnable() {			
+			@Override
+				public void run() {
+					AlertDialog.Builder builder = new AlertDialog.Builder(context);
+					builder.setMessage(message);
+					builder.setTitle(title);
+					builder.setCancelable(false);
+					builder.setNeutralButton("OK", new DialogInterface.OnClickListener() {
+					           public void onClick(DialogInterface dialog, int id) {
+					        	   alert = null; 
+					           }
+					       });
+					AlertDialog alert = builder.create();
+					alert.show();
+				}
+		});
+	}
+	
+	private static int retValue = -1;
+	private static AlertDialog alert = null;
+	
+	public static void DisplayAlertOKCancel(final Context context, final String title, final String message)
+	{
+		retValue = -1;
+		final Activity activity = (Activity)context;
+		activity.runOnUiThread(new Runnable() {			
+			@Override
+				public void run() {
+					AlertDialog.Builder builder = new AlertDialog.Builder(context);
+					builder.setMessage(message);
+					builder.setTitle(title);
+					builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
+				           public void onClick(DialogInterface dialog, int id) {
+				                retValue = 1;
+				                alert = null;
+				           }
+				       });
+					builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
+				           public void onClick(DialogInterface dialog, int id) {
+				                retValue = 0;
+				                alert = null;
+				           }
+				       });
+					alert = builder.create();
+					alert.show();
+				}
+		});
+	}
+	
+	public static int CheckAlert()
+	{
+		if (alert == null && retValue == -1)
+			return -1;
+		
+		if (retValue == -1)
+			return -1;
+		
+		if (alert != null && alert.isShowing())
+			return -1;
+		
+		return retValue;
+	}
+	
+	public static void DisplayAlertRetry(final Context context, final String title, final String message)
+	{
+		retValue = -1;
+		final Activity activity = (Activity)context;
+		activity.runOnUiThread(new Runnable() {			
+			@Override
+				public void run() {
+					AlertDialog.Builder builder = new AlertDialog.Builder(context);
+					builder.setMessage(message);
+					builder.setTitle(title);
+					builder.setPositiveButton("Retry", new DialogInterface.OnClickListener() {
+				           public void onClick(DialogInterface dialog, int id) {
+				                retValue = 1;
+				                alert = null;
+				           }
+				       });
+					builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
+				           public void onClick(DialogInterface dialog, int id) {
+				                retValue = 0;
+				                alert = null;
+				           }
+				       });
+					AlertDialog alert = builder.create();
+					alert.show();
+				}
+		});
+	}
+	
+	public static void DisplayAlertYesNo(final Context context, final String title, final String message)
+	{
+		retValue = -1;
+		final Activity activity = (Activity)context;
+		activity.runOnUiThread(new Runnable() {			
+			@Override
+				public void run() {
+					AlertDialog.Builder builder = new AlertDialog.Builder(context);
+					builder.setMessage(message);
+					builder.setTitle(title);
+					builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
+				           public void onClick(DialogInterface dialog, int id) {
+				                retValue = 1;
+				                alert = null;
+				           }
+				       });
+					builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
+				           public void onClick(DialogInterface dialog, int id) {
+				                retValue = 0;
+				                alert = null;
+				           }
+				       });
+					AlertDialog alert = builder.create();
+					alert.show();
+				}
+		});
+	}
+}

+ 589 - 0
engine/compilers/android-studio/app/src/main/jni/Android.mk

@@ -0,0 +1,589 @@
+# Copyright (C) 2010 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+#required for compiling on windows
+NDK_APP_SHORT_COMMANDS  := true
+LOCAL_SHORT_COMMANDS  := true
+
+MY_LOCAL_PATH := $(call my-dir)
+
+LOCAL_PATH := $(MY_LOCAL_PATH)
+# OpenAL Soft library must be a shared library since license is LGPLv3
+include $(CLEAR_VARS)
+
+LOCAL_MODULE    := libopenal-prebuilt
+LOCAL_SRC_FILES := ../../../../../../lib/openal/Android/$(TARGET_ARCH_ABI)/libopenal.so
+LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../../../../../lib/openal/Android/openal-soft-master/jni/OpenAL/include
+
+include $(PREBUILT_SHARED_LIBRARY)
+
+#freetype2 lib for generating fonts on device
+LOCAL_PATH := $(MY_LOCAL_PATH)
+ 
+include $(CLEAR_VARS)
+ 
+LOCAL_MODULE := freetype-prebuilt
+LOCAL_SRC_FILES := ../../../../../../lib/freetype/android/lib/libfreetype.a
+LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../../../../../lib/freetype/android/include $(LOCAL_PATH)/../../../../../../lib/freetype/android/include/freetype2
+ 
+include $(PREBUILT_STATIC_LIBRARY)
+
+LOCAL_PATH := $(MY_LOCAL_PATH)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE    := torque2d
+LOCAL_C_INCLUDES := $(LOCAL_PATH) \
+					$(LOCAL_PATH)/../../../../../../lib/ljpeg \
+					$(LOCAL_PATH)/../../../../../../lib/lpng \
+    				$(LOCAL_PATH)/../../../../../../source \
+    				$(LOCAL_PATH)/../../../../../../source/2d \
+    				$(LOCAL_PATH)/../../../../../../source/2d/assets \
+    				$(LOCAL_PATH)/../../../../../../source/2d/controllers \
+    				$(LOCAL_PATH)/../../../../../../source/2d/core \
+    				$(LOCAL_PATH)/../../../../../../source/2d/experimental/composites \
+    				$(LOCAL_PATH)/../../../../../../source/2d/gui \
+    				$(LOCAL_PATH)/../../../../../../source/2d/sceneobject \
+    				$(LOCAL_PATH)/../../../../../../source/2d/scene \
+    				$(LOCAL_PATH)/../../../../../../source/algorithm \
+    				$(LOCAL_PATH)/../../../../../../source/assets \
+    				$(LOCAL_PATH)/../../../../../../source/audio \
+    				$(LOCAL_PATH)/../../../../../../source/Box2D \
+    				$(LOCAL_PATH)/../../../../../../source/Box2D/Collision \
+					$(LOCAL_PATH)/../../../../../../source/Box2D/Collision/Shapes \
+					$(LOCAL_PATH)/../../../../../../source/Box2D/Common \
+					$(LOCAL_PATH)/../../../../../../source/Box2D/Dynamics \
+					$(LOCAL_PATH)/../../../../../../source/Box2D/Dynamics/Contacts \
+					$(LOCAL_PATH)/../../../../../../source/Box2D/Dynamics/Joints \
+					$(LOCAL_PATH)/../../../../../../source/Box2D/Rope \
+    				$(LOCAL_PATH)/../../../../../../source/collection \
+    				$(LOCAL_PATH)/../../../../../../source/component \
+    				$(LOCAL_PATH)/../../../../../../source/component/behaviors \
+    				$(LOCAL_PATH)/../../../../../../source/console \
+    				$(LOCAL_PATH)/../../../../../../source/debug \
+    				$(LOCAL_PATH)/../../../../../../source/debug/remote \
+    				$(LOCAL_PATH)/../../../../../../source/delegates \
+    				$(LOCAL_PATH)/../../../../../../source/game \
+    				$(LOCAL_PATH)/../../../../../../source/graphics \
+    				$(LOCAL_PATH)/../../../../../../source/gui \
+    				$(LOCAL_PATH)/../../../../../../source/gui/buttons \
+    				$(LOCAL_PATH)/../../../../../../source/gui/containers \
+    				$(LOCAL_PATH)/../../../../../../source/gui/editor \
+    				$(LOCAL_PATH)/../../../../../../source/gui/language \
+    				$(LOCAL_PATH)/../../../../../../source/input \
+    				$(LOCAL_PATH)/../../../../../../source/io \
+    				$(LOCAL_PATH)/../../../../../../source/io/resource \
+    				$(LOCAL_PATH)/../../../../../../source/io/zip \
+    				$(LOCAL_PATH)/../../../../../../source/math \
+    				$(LOCAL_PATH)/../../../../../../source/memory \
+    				$(LOCAL_PATH)/../../../../../../source/messaging \
+    				$(LOCAL_PATH)/../../../../../../source/module \
+    				$(LOCAL_PATH)/../../../../../../source/network \
+    				$(LOCAL_PATH)/../../../../../../source/persistence \
+    				$(LOCAL_PATH)/../../../../../../source/persistence/taml \
+    				$(LOCAL_PATH)/../../../../../../source/persistence/taml/binary \
+    				$(LOCAL_PATH)/../../../../../../source/persistence/taml/json \
+    				$(LOCAL_PATH)/../../../../../../source/persistence/taml/xml \
+    				$(LOCAL_PATH)/../../../../../../source/persistence/rapidjson/include \
+    				$(LOCAL_PATH)/../../../../../../source/platform \
+    				$(LOCAL_PATH)/../../../../../../source/platform/nativeDialogs \
+    				$(LOCAL_PATH)/../../../../../../source/platformAndroid \
+    				$(LOCAL_PATH)/../../../../../../source/sim \
+    				$(LOCAL_PATH)/../../../../../../source/spine \
+    				$(LOCAL_PATH)/../../../../../../source/string 
+#    				$(LOCAL_PATH)/../../../../../../source/testing \
+#    				$(LOCAL_PATH)/../../../../../../source/testing/tests \
+	    			
+	    			
+LOCAL_SRC_FILES :=  ../../../../../../lib/ljpeg/jcapimin.c \
+					../../../../../../lib/ljpeg/jcapistd.c \
+					../../../../../../lib/ljpeg/jccoefct.c \
+					../../../../../../lib/ljpeg/jccolor.c \
+					../../../../../../lib/ljpeg/jcdctmgr.c \
+					../../../../../../lib/ljpeg/jchuff.c \
+					../../../../../../lib/ljpeg/jcinit.c \
+					../../../../../../lib/ljpeg/jcmainct.c \
+					../../../../../../lib/ljpeg/jcmarker.c \
+					../../../../../../lib/ljpeg/jcmaster.c \
+					../../../../../../lib/ljpeg/jcomapi.c \
+					../../../../../../lib/ljpeg/jcparam.c \
+					../../../../../../lib/ljpeg/jcphuff.c \
+					../../../../../../lib/ljpeg/jcprepct.c \
+					../../../../../../lib/ljpeg/jcsample.c \
+					../../../../../../lib/ljpeg/jctrans.c \
+					../../../../../../lib/ljpeg/jdapimin.c \
+					../../../../../../lib/ljpeg/jdapistd.c \
+					../../../../../../lib/ljpeg/jdatadst.c \
+					../../../../../../lib/ljpeg/jdatasrc.c \
+					../../../../../../lib/ljpeg/jdcoefct.c \
+					../../../../../../lib/ljpeg/jdcolor.c \
+					../../../../../../lib/ljpeg/jddctmgr.c \
+					../../../../../../lib/ljpeg/jdhuff.c \
+					../../../../../../lib/ljpeg/jdinput.c \
+					../../../../../../lib/ljpeg/jdmainct.c \
+					../../../../../../lib/ljpeg/jdmarker.c \
+					../../../../../../lib/ljpeg/jdmaster.c \
+					../../../../../../lib/ljpeg/jdmerge.c \
+					../../../../../../lib/ljpeg/jdphuff.c \
+					../../../../../../lib/ljpeg/jdpostct.c \
+					../../../../../../lib/ljpeg/jdsample.c \
+					../../../../../../lib/ljpeg/jdtrans.c \
+					../../../../../../lib/ljpeg/jerror.c \
+					../../../../../../lib/ljpeg/jfdctflt.c \
+					../../../../../../lib/ljpeg/jfdctfst.c \
+					../../../../../../lib/ljpeg/jfdctint.c \
+					../../../../../../lib/ljpeg/jidctflt.c \
+					../../../../../../lib/ljpeg/jidctfst.c \
+					../../../../../../lib/ljpeg/jidctint.c \
+					../../../../../../lib/ljpeg/jidctred.c \
+					../../../../../../lib/ljpeg/jmemansi.c \
+					../../../../../../lib/ljpeg/jmemmgr.c \
+					../../../../../../lib/ljpeg/jquant1.c \
+					../../../../../../lib/ljpeg/jquant2.c \
+					../../../../../../lib/ljpeg/jutils.c \
+					../../../../../../lib/lpng/png.c \
+					../../../../../../lib/lpng/pngerror.c \
+					../../../../../../lib/lpng/pngget.c \
+					../../../../../../lib/lpng/pngmem.c \
+					../../../../../../lib/lpng/pngpread.c \
+					../../../../../../lib/lpng/pngread.c \
+					../../../../../../lib/lpng/pngrio.c \
+					../../../../../../lib/lpng/pngrtran.c \
+					../../../../../../lib/lpng/pngrutil.c \
+					../../../../../../lib/lpng/pngset.c \
+					../../../../../../lib/lpng/pngtrans.c \
+					../../../../../../lib/lpng/pngwio.c \
+					../../../../../../lib/lpng/pngwrite.c \
+					../../../../../../lib/lpng/pngwtran.c \
+					../../../../../../lib/lpng/pngwutil.c \
+					../../../../../../source/2d/assets/AnimationAsset.cc \
+					../../../../../../source/2d/assets/ImageAsset.cc \
+					../../../../../../source/2d/assets/ParticleAsset.cc \
+					../../../../../../source/2d/assets/ParticleAssetEmitter.cc \
+					../../../../../../source/2d/assets/ParticleAssetField.cc \
+					../../../../../../source/2d/assets/ParticleAssetFieldCollection.cc \
+					../../../../../../source/2d/assets/SkeletonAsset.cc \
+					../../../../../../source/2d/controllers/AmbientForceController.cc \
+					../../../../../../source/2d/controllers/BuoyancyController.cc \
+					../../../../../../source/2d/controllers/core/GroupedSceneController.cc \
+					../../../../../../source/2d/controllers/core/PickingSceneController.cc \
+					../../../../../../source/2d/controllers/PointForceController.cc \
+					../../../../../../source/2d/core/BatchRender.cc \
+					../../../../../../source/2d/core/CoreMath.cc \
+					../../../../../../source/2d/core/ImageFrameProvider.cc \
+					../../../../../../source/2d/core/ImageFrameProviderCore.cc \
+					../../../../../../source/2d/core/ParticleSystem.cc \
+					../../../../../../source/2d/core/RenderProxy.cc \
+					../../../../../../source/2d/core/SpriteBase.cc \
+					../../../../../../source/2d/core/SpriteBatch.cc \
+					../../../../../../source/2d/core/SpriteBatchItem.cc \
+					../../../../../../source/2d/core/SpriteBatchQuery.cc \
+					../../../../../../source/2d/core/Utility.cc \
+					../../../../../../source/2d/core/Vector2.cc \
+					../../../../../../source/2d/experimental/composites/WaveComposite.cc \
+					../../../../../../source/2d/gui/guiImageButtonCtrl.cc \
+					../../../../../../source/2d/gui/guiSceneObjectCtrl.cc \
+					../../../../../../source/2d/gui/guiSpriteCtrl.cc \
+					../../../../../../source/2d/gui/SceneWindow.cc \
+					../../../../../../source/2d/sceneobject/CompositeSprite.cc \
+					../../../../../../source/2d/sceneobject/ImageFont.cc \
+					../../../../../../source/2d/sceneobject/ParticlePlayer.cc \
+					../../../../../../source/2d/sceneobject/SceneObject.cc \
+					../../../../../../source/2d/sceneobject/SceneObjectList.cc \
+					../../../../../../source/2d/sceneobject/SceneObjectSet.cc \
+					../../../../../../source/2d/sceneobject/Scroller.cc \
+					../../../../../../source/2d/sceneobject/ShapeVector.cc \
+					../../../../../../source/2d/sceneobject/SkeletonObject.cc \
+					../../../../../../source/2d/sceneobject/Sprite.cc \
+					../../../../../../source/2d/sceneobject/Trigger.cc \
+					../../../../../../source/2d/scene/ContactFilter.cc \
+					../../../../../../source/2d/scene/DebugDraw.cc \
+					../../../../../../source/2d/scene/Scene.cc \
+					../../../../../../source/2d/scene/SceneRenderFactories.cpp \
+					../../../../../../source/2d/scene/SceneRenderQueue.cpp \
+					../../../../../../source/2d/scene/WorldQuery.cc \
+					../../../../../../source/algorithm/crc.cc \
+					../../../../../../source/algorithm/hashFunction.cc \
+					../../../../../../source/assets/assetBase.cc \
+					../../../../../../source/assets/assetFieldTypes.cc \
+					../../../../../../source/assets/assetManager.cc \
+					../../../../../../source/assets/assetQuery.cc \
+					../../../../../../source/assets/assetTagsManifest.cc \
+					../../../../../../source/assets/declaredAssets.cc \
+					../../../../../../source/assets/referencedAssets.cc \
+					../../../../../../source/audio/AudioAsset.cc \
+					../../../../../../source/Box2D/Collision/b2BroadPhase.cpp \
+					../../../../../../source/Box2D/Collision/b2CollideCircle.cpp \
+					../../../../../../source/Box2D/Collision/b2CollideEdge.cpp \
+					../../../../../../source/Box2D/Collision/b2CollidePolygon.cpp \
+					../../../../../../source/Box2D/Collision/b2Collision.cpp \
+					../../../../../../source/Box2D/Collision/b2Distance.cpp \
+					../../../../../../source/Box2D/Collision/b2DynamicTree.cpp \
+					../../../../../../source/Box2D/Collision/b2TimeOfImpact.cpp \
+					../../../../../../source/Box2D/Collision/Shapes/b2ChainShape.cpp \
+					../../../../../../source/Box2D/Collision/Shapes/b2CircleShape.cpp \
+					../../../../../../source/Box2D/Collision/Shapes/b2EdgeShape.cpp \
+					../../../../../../source/Box2D/Collision/Shapes/b2PolygonShape.cpp \
+					../../../../../../source/Box2D/Common/b2BlockAllocator.cpp \
+					../../../../../../source/Box2D/Common/b2Draw.cpp \
+					../../../../../../source/Box2D/Common/b2Math.cpp \
+					../../../../../../source/Box2D/Common/b2Settings.cpp \
+					../../../../../../source/Box2D/Common/b2StackAllocator.cpp \
+					../../../../../../source/Box2D/Common/b2Timer.cpp \
+					../../../../../../source/Box2D/Dynamics/b2Body.cpp \
+					../../../../../../source/Box2D/Dynamics/b2ContactManager.cpp \
+					../../../../../../source/Box2D/Dynamics/b2Fixture.cpp \
+					../../../../../../source/Box2D/Dynamics/b2Island.cpp \
+					../../../../../../source/Box2D/Dynamics/b2World.cpp \
+					../../../../../../source/Box2D/Dynamics/b2WorldCallbacks.cpp \
+					../../../../../../source/Box2D/Dynamics/Contacts/b2ChainAndCircleContact.cpp \
+					../../../../../../source/Box2D/Dynamics/Contacts/b2ChainAndPolygonContact.cpp \
+					../../../../../../source/Box2D/Dynamics/Contacts/b2CircleContact.cpp \
+					../../../../../../source/Box2D/Dynamics/Contacts/b2Contact.cpp \
+					../../../../../../source/Box2D/Dynamics/Contacts/b2ContactSolver.cpp \
+					../../../../../../source/Box2D/Dynamics/Contacts/b2EdgeAndCircleContact.cpp \
+					../../../../../../source/Box2D/Dynamics/Contacts/b2EdgeAndPolygonContact.cpp \
+					../../../../../../source/Box2D/Dynamics/Contacts/b2PolygonAndCircleContact.cpp \
+					../../../../../../source/Box2D/Dynamics/Contacts/b2PolygonContact.cpp \
+					../../../../../../source/Box2D/Dynamics/Joints/b2DistanceJoint.cpp \
+					../../../../../../source/Box2D/Dynamics/Joints/b2FrictionJoint.cpp \
+					../../../../../../source/Box2D/Dynamics/Joints/b2GearJoint.cpp \
+					../../../../../../source/Box2D/Dynamics/Joints/b2Joint.cpp \
+					../../../../../../source/Box2D/Dynamics/Joints/b2MotorJoint.cpp \
+					../../../../../../source/Box2D/Dynamics/Joints/b2MouseJoint.cpp \
+					../../../../../../source/Box2D/Dynamics/Joints/b2PrismaticJoint.cpp \
+					../../../../../../source/Box2D/Dynamics/Joints/b2PulleyJoint.cpp \
+					../../../../../../source/Box2D/Dynamics/Joints/b2RevoluteJoint.cpp \
+					../../../../../../source/Box2D/Dynamics/Joints/b2RopeJoint.cpp \
+					../../../../../../source/Box2D/Dynamics/Joints/b2WeldJoint.cpp \
+					../../../../../../source/Box2D/Dynamics/Joints/b2WheelJoint.cpp \
+					../../../../../../source/Box2D/Rope/b2Rope.cpp \
+					../../../../../../source/collection/bitTables.cc \
+					../../../../../../source/collection/hashTable.cc \
+					../../../../../../source/collection/nameTags.cpp \
+					../../../../../../source/collection/undo.cc \
+					../../../../../../source/collection/vector.cc \
+					../../../../../../source/console/consoleBaseType.cc \
+					../../../../../../source/console/consoleDictionary.cc \
+					../../../../../../source/console/consoleExprEvalState.cc \
+					../../../../../../source/console/consoleNamespace.cc \
+					../../../../../../source/console/ConsoleTypeValidators.cc \
+					../../../../../../source/console/metaScripting_ScriptBinding.cc \
+					../../../../../../source/debug/profiler.cc \
+					../../../../../../source/debug/remote/RemoteDebugger1.cc \
+					../../../../../../source/debug/remote/RemoteDebuggerBase.cc \
+					../../../../../../source/debug/remote/RemoteDebuggerBridge.cc \
+					../../../../../../source/debug/telnetDebugger.cc \
+					../../../../../../source/delegates/delegateSignal.cpp \
+					../../../../../../source/game/defaultGame.cc \
+					../../../../../../source/game/gameInterface.cc \
+					../../../../../../source/graphics/bitmapBmp.cc \
+					../../../../../../source/graphics/bitmapJpeg.cc \
+					../../../../../../source/graphics/bitmapPng.cc \
+					../../../../../../source/graphics/color.cc \
+					../../../../../../source/graphics/dgl.cc \
+					../../../../../../source/graphics/dglMatrix.cc \
+					../../../../../../source/graphics/DynamicTexture.cc \
+					../../../../../../source/graphics/gBitmap.cc \
+					../../../../../../source/graphics/gFont.cc \
+					../../../../../../source/graphics/gPalette.cc \
+					../../../../../../source/graphics/PNGImage.cpp \
+					../../../../../../source/graphics/splineUtil.cc \
+					../../../../../../source/graphics/TextureDictionary.cc \
+					../../../../../../source/graphics/TextureHandle.cc \
+					../../../../../../source/graphics/TextureManager.cc \
+					../../../../../../source/gui/containers/guiGridCtrl.cc \
+					../../../../../../source/gui/guiArrayCtrl.cc \
+					../../../../../../source/gui/guiBackgroundCtrl.cc \
+					../../../../../../source/gui/guiBitmapBorderCtrl.cc \
+					../../../../../../source/gui/guiBitmapCtrl.cc \
+					../../../../../../source/gui/guiBubbleTextCtrl.cc \
+					../../../../../../source/gui/guiCanvas.cc \
+					../../../../../../source/gui/guiColorPicker.cc \
+					../../../../../../source/gui/guiConsole.cc \
+					../../../../../../source/gui/guiConsoleEditCtrl.cc \
+					../../../../../../source/gui/guiConsoleTextCtrl.cc \
+					../../../../../../source/gui/guiControl.cc \
+					../../../../../../source/gui/guiDefaultControlRender.cc \
+					../../../../../../source/gui/guiFadeinBitmapCtrl.cc \
+					../../../../../../source/gui/guiInputCtrl.cc \
+					../../../../../../source/gui/guiListBoxCtrl.cc \
+					../../../../../../source/gui/guiMessageVectorCtrl.cc \
+					../../../../../../source/gui/guiMLTextCtrl.cc \
+					../../../../../../source/gui/guiMLTextEditCtrl.cc \
+					../../../../../../source/gui/guiMouseEventCtrl.cc \
+					../../../../../../source/gui/guiPopUpCtrl.cc \
+					../../../../../../source/gui/guiPopUpCtrlEx.cc \
+					../../../../../../source/gui/guiProgressCtrl.cc \
+					../../../../../../source/gui/guiScriptNotifyControl.cc \
+					../../../../../../source/gui/guiSliderCtrl.cc \
+					../../../../../../source/gui/guiTabPageCtrl.cc \
+					../../../../../../source/gui/guiTextCtrl.cc \
+					../../../../../../source/gui/guiTextEditCtrl.cc \
+					../../../../../../source/gui/guiTextEditSliderCtrl.cc \
+					../../../../../../source/gui/guiTextListCtrl.cc \
+					../../../../../../source/gui/guiTickCtrl.cc \
+					../../../../../../source/gui/guiTreeViewCtrl.cc \
+					../../../../../../source/gui/guiTypes.cc \
+					../../../../../../source/gui/language/lang.cc \
+					../../../../../../source/gui/messageVector.cc \
+					../../../../../../source/input/actionMap.cc \
+					../../../../../../source/io/bitStream.cc \
+					../../../../../../source/io/bufferStream.cc \
+					../../../../../../source/io/fileObject.cc \
+					../../../../../../source/io/fileStream.cc \
+					../../../../../../source/io/fileStreamObject.cc \
+					../../../../../../source/io/fileSystem_ScriptBinding.cc \
+					../../../../../../source/io/filterStream.cc \
+					../../../../../../source/io/memStream.cc \
+					../../../../../../source/io/nStream.cc \
+					../../../../../../source/io/resizeStream.cc \
+					../../../../../../source/io/resource/resourceDictionary.cc \
+					../../../../../../source/io/resource/resourceManager.cc \
+					../../../../../../source/io/streamObject.cc \
+					../../../../../../source/io/zip/centralDir.cc \
+					../../../../../../source/io/zip/compressor.cc \
+					../../../../../../source/io/zip/deflate.cc \
+					../../../../../../source/io/zip/extraField.cc \
+					../../../../../../source/io/zip/fileHeader.cc \
+					../../../../../../source/io/zip/stored.cc \
+					../../../../../../source/io/zip/zipArchive.cc \
+					../../../../../../source/io/zip/zipCryptStream.cc \
+					../../../../../../source/io/zip/zipObject.cc \
+					../../../../../../source/io/zip/zipSubStream.cc \
+					../../../../../../source/io/zip/zipTempStream.cc \
+					../../../../../../source/math/rectClipper.cpp \
+					../../../../../../source/memory/dataChunker.cc \
+					../../../../../../source/memory/frameAllocator_ScriptBinding.cc \
+					../../../../../../source/messaging/dispatcher.cc \
+					../../../../../../source/messaging/eventManager.cc \
+					../../../../../../source/messaging/message.cc \
+					../../../../../../source/messaging/messageForwarder.cc \
+					../../../../../../source/messaging/scriptMsgListener.cc \
+					../../../../../../source/module/moduleDefinition.cc \
+					../../../../../../source/module/moduleManager.cc \
+					../../../../../../source/module/moduleMergeDefinition.cc \
+					../../../../../../source/network/connectionProtocol.cc \
+					../../../../../../source/network/connectionStringTable.cc \
+					../../../../../../source/network/httpObject.cc \
+					../../../../../../source/network/netConnection.cc \
+					../../../../../../source/network/netDownload.cc \
+					../../../../../../source/network/netEvent.cc \
+					../../../../../../source/network/netGhost.cc \
+					../../../../../../source/network/netInterface.cc \
+					../../../../../../source/network/netObject.cc \
+					../../../../../../source/network/netStringTable.cc \
+					../../../../../../source/network/netTest.cc \
+					../../../../../../source/network/networkProcessList.cc \
+					../../../../../../source/network/RemoteCommandEvent.cc \
+					../../../../../../source/network/serverQuery.cc \
+					../../../../../../source/network/tcpObject.cc \
+					../../../../../../source/network/telnetConsole.cc \
+					../../../../../../source/persistence/taml/binary/tamlBinaryReader.cc \
+					../../../../../../source/persistence/taml/binary/tamlBinaryWriter.cc \
+					../../../../../../source/persistence/taml/json/tamlJSONParser.cc \
+					../../../../../../source/persistence/taml/json/tamlJSONReader.cc \
+					../../../../../../source/persistence/taml/json/tamlJSONWriter.cc \
+					../../../../../../source/persistence/taml/taml.cc \
+					../../../../../../source/persistence/taml/tamlCustom.cc \
+					../../../../../../source/persistence/taml/tamlWriteNode.cc \
+					../../../../../../source/persistence/taml/xml/tamlXmlParser.cc \
+					../../../../../../source/persistence/taml/xml/tamlXmlReader.cc \
+					../../../../../../source/persistence/taml/xml/tamlXmlWriter.cc \
+					../../../../../../source/persistence/tinyXML/tinystr.cpp \
+					../../../../../../source/persistence/tinyXML/tinyxml.cpp \
+					../../../../../../source/persistence/tinyXML/tinyxmlerror.cpp \
+					../../../../../../source/persistence/tinyXML/tinyxmlparser.cpp \
+					../../../../../../source/audio/audio.cc \
+					../../../../../../source/audio/audioBuffer.cc \
+					../../../../../../source/audio/audioDataBlock.cc \
+					../../../../../../source/audio/audio_ScriptBinding.cc \
+					../../../../../../source/audio/audioStreamSourceFactory.cc \
+					../../../../../../source/audio/wavStreamSource.cc \
+					../../../../../../source/component/dynamicConsoleMethodComponent.cpp \
+					../../../../../../source/component/simComponent.cpp \
+					../../../../../../source/component/behaviors/behaviorComponent.cpp \
+					../../../../../../source/component/behaviors/behaviorInstance.cpp \
+					../../../../../../source/component/behaviors/behaviorTemplate.cpp \
+					../../../../../../source/console/astAlloc.cc \
+					../../../../../../source/console/astNodes.cc \
+					../../../../../../source/console/cmdgram.cc \
+					../../../../../../source/console/CMDscan.cc \
+					../../../../../../source/console/codeBlock.cc \
+					../../../../../../source/console/compiledEval.cc \
+					../../../../../../source/console/compiler.cc \
+					../../../../../../source/console/console.cc \
+					../../../../../../source/console/consoleDoc.cc \
+					../../../../../../source/console/consoleFunctions.cc \
+					../../../../../../source/console/consoleLogger.cc \
+					../../../../../../source/console/consoleObject.cc \
+					../../../../../../source/console/consoleParser.cc \
+					../../../../../../source/console/consoleTypes.cc \
+					../../../../../../source/game/gameConnection.cc \
+					../../../../../../source/game/version.cc \
+					../../../../../../source/math/math_ScriptBinding.cc \
+					../../../../../../source/math/mathTypes.cc \
+					../../../../../../source/math/mathUtils.cc \
+					../../../../../../source/math/mBox.cc \
+					../../../../../../source/math/mMath_C.cc \
+					../../../../../../source/math/mMathAltivec.cc \
+					../../../../../../source/math/mMathAMD.cc \
+					../../../../../../source/math/mMathFn.cc \
+					../../../../../../source/math/mMathSSE.cc \
+					../../../../../../source/math/mMatrix.cc \
+					../../../../../../source/math/mPlaneTransformer.cc \
+					../../../../../../source/math/mQuadPatch.cc \
+					../../../../../../source/math/mQuat.cc \
+					../../../../../../source/math/mRandom.cc \
+					../../../../../../source/math/mSolver.cc \
+					../../../../../../source/math/mSplinePatch.cc \
+					../../../../../../source/math/mPoint.cpp \
+					../../../../../../source/persistence/SimXMLDocument.cpp \
+					../../../../../../source/platform/CursorManager.cc \
+					../../../../../../source/platform/nativeDialogs/fileDialog.cc \
+					../../../../../../source/platform/platform.cc \
+					../../../../../../source/platform/platformAssert.cc \
+					../../../../../../source/platform/platformCPU.cc \
+					../../../../../../source/platform/platformFileIO.cc \
+					../../../../../../source/platform/platformFont.cc \
+					../../../../../../source/platform/platformMemory.cc \
+					../../../../../../source/platform/platformNetwork_ScriptBinding.cc \
+					../../../../../../source/platform/platformString.cc \
+					../../../../../../source/platform/platformVideo.cc \
+					../../../../../../source/platform/platformNetAsync.unix.cc \
+					../../../../../../source/platform/menus/popupMenu.cc \
+					../../../../../../source/platform/nativeDialogs/msgBox.cpp \
+					../../../../../../source/platform/Tickable.cc \
+					../../../../../../source/platformAndroid/AndroidAlerts.cpp \
+					../../../../../../source/platformAndroid/AndroidAudio.cpp \
+					../../../../../../source/platformAndroid/AndroidConsole.cpp \
+					../../../../../../source/platformAndroid/AndroidCPUInfo.cpp \
+					../../../../../../source/platformAndroid/AndroidDialogs.cpp \
+					../../../../../../source/platformAndroid/AndroidEvents.cpp \
+					../../../../../../source/platformAndroid/AndroidFileio.cpp \
+					../../../../../../source/platformAndroid/AndroidFont.cpp \
+					../../../../../../source/platformAndroid/AndroidGL.cpp \
+					../../../../../../source/platformAndroid/AndroidGL2ES.cpp \
+					../../../../../../source/platformAndroid/AndroidInput.cpp \
+					../../../../../../source/platformAndroid/AndroidMath.cpp \
+					../../../../../../source/platformAndroid/AndroidMemory.cpp \
+					../../../../../../source/platformAndroid/AndroidMutex.cpp \
+					../../../../../../source/platformAndroid/AndroidNet.cpp \
+					../../../../../../source/platformAndroid/AndroidOGLVideo.cpp \
+					../../../../../../source/platformAndroid/AndroidOutlineGL.cpp \
+					../../../../../../source/platformAndroid/AndroidPlatform.cpp \
+					../../../../../../source/platformAndroid/AndroidProcessControl.cpp \
+					../../../../../../source/platformAndroid/AndroidProfiler.cpp \
+					../../../../../../source/platformAndroid/AndroidSemaphore.cpp \
+					../../../../../../source/platformAndroid/AndroidStreamSource.cc \
+					../../../../../../source/platformAndroid/AndroidStrings.cpp \
+					../../../../../../source/platformAndroid/AndroidThread.cpp \
+					../../../../../../source/platformAndroid/AndroidTime.cpp \
+					../../../../../../source/platformAndroid/AndroidUtil.cpp \
+					../../../../../../source/platformAndroid/AndroidWindow.cpp \
+					../../../../../../source/platformAndroid/main.cpp \
+					../../../../../../source/platformAndroid/T2DActivity.cpp \
+					../../../../../../source/platformAndroid/menus/popupMenu.cpp \
+					../../../../../../source/sim/scriptGroup.cc \
+					../../../../../../source/sim/scriptObject.cc \
+					../../../../../../source/sim/simBase.cc \
+					../../../../../../source/sim/simConsoleEvent.cc \
+					../../../../../../source/sim/simConsoleThreadExecEvent.cc \
+					../../../../../../source/sim/simDatablock.cc \
+					../../../../../../source/sim/simDictionary.cc \
+					../../../../../../source/sim/simFieldDictionary.cc \
+					../../../../../../source/sim/simManager.cc \
+					../../../../../../source/sim/simObject.cc \
+					../../../../../../source/sim/SimObjectList.cc \
+					../../../../../../source/sim/simSerialize.cpp \
+					../../../../../../source/sim/simSet.cc \
+					../../../../../../source/spine/Animation.c \
+					../../../../../../source/spine/AnimationState.c \
+					../../../../../../source/spine/AnimationStateData.c \
+					../../../../../../source/spine/Atlas.c \
+					../../../../../../source/spine/AtlasAttachmentLoader.c \
+					../../../../../../source/spine/Attachment.c \
+					../../../../../../source/spine/AttachmentLoader.c \
+					../../../../../../source/spine/Bone.c \
+					../../../../../../source/spine/BoneData.c \
+					../../../../../../source/spine/BoundingBoxAttachment.c \
+					../../../../../../source/spine/Event.c \
+					../../../../../../source/spine/EventData.c \
+					../../../../../../source/spine/extension.c \
+					../../../../../../source/spine/Json.c \
+					../../../../../../source/spine/RegionAttachment.c \
+					../../../../../../source/spine/Skeleton.c \
+					../../../../../../source/spine/SkeletonBounds.c \
+					../../../../../../source/spine/SkeletonData.c \
+					../../../../../../source/spine/SkeletonJson.c \
+					../../../../../../source/spine/Skin.c \
+					../../../../../../source/spine/Slot.c \
+					../../../../../../source/spine/SlotData.c \
+					../../../../../../source/string/findMatch.cc \
+					../../../../../../source/string/stringBuffer.cc \
+					../../../../../../source/string/stringStack.cc \
+					../../../../../../source/string/stringTable.cc \
+					../../../../../../source/string/stringUnit.cpp \
+					../../../../../../source/string/unicode.cc \
+					../../../../../../source/gui/buttons/guiBitmapButtonCtrl.cc \
+					../../../../../../source/gui/buttons/guiBorderButton.cc \
+					../../../../../../source/gui/buttons/guiButtonBaseCtrl.cc \
+					../../../../../../source/gui/buttons/guiButtonCtrl.cc \
+					../../../../../../source/gui/buttons/guiCheckBoxCtrl.cc \
+					../../../../../../source/gui/buttons/guiIconButtonCtrl.cc \
+					../../../../../../source/gui/buttons/guiRadioCtrl.cc \
+					../../../../../../source/gui/buttons/guiToolboxButtonCtrl.cc \
+					../../../../../../source/gui/containers/guiAutoScrollCtrl.cc \
+					../../../../../../source/gui/containers/guiCtrlArrayCtrl.cc \
+					../../../../../../source/gui/containers/guiDragAndDropCtrl.cc \
+					../../../../../../source/gui/containers/guiDynamicCtrlArrayCtrl.cc \
+					../../../../../../source/gui/containers/guiFormCtrl.cc \
+					../../../../../../source/gui/containers/guiFrameCtrl.cc \
+					../../../../../../source/gui/containers/guiPaneCtrl.cc \
+					../../../../../../source/gui/containers/guiRolloutCtrl.cc \
+					../../../../../../source/gui/containers/guiScrollCtrl.cc \
+					../../../../../../source/gui/containers/guiStackCtrl.cc \
+					../../../../../../source/gui/containers/guiTabBookCtrl.cc \
+					../../../../../../source/gui/containers/guiWindowCtrl.cc \
+					../../../../../../source/gui/editor/guiControlListPopup.cc \
+					../../../../../../source/gui/editor/guiDebugger.cc \
+					../../../../../../source/gui/editor/guiEditCtrl.cc \
+					../../../../../../source/gui/editor/guiFilterCtrl.cc \
+					../../../../../../source/gui/editor/guiGraphCtrl.cc \
+					../../../../../../source/gui/editor/guiImageList.cc \
+					../../../../../../source/gui/editor/guiInspector.cc \
+					../../../../../../source/gui/editor/guiInspectorTypes.cc \
+					../../../../../../source/gui/editor/guiMenuBar.cc \
+					../../../../../../source/gui/editor/guiSeparatorCtrl.cc 
+#					../../../../../../source/testing/tests/platformFileIoTests.cc \
+#					../../../../../../source/testing/tests/platformMemoryTests.cc \
+#					../../../../../../source/testing/tests/platformStringTests.cc \
+#					../../../../../../source/testing/unitTesting.cc
+ 
+ifeq ($(APP_OPTIM),debug)
+	LOCAL_CFLAGS := -DENABLE_CONSOLE_MSGS -D__ANDROID__ -DTORQUE_DEBUG -DTORQUE_OS_ANDROID -DGL_GLEXT_PROTOTYPES -O0 -fsigned-char   
+else
+	LOCAL_CFLAGS := -DENABLE_CONSOLE_MSGS -D__ANDROID__ -DTORQUE_OS_ANDROID -DGL_GLEXT_PROTOTYPES -O3 -fsigned-char   
+endif				   
+LOCAL_LDLIBS    := -llog -landroid -lEGL -lGLESv1_CM -lz -lOpenSLES -L../../../../../../lib/openal/Android/$(TARGET_ARCH_ABI)
+LOCAL_STATIC_LIBRARIES := android_native_app_glue freetype-prebuilt
+LOCAL_SHARED_LIBRARIES := libopenal-prebuilt
+
+LOCAL_ARM_MODE := arm
+
+include $(BUILD_SHARED_LIBRARY)
+
+$(call import-module,android/native_app_glue)
+

+ 4 - 0
engine/compilers/android-studio/app/src/main/jni/Application.mk

@@ -0,0 +1,4 @@
+APP_PLATFORM := android-10
+APP_STL := stlport_static
+APP_OPTIM := release
+APP_ABI   := armeabi-v7a

BIN
engine/compilers/android-studio/app/src/main/res/drawable-hdpi/ic_launcher.png


BIN
engine/compilers/android-studio/app/src/main/res/drawable-ldpi/ic_launcher.png


BIN
engine/compilers/android-studio/app/src/main/res/drawable-mdpi/ic_launcher.png


BIN
engine/compilers/android-studio/app/src/main/res/drawable-xhdpi/ic_launcher.png


+ 3 - 0
engine/compilers/android-studio/app/src/main/res/menu/activity_main.xml

@@ -0,0 +1,3 @@
+<menu xmlns:android="http://schemas.android.com/apk/res/android" >
+
+</menu>

+ 11 - 0
engine/compilers/android-studio/app/src/main/res/values-v11/styles.xml

@@ -0,0 +1,11 @@
+<resources>
+
+    <!--
+        Base application theme for API 11+. This theme completely replaces
+        AppBaseTheme from res/values/styles.xml on API 11+ devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.NoTitleBar.Fullscreen">
+        <!-- API 11 theme customizations can go here. -->
+    </style>
+
+</resources>

+ 12 - 0
engine/compilers/android-studio/app/src/main/res/values-v14/styles.xml

@@ -0,0 +1,12 @@
+<resources>
+
+    <!--
+        Base application theme for API 14+. This theme completely replaces
+        AppBaseTheme from BOTH res/values/styles.xml and
+        res/values-v11/styles.xml on API 14+ devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.NoTitleBar.Fullscreen">
+        <!-- API 14 theme customizations can go here. -->
+    </style>
+
+</resources>

+ 5 - 0
engine/compilers/android-studio/app/src/main/res/values/strings.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="app_name">Torque2D</string>
+
+</resources>

+ 20 - 0
engine/compilers/android-studio/app/src/main/res/values/styles.xml

@@ -0,0 +1,20 @@
+<resources>
+
+    <!--
+        Base application theme, dependent on API level. This theme is replaced
+        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.NoTitleBar.Fullscreen">
+        <!--
+            Theme customizations available in newer API levels can go in
+            res/values-vXX/styles.xml, while customizations related to
+            backward-compatibility can go here.
+        -->
+    </style>
+
+    <!-- Application theme. -->
+    <style name="AppTheme" parent="AppBaseTheme">
+        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
+    </style>
+
+</resources>

+ 15 - 0
engine/compilers/android-studio/build.gradle

@@ -0,0 +1,15 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+buildscript {
+    repositories {
+        jcenter()
+    }
+    dependencies {
+        classpath 'com.android.tools.build:gradle:1.2.3'
+    }
+}
+
+allprojects {
+    repositories {
+        jcenter()
+    }
+}

BIN
engine/compilers/android-studio/gradle/wrapper/gradle-wrapper.jar


+ 6 - 0
engine/compilers/android-studio/gradle/wrapper/gradle-wrapper.properties

@@ -0,0 +1,6 @@
+#Wed Apr 10 15:27:10 PDT 2013
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip

+ 164 - 0
engine/compilers/android-studio/gradlew

@@ -0,0 +1,164 @@
+#!/usr/bin/env bash
+
+##############################################################################
+##
+##  Gradle start up script for UN*X
+##
+##############################################################################
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn ( ) {
+    echo "$*"
+}
+
+die ( ) {
+    echo
+    echo "$*"
+    echo
+    exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+case "`uname`" in
+  CYGWIN* )
+    cygwin=true
+    ;;
+  Darwin* )
+    darwin=true
+    ;;
+  MINGW* )
+    msys=true
+    ;;
+esac
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched.
+if $cygwin ; then
+    [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+fi
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+        PRG="$link"
+    else
+        PRG=`dirname "$PRG"`"/$link"
+    fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >&-
+APP_HOME="`pwd -P`"
+cd "$SAVED" >&-
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+        # IBM's JDK on AIX uses strange locations for the executables
+        JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+        JAVACMD="$JAVA_HOME/bin/java"
+    fi
+    if [ ! -x "$JAVACMD" ] ; then
+        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+else
+    JAVACMD="java"
+    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
+    MAX_FD_LIMIT=`ulimit -H -n`
+    if [ $? -eq 0 ] ; then
+        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+            MAX_FD="$MAX_FD_LIMIT"
+        fi
+        ulimit -n $MAX_FD
+        if [ $? -ne 0 ] ; then
+            warn "Could not set maximum file descriptor limit: $MAX_FD"
+        fi
+    else
+        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+    fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+
+    # We build the pattern for arguments to be converted via cygpath
+    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+    SEP=""
+    for dir in $ROOTDIRSRAW ; do
+        ROOTDIRS="$ROOTDIRS$SEP$dir"
+        SEP="|"
+    done
+    OURCYGPATTERN="(^($ROOTDIRS))"
+    # Add a user-defined pattern to the cygpath arguments
+    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+    fi
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    i=0
+    for arg in "$@" ; do
+        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
+
+        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
+            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+        else
+            eval `echo args$i`="\"$arg\""
+        fi
+        i=$((i+1))
+    done
+    case $i in
+        (0) set -- ;;
+        (1) set -- "$args0" ;;
+        (2) set -- "$args0" "$args1" ;;
+        (3) set -- "$args0" "$args1" "$args2" ;;
+        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+    esac
+fi
+
+# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
+function splitJvmOpts() {
+    JVM_OPTS=("$@")
+}
+eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
+JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
+
+exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"

+ 90 - 0
engine/compilers/android-studio/gradlew.bat

@@ -0,0 +1,90 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem  Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windowz variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+if "%@eval[2+2]" == "4" goto 4NT_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+goto execute
+
+:4NT_args
+@rem Get arguments from the 4NT Shell from JP Software
+set CMD_LINE_ARGS=%$
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega

+ 42 - 0
engine/compilers/android-studio/import-summary.txt

@@ -0,0 +1,42 @@
+ECLIPSE ANDROID PROJECT IMPORT SUMMARY
+======================================
+
+Ignored Files:
+--------------
+The following files were *not* copied into the new Gradle project; you
+should evaluate whether these are still needed in your project and if
+so manually move them:
+
+* .externalToolBuilders/
+* .externalToolBuilders/NDK Builder.launch
+* NDKKeyboardBugFix/
+* NDKKeyboardBugFix/android_native_app_glue.c
+* build.xml
+* ic_launcher-web.png
+
+Moved Files:
+------------
+Android Gradle projects use a different directory structure than ADT
+Eclipse projects. Here's how the projects were restructured:
+
+* AndroidManifest.xml => app/src/main/AndroidManifest.xml
+* assets/ => app/src/main/assets/
+* jni/ => app/src/main/jni/
+* lint.xml => app/lint.xml
+* res/ => app/src/main/res/
+* src/ => app/src/main/java/
+
+Next Steps:
+-----------
+You can now build the project. The Gradle project needs network
+connectivity to download dependencies.
+
+Bugs:
+-----
+If for some reason your project does not build, and you determine that
+it is due to a bug or limitation of the Eclipse to Gradle importer,
+please file a bug at http://b.android.com with category
+Component-Tools.
+
+(This import summary is for your information only, and can be deleted
+after import once you are satisfied with the results.)

+ 1 - 0
engine/compilers/android-studio/settings.gradle

@@ -0,0 +1 @@
+include ':app'