diff --git a/CMakeLists.txt b/CMakeLists.txt index 47afd9e220..dccc2df0c3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -125,11 +125,11 @@ if(SFML_OS_ANDROID) # pass shared STL configuration (if any) if (CMAKE_ANDROID_STL_TYPE MATCHES "_shared") add_definitions("-DSTL_LIBRARY=${CMAKE_ANDROID_STL_TYPE}") - if(NOT CMAKE_ANDROID_STL_TYPE MATCHES "c\\+\\+_shared") - message("Android: Using ${CMAKE_ANDROID_STL_TYPE} as STL. Set CMAKE_ANDROID_STL_TYPE to c++_shared, if there are any issues.") - endif() + # if(NOT CMAKE_ANDROID_STL_TYPE MATCHES "c\\+\\+_shared") + # message("Android: Using ${CMAKE_ANDROID_STL_TYPE} as STL. Set CMAKE_ANDROID_STL_TYPE to c++_shared, if there are any issues.") + # endif() else() - message(WARNING "Android: You're using a static STL (${CMAKE_ANDROID_STL_TYPE}). Set CMAKE_ANDROID_STL_TYPE to c++_shared, if there are any issues.") + # message(WARNING "Android: You're using a static STL (${CMAKE_ANDROID_STL_TYPE}). Set CMAKE_ANDROID_STL_TYPE to c++_shared, if there are any issues.") endif() # let the user switch ABIs diff --git a/examples/android/.gitignore b/examples/android/.gitignore index ba72b9d762..a76e9658d0 100644 --- a/examples/android/.gitignore +++ b/examples/android/.gitignore @@ -5,3 +5,4 @@ build android.iml app/build app/.externalNativeBuild +app/src/main/obj diff --git a/examples/android/app/build.gradle b/examples/android/app/build.gradle index f1d3c4ae88..b1fb031b56 100644 --- a/examples/android/app/build.gradle +++ b/examples/android/app/build.gradle @@ -4,14 +4,14 @@ android { compileSdkVersion 27 defaultConfig { applicationId "org.sfmldev.android" - minSdkVersion 19 - targetSdkVersion 23 + minSdkVersion 14 + targetSdkVersion 19 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" externalNativeBuild { ndkBuild { - cppFlags "-std=c++14 -frtti -fexceptions" + // cppFlags "-std=c++14 -frtti -fexceptions" } } @@ -28,7 +28,7 @@ android { } externalNativeBuild { ndkBuild { - path "src/main/cpp/Android.mk" + path "src/main/jni/Android.mk" } } diff --git a/examples/android/app/src/main/AndroidManifest.xml b/examples/android/app/src/main/AndroidManifest.xml index da0ae20c9d..20fbbe50ce 100644 --- a/examples/android/app/src/main/AndroidManifest.xml +++ b/examples/android/app/src/main/AndroidManifest.xml @@ -1,7 +1,7 @@ @@ -22,7 +22,7 @@ android:icon="@drawable/sfml_logo" android:configChanges="keyboardHidden|orientation|screenSize"> - + diff --git a/examples/android/app/src/main/cpp/Android.mk b/examples/android/app/src/main/cpp/Android.mk deleted file mode 100644 index ae84f65fa2..0000000000 --- a/examples/android/app/src/main/cpp/Android.mk +++ /dev/null @@ -1,20 +0,0 @@ -LOCAL_PATH := $(call my-dir) - -include $(CLEAR_VARS) - -LOCAL_MODULE := sfml-example - -LOCAL_SRC_FILES := main.cpp - -LOCAL_SHARED_LIBRARIES := sfml-system -LOCAL_SHARED_LIBRARIES += sfml-window -LOCAL_SHARED_LIBRARIES += sfml-graphics -LOCAL_SHARED_LIBRARIES += sfml-audio -LOCAL_SHARED_LIBRARIES += sfml-network -LOCAL_SHARED_LIBRARIES += sfml-activity -LOCAL_SHARED_LIBRARIES += openal -LOCAL_WHOLE_STATIC_LIBRARIES := sfml-main - -include $(BUILD_SHARED_LIBRARY) - -$(call import-module,sfml) diff --git a/examples/android/app/src/main/cpp/Application.mk b/examples/android/app/src/main/cpp/Application.mk deleted file mode 100644 index e1e4b82134..0000000000 --- a/examples/android/app/src/main/cpp/Application.mk +++ /dev/null @@ -1,5 +0,0 @@ -NDK_TOOLCHAIN_VERSION := 4.9 -APP_PLATFORM := android-14 -APP_STL := stlport_shared -APP_ABI := armeabi-v7a -APP_MODULES := sfml-activity sfml-example diff --git a/examples/android/app/src/main/jni/Android.mk b/examples/android/app/src/main/jni/Android.mk new file mode 100644 index 0000000000..e848c117f2 --- /dev/null +++ b/examples/android/app/src/main/jni/Android.mk @@ -0,0 +1,20 @@ +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_MODULE := sfml-example + +LOCAL_SRC_FILES := main.cpp + +LOCAL_SHARED_LIBRARIES := sfml-system-d +LOCAL_SHARED_LIBRARIES += sfml-window-d +LOCAL_SHARED_LIBRARIES += sfml-graphics-d +LOCAL_SHARED_LIBRARIES += sfml-audio-d +LOCAL_SHARED_LIBRARIES += sfml-network-d +LOCAL_SHARED_LIBRARIES += sfml-activity-d +LOCAL_SHARED_LIBRARIES += openal +LOCAL_WHOLE_STATIC_LIBRARIES := sfml-main-d + +include $(BUILD_SHARED_LIBRARY) + +$(call import-module,third_party/sfml) diff --git a/examples/android/app/src/main/jni/Application.mk b/examples/android/app/src/main/jni/Application.mk new file mode 100644 index 0000000000..df10f28a4b --- /dev/null +++ b/examples/android/app/src/main/jni/Application.mk @@ -0,0 +1,8 @@ +NDK_TOOLCHAIN_VERSION := 4.9 +APP_PLATFORM := android-14 +# APP_STL has to match CMAKE_ANDROID_STL_TYPE +APP_STL := c++_static +APP_ABI := armeabi-v7a +APP_MODULES := sfml-activity-d sfml-example +APP_OPTIM := debug +APP_CFLAG := -g -ggdb -O0 \ No newline at end of file diff --git a/examples/android/app/src/main/cpp/main.cpp b/examples/android/app/src/main/jni/main.cpp similarity index 67% rename from examples/android/app/src/main/cpp/main.cpp rename to examples/android/app/src/main/jni/main.cpp index 56b6741f11..08db4ddc50 100644 --- a/examples/android/app/src/main/cpp/main.cpp +++ b/examples/android/app/src/main/jni/main.cpp @@ -76,40 +76,78 @@ int vibrate(sf::Time duration) // ('vibrate()' in this example; undefine 'USE_JNI' above to disable it) int main(int argc, char *argv[]) { - sf::RenderWindow window(sf::VideoMode::getDesktopMode(), ""); + sf::VideoMode screen(sf::VideoMode::getDesktopMode()); + + sf::RenderWindow window(screen, ""); + window.setFramerateLimit(30); sf::Texture texture; if(!texture.loadFromFile("image.png")) return EXIT_FAILURE; sf::Sprite image(texture); - image.setPosition(0, 0); + image.setPosition(screen.width / 2, screen.height / 2); image.setOrigin(texture.getSize().x/2, texture.getSize().y/2); - sf::Music music; + sf::Font font; + if (!font.loadFromFile("sansation.ttf")) + return EXIT_FAILURE; + + sf::Text text("Tap anywhere to move the logo.", font, 10); + text.setPosition(10, 10); + + // Loading canary.wav fails for me for now; haven't had time to test why + + /*sf::Music music; if(!music.openFromFile("canary.wav")) return EXIT_FAILURE; - music.play(); + music.play();*/ sf::View view = window.getDefaultView(); + sf::Color background = sf::Color::White; + + // We shouldn't try drawing to the screen while in background + // so we'll have to track that. You can do minor background + // work, but keep battery life in mind. + bool active = true; + while (window.isOpen()) { sf::Event event; - while (window.pollEvent(event)) + while (active ? window.pollEvent(event) : window.waitEvent(event)) { switch (event.type) { case sf::Event::Closed: window.close(); break; + case sf::Event::KeyPressed: + if (event.key.code == sf::Keyboard::Escape) + window.close(); + break; case sf::Event::Resized: view.setSize(event.size.width, event.size.height); view.setCenter(event.size.width/2, event.size.height/2); window.setView(view); break; + case sf::Event::LostFocus: + background = sf::Color::Black; + break; + case sf::Event::GainedFocus: + background = sf::Color::White; + break; + + // On Android MouseLeft/MouseEntered are (for now) triggered, + // whenever the app loses or gains focus. + case sf::Event::MouseLeft: + active = false; + break; + case sf::Event::MouseEntered: + active = true; + break; case sf::Event::TouchBegan: if (event.touch.finger == 0) { @@ -122,8 +160,15 @@ int main(int argc, char *argv[]) } } - window.clear(sf::Color::White); - window.draw(image); - window.display(); + if (active) + { + window.clear(background); + window.draw(image); + window.draw(text); + window.display(); + } + else { + sf::sleep(sf::milliseconds(100)); + } } } diff --git a/examples/android/gradle/wrapper/gradle-wrapper.jar b/examples/android/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 13372aef5e..0000000000 Binary files a/examples/android/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/examples/android/gradle/wrapper/gradle-wrapper.properties b/examples/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 74e4fed58a..0000000000 --- a/examples/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Thu Oct 26 23:14:02 CEST 2017 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip diff --git a/examples/android/gradlew b/examples/android/gradlew deleted file mode 100755 index 9d82f78915..0000000000 --- a/examples/android/gradlew +++ /dev/null @@ -1,160 +0,0 @@ -#!/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 - -# 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\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -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"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # 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 "$@" diff --git a/examples/android/gradlew.bat b/examples/android/gradlew.bat deleted file mode 100644 index 8a0b282aa6..0000000000 --- a/examples/android/gradlew.bat +++ /dev/null @@ -1,90 +0,0 @@ -@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 diff --git a/src/SFML/Android.mk b/src/SFML/Android.mk index f4f586d4bb..2c3a6267fd 100644 --- a/src/SFML/Android.mk +++ b/src/SFML/Android.mk @@ -179,5 +179,5 @@ ifdef prebuilt include $(PREBUILT_SHARED_LIBRARY) endif -$(call import-module,sfml/extlibs) +$(call import-module,third_party/sfml/extlibs)