From b292e529009a621dd61c9e8d06b24a15e09081c8 Mon Sep 17 00:00:00 2001 From: pelya Date: Tue, 5 Oct 2010 15:47:30 +0300 Subject: [PATCH] CrystaX toolchain now can be specified through ChangeAppSettings.sh --- ChangeAppSettings.sh | 12 ++++++++++-- RecompileAllApps.sh | 6 +++++- build.sh | 6 +++++- project/AndroidManifest.xml | 6 +++--- project/jni/Android.mk | 14 +++++++------- project/jni/Application.mk | 2 +- project/jni/application/src | 2 +- project/res/values/strings.xml | 2 +- project/src/Accelerometer.java | 2 +- project/src/AssetExtract.java | 2 +- project/src/Audio.java | 2 +- project/src/DataDownloader.java | 2 +- project/src/GLSurfaceView_SDL.java | 2 +- project/src/Globals.java | 10 +++++----- project/src/MainActivity.java | 2 +- project/src/Settings.java | 2 +- project/src/Video.java | 2 +- readme.txt | 14 +++++++++++++- 18 files changed, 59 insertions(+), 31 deletions(-) diff --git a/ChangeAppSettings.sh b/ChangeAppSettings.sh index 87dde537c..3d3525fd0 100755 --- a/ChangeAppSettings.sh +++ b/ChangeAppSettings.sh @@ -1,6 +1,6 @@ #!/bin/sh -CHANGE_APP_SETTINGS_VERSION=9 +CHANGE_APP_SETTINGS_VERSION=10 AUTO= if [ "X$1" = "X-a" ]; then @@ -183,6 +183,13 @@ if [ -n "$var" ] ; then AppSubdirsBuild="$var" fi +echo -n "\nApplication requires C++ RTTI and exceptions - you will need CrystaX toolchain installed at\n" +echo -n `which ndk-build | sed 's@/[^/]*/ndk-build@/android-ndk-r4-crystax@'` "(y) or (n) ($AppUseCrystaXToolchain): " +read var +if [ -n "$var" ] ; then + AppUseCrystaXToolchain="$var" +fi + echo -n "\nHere you may type some short readme text that will be shown when app data is downloaded." echo -n "\nCurrent text:\n" echo -n "`echo $ReadmeText | tr '^' '\\n'`" @@ -231,6 +238,7 @@ echo CustomBuildScript=$CustomBuildScript >> AndroidAppSettings.cfg echo AppCflags=\'$AppCflags\' >> AndroidAppSettings.cfg echo AppLdflags=\'$AppLdflags\' >> AndroidAppSettings.cfg echo AppSubdirsBuild=\'$AppSubdirsBuild\' >> AndroidAppSettings.cfg +echo AppUseCrystaXToolchain=$AppUseCrystaXToolchain >> AndroidAppSettings.cfg echo ReadmeText=\'$ReadmeText\' >> AndroidAppSettings.cfg AppShortName=`echo $AppName | sed 's/ //g'` @@ -399,7 +407,7 @@ if [ "$LibSdlVersionOld" '!=' "$LibSdlVersion" ]; then rm -rf project/$OUT/local/*/objs/application project/$OUT/local/*/libapplication.so fi # Do not rebuild libraries that do not need that -find project/$OUT/local -name "*.[oa]" -exec touch '{}' \; +# find project/$OUT/local -name "*.[oa]" -exec touch '{}' \; done echo Done diff --git a/RecompileAllApps.sh b/RecompileAllApps.sh index 70e796819..bd8db114f 100755 --- a/RecompileAllApps.sh +++ b/RecompileAllApps.sh @@ -35,9 +35,13 @@ for APP1 in project/jni/application/*/AppSettings.cfg; do rm -rf project/bin/ndk/local/*/libapplication.so project/bin/ndk/local/*/objs/application rm -rf project/bin/ndk/local/*/libsdl*.so project/bin/ndk/local/*/objs/sdl* ./ChangeAppSettings.sh -a + NDKBUILD=ndk-build + if grep "AppUseCrystaXToolchain=y" AndroidAppSettings.cfg > /dev/null ; then + NDKBUILD=`which ndk-build | sed 's@/[^/]*/ndk-build@/android-ndk-r4-crystax@'`/ndk-build + fi echo Compiling $APP OLDPATH="`pwd`" - ( cd project && nice -n5 ndk-build -j2 V=1 && ant release && \ + ( cd project && nice -n5 $NDKBUILD -j2 V=1 && ant release && \ jarsigner -verbose -keystore "$KEYSTORE" -storepass "$PASSWORD" bin/DemoActivity-unsigned.apk $ALIAS && \ zipalign 4 bin/DemoActivity-unsigned.apk ../$APP.apk && cd .. ) || exit 1 done diff --git a/build.sh b/build.sh index 15c22d53c..ef343bfdd 100755 --- a/build.sh +++ b/build.sh @@ -4,6 +4,10 @@ # export PATH=$PATH:~/src/endless_space/android-ndk-r4b # Set environment to CrystaX NDK with RTTI and exceptions instead of original NDK # export PATH=$PATH:~/src/endless_space/android-ndk-r4-crystax/ndk-build +NDKBUILD=ndk-build +if grep "AppUseCrystaXToolchain=y" AndroidAppSettings.cfg > /dev/null ; then + NDKBUILD=`which ndk-build | sed 's@/[^/]*/ndk-build@/android-ndk-r4-crystax@'`/ndk-build +fi -cd project && nice -n5 ndk-build -j2 V=1 && ant debug && cd bin && adb install -r DemoActivity-debug.apk +cd project && nice -n5 $NDKBUILD -j2 V=1 && ant debug && cd bin && adb install -r DemoActivity-debug.apk diff --git a/project/AndroidManifest.xml b/project/AndroidManifest.xml index 725c6a77f..3bd39687a 100644 --- a/project/AndroidManifest.xml +++ b/project/AndroidManifest.xml @@ -1,8 +1,8 @@ - OpenTyrian + Commander Genius diff --git a/project/src/Accelerometer.java b/project/src/Accelerometer.java index b46b829e0..05836478e 100644 --- a/project/src/Accelerometer.java +++ b/project/src/Accelerometer.java @@ -1,5 +1,5 @@ // This string is autogenerated by ChangeAppSettings.sh, do not change spaces amount -package com.googlecode.opentyrian; +package net.sourceforge.clonekeenplus; import android.app.Activity; import android.content.Context; diff --git a/project/src/AssetExtract.java b/project/src/AssetExtract.java index e664c297d..2b4ce69b8 100644 --- a/project/src/AssetExtract.java +++ b/project/src/AssetExtract.java @@ -1,6 +1,6 @@ // This string is autogenerated by ChangeAppSettings.sh, do not change // spaces amount -package com.googlecode.opentyrian; +package net.sourceforge.clonekeenplus; import java.util.zip.*; import java.io.*; diff --git a/project/src/Audio.java b/project/src/Audio.java index 9f29bfcb5..2d9ffded2 100644 --- a/project/src/Audio.java +++ b/project/src/Audio.java @@ -1,5 +1,5 @@ // This string is autogenerated by ChangeAppSettings.sh, do not change spaces amount -package com.googlecode.opentyrian; +package net.sourceforge.clonekeenplus; import android.app.Activity; diff --git a/project/src/DataDownloader.java b/project/src/DataDownloader.java index 5fb78f0d4..4528fe0e4 100644 --- a/project/src/DataDownloader.java +++ b/project/src/DataDownloader.java @@ -1,5 +1,5 @@ // This string is autogenerated by ChangeAppSettings.sh, do not change spaces amount -package com.googlecode.opentyrian; +package net.sourceforge.clonekeenplus; import android.app.Activity; import android.content.Context; diff --git a/project/src/GLSurfaceView_SDL.java b/project/src/GLSurfaceView_SDL.java index bc2a20aed..eec731f61 100644 --- a/project/src/GLSurfaceView_SDL.java +++ b/project/src/GLSurfaceView_SDL.java @@ -18,7 +18,7 @@ fixed with a hammer and rasp to work with libSDL port */ // This string is autogenerated by ChangeAppSettings.sh, do not change spaces amount -package com.googlecode.opentyrian; +package net.sourceforge.clonekeenplus; import java.io.Writer; import java.util.ArrayList; diff --git a/project/src/Globals.java b/project/src/Globals.java index 687832bb9..b1eead0e6 100644 --- a/project/src/Globals.java +++ b/project/src/Globals.java @@ -1,14 +1,14 @@ // This string is autogenerated by ChangeAppSettings.sh, do not change spaces amount anywhere -package com.googlecode.opentyrian; +package net.sourceforge.clonekeenplus; import android.app.Activity; import android.content.Context; class Globals { - public static String ApplicationName = "OpenTyrian"; + public static String ApplicationName = "CommanderGenius"; // Should be zip file - public static String DataDownloadUrl = "Data files size is 11 Mb|http://sites.google.com/site/xpelyax/Home/tyrian21-data.zip?attredirects=0%26d=1|http://sitesproxy.goapk.com/site/xpelyax/Home/tyrian21-data.zip"; + public static String DataDownloadUrl = "Data files are 2 Mb|https://sourceforge.net/projects/libsdl-android/files/CommanderGenius/commandergenius-data.zip/download^High-quality GFX and music - 40 Mb|https://sourceforge.net/projects/libsdl-android/files/CommanderGenius/commandergenius-hqp.zip/download"; // Set this value to true if you're planning to render 3D using OpenGL - it eats some GFX resources, so disabled for 2D public static boolean NeedDepthBuffer = false; @@ -19,7 +19,7 @@ class Globals { // Readme text to be shown on download page public static String ReadmeText = "^You may press \"Home\" now - the data will be downloaded in background".replace("^","\n"); - public static boolean AppUsesMouse = true; + public static boolean AppUsesMouse = false; public static boolean AppNeedsArrowKeys = true; @@ -50,5 +50,5 @@ class Globals { } class LoadLibrary { - public LoadLibrary() { System.loadLibrary("sdl"); System.loadLibrary("sdl_net"); }; + public LoadLibrary() { System.loadLibrary("sdl"); }; } diff --git a/project/src/MainActivity.java b/project/src/MainActivity.java index 1c5a7f3d4..8f144ebbe 100644 --- a/project/src/MainActivity.java +++ b/project/src/MainActivity.java @@ -1,5 +1,5 @@ // This string is autogenerated by ChangeAppSettings.sh, do not change spaces amount -package com.googlecode.opentyrian; +package net.sourceforge.clonekeenplus; import android.app.Activity; import android.content.Context; diff --git a/project/src/Settings.java b/project/src/Settings.java index a664b30c3..af90ad0b6 100644 --- a/project/src/Settings.java +++ b/project/src/Settings.java @@ -1,5 +1,5 @@ // This string is autogenerated by ChangeAppSettings.sh, do not change spaces amount -package com.googlecode.opentyrian; +package net.sourceforge.clonekeenplus; import android.app.Activity; import android.content.Context; diff --git a/project/src/Video.java b/project/src/Video.java index 7984a39c3..4ed5c649b 100644 --- a/project/src/Video.java +++ b/project/src/Video.java @@ -1,5 +1,5 @@ // This string is autogenerated by ChangeAppSettings.sh, do not change spaces amount -package com.googlecode.opentyrian; +package net.sourceforge.clonekeenplus; import javax.microedition.khronos.opengles.GL10; diff --git a/readme.txt b/readme.txt index 73ff18f46..8ad679c34 100644 --- a/readme.txt +++ b/readme.txt @@ -100,6 +100,18 @@ the app will re-download the data if URL does not match the saved URL from previ If you'll add new libs - add them to project/jni/, copy Android.mk from existing lib, and add libname to project/jni//Android.mk +The ARM architecture has some limitations which you have to be aware about - +if you'll access integer that's not 4-byte aligned you'll get garbage instead of correct value, +and it's processor-model specific - it may work on some devices and do not work on another ones - +you may wish to check your code in Android 1.6 emulator from time to time to catch such bugs. + +char * p = 0x13; // Non-4 byte aligned pointer +int i = (int *) p; // We have garbage inside i now +memcpy( &i, p, sizof(int) ); // The correct way to dereference a non-aligned pointer + +This compiler flags will catch most obvious errors, you may add them to AppCflags var in settings: +-Werror=strict-aliasing -Werror=cast-align -Werror=pointer-arith -Werror=address + How to compile your own application using automake/configure scripts ==================================================================== @@ -156,7 +168,7 @@ gdb libsdl.so -ex "list *0x0002ca00" It will output the exact line in your source where the application crashed. -Android Application lifectcle support +Android Application lifecycle support ===================================== Application may be put to background at any time, for example if user gets phone call onto the device.