diff --git a/project/java/MainActivity.java b/project/java/MainActivity.java index 49d06ee79..5375d3ac2 100644 --- a/project/java/MainActivity.java +++ b/project/java/MainActivity.java @@ -529,9 +529,81 @@ public class MainActivity extends Activity { } catch ( Exception ee ) { - System.out.println("libSDL: Error: " + e.toString()); + System.out.println("libSDL: Error: " + ee.toString()); } } + + try { + System.out.println("libSDL: Extracting VCMI server"); + + InputStream in = null; + try + { + for( int i = 0; ; i++ ) + { + InputStream in2 = getAssets().open("vcmiserver" + String.valueOf(i)); + if( in == null ) + in = in2; + else + in = new SequenceInputStream( in, in2 ); + } + } + catch( IOException ee ) { } + + if( in == null ) + throw new RuntimeException("libSDL: Extracting VCMI server failed, the .apk file packaged incorrectly"); + + ZipInputStream zip = new ZipInputStream(in); + + File cacheDir = getFilesDir(); + try { + cacheDir.mkdirs(); + } catch( SecurityException ee ) { }; + + byte[] buf = new byte[16384]; + while(true) + { + ZipEntry entry = null; + entry = zip.getNextEntry(); + /* + if( entry != null ) + System.out.println("Extracting lib " + entry.getName()); + */ + if( entry == null ) + { + System.out.println("Extracting libs finished"); + break; + } + if( entry.isDirectory() ) + { + System.out.println("Warning '" + entry.getName() + "' is a directory"); + continue; + } + + OutputStream out = null; + String path = cacheDir.getAbsolutePath() + "/" + entry.getName(); + + System.out.println("Saving to file '" + path + "'"); + + out = new FileOutputStream( path ); + int len = zip.read(buf); + while (len >= 0) + { + if(len > 0) + out.write(buf, 0, len); + len = zip.read(buf); + } + + out.flush(); + out.close(); + (new ProcessBuilder().command("/system/bin/chmod", "0755", path).start()).waitFor(); + } + } + catch ( Exception eee ) + { + System.out.println("libSDL: Error: " + eee.toString()); + } + }; public FrameLayout getVideoLayout() { return _videoLayout; } diff --git a/project/jni/application/setEnvironment-r5b.sh b/project/jni/application/setEnvironment-r5b.sh index b98497863..6840f61e7 100755 --- a/project/jni/application/setEnvironment-r5b.sh +++ b/project/jni/application/setEnvironment-r5b.sh @@ -63,9 +63,14 @@ CFLAGS="\ `echo $APP_MODULES | sed \"s@\([-a-zA-Z0-9_.]\+\)@-I$LOCAL_PATH/../\1/include@g\"` \ $CRYSTAX_WCHAR_INCLUDE" +SHARED=-shared +if [ -n "$BUILD_EXECUTABLE" ]; then + SHARED= +fi + #-shared flag creates problems with damn libtool, so we're using -Wl,-shared instead LDFLAGS="\ --fexceptions -frtti -shared \ +-fexceptions -frtti $SHARED \ -Wl,-soname,libapplication.so --sysroot=$NDK/platforms/$PLATFORMVER/arch-arm \ `echo $APP_SHARED_LIBS | sed \"s@\([-a-zA-Z0-9_.]\+\)@$LOCAL_PATH/../../obj/local/armeabi/lib\1.so@g\"` \ $NDK/platforms/$PLATFORMVER/arch-arm/usr/lib/libc.so \ diff --git a/project/jni/application/vcmi/AndroidBuild.sh b/project/jni/application/vcmi/AndroidBuild.sh index ba536f699..4ac6ac740 100755 --- a/project/jni/application/vcmi/AndroidBuild.sh +++ b/project/jni/application/vcmi/AndroidBuild.sh @@ -2,34 +2,3 @@ make -j4 2>&1 | tee build.log -if false; then -# Uncomment if your configure expects SDL libraries in form "libSDL_name.so" -ln -sf libsdl-1.2.so $LOCAL_PATH/../../../obj/local/armeabi/libSDL.so -ln -sf libsdl-1.2.so $LOCAL_PATH/../../../obj/local/armeabi/libpthread.so -ln -sf libsdl_mixer.so $LOCAL_PATH/../../../obj/local/armeabi/libSDL_mixer.so -ln -sf libsdl_image.so $LOCAL_PATH/../../../obj/local/armeabi/libSDL_image.so -ln -sf libsdl_ttf.so $LOCAL_PATH/../../../obj/local/armeabi/libSDL_ttf.so -rm -f libapplication.so - -if [ \! -f vcmi/Makefile -o $0 -nt vcmi/Makefile ] ; then - ../setEnvironment.sh sh -c "cd vcmi && \ - env LIBS='-lavcodec -lavutil -lavcore -lgcc' \ - ./configure --host=$GCC_PREFIX --enable-shared --disable-static \ - --with-boost-system=boost_system \ - --with-boost-filesystem=boost_filesystem \ - --with-boost-thread=boost_thread \ - --with-boost-iostreams=boost_iostreams \ - --with-boost-program-options=boost_program_options \ - --bindir=/data/data/eu.vcmi/lib" || exit 1 -fi -../setEnvironment.sh sh -c "cd vcmi/lib && \ - make -j4 AM_DEFAULT_VERBOSITY=1 \ - pkgdatadir=/sdcard/app-data/eu.vcmi pkglibdir=/data/data/eu.vcmi/files bindir=/data/data/eu.vcmi/files" \ - || exit 1 - -rm -f $LOCAL_PATH/../../../obj/local/armeabi/libSDL.so -rm -f $LOCAL_PATH/../../../obj/local/armeabi/libpthread.so -rm -f $LOCAL_PATH/../../../obj/local/armeabi/libSDL_mixer.so -rm -f $LOCAL_PATH/../../../obj/local/armeabi/libSDL_image.so -rm -f $LOCAL_PATH/../../../obj/local/armeabi/libSDL_ttf.so -fi diff --git a/project/jni/application/vcmi/AndroidData/vcmiserver0 b/project/jni/application/vcmi/AndroidData/vcmiserver0 new file mode 100644 index 000000000..aa9aeda25 Binary files /dev/null and b/project/jni/application/vcmi/AndroidData/vcmiserver0 differ diff --git a/project/jni/application/vcmi/Makefile b/project/jni/application/vcmi/Makefile index 503099f6f..e060715ab 100644 --- a/project/jni/application/vcmi/Makefile +++ b/project/jni/application/vcmi/Makefile @@ -1,32 +1,34 @@ -$(shell mkdir -p out/vcmi/lib) +$(shell mkdir -p out/vcmi/lib out/vcmi/server) LOCAL_PATH=$(shell dirname $0) LOCAL_PATH=`cd $LOCAL_PATH && pwd` GCC_PREFIX=$(if $(shell which ndk-build | grep 'android-ndk-r5'),arm-linux-androideabi,arm-eabi) -SOURCES=$(wildcard vcmi/lib/*.cpp) +SOURCES=$(wildcard vcmi/lib/*.cpp vcmi/server/*.cpp vcmi/CConsoleHandler.cpp vcmi/CThreadHelper.cpp) OBJS=$(patsubst %.cpp, out/%.o, $(SOURCES)) +$(warning SOURCES $(SOURCES)) +$(warning OBJS $(OBJS)) -all: libvcmi.so - -libvcmi.so: $(OBJS) - ../setEnvironment.sh sh -c "$(GCC_PREFIX)-g++ \ +vcmiserver: $(OBJS) + env BUILD_EXECUTABLE=1 ../setEnvironment.sh sh -c \ + "$(GCC_PREFIX)-g++ \ \$$LDFLAGS \ $^ -o $@ \ -lboost_filesystem -lboost_iostreams -lboost_system -lboost_thread" + mkdir -p debug + cp $@ debug/$@ + $(GCC_PREFIX)-strip $@ $(OBJS): out/%.o: %.cpp - ../setEnvironment.sh sh -c "$(GCC_PREFIX)-g++ \ - -c \$$CXXFLAGS -Ivcmi -Ivcmi/lib \ + ../setEnvironment.sh sh -c \ + "$(GCC_PREFIX)-g++ \ + -c \$$CXXFLAGS -Ivcmi -Ivcmi/lib -Ivcmi/server \ -DDATA_DIR=\\\"/sdcard/app-data/eu.vcmi\\\" \ -DBIN_DIR=\\\"/data/data/eu.vcmi/files\\\" \ -DLIB_DIR=\\\"/data/data/eu.vcmi/files\\\" \ -DWITH_AVCODEC_DECODE_VIDEO2=1 \ $< -o $@" - mkdir -p debug - cp $@ debug/$@ - $(GCC_PREFIX)-strip