diff --git a/project/AndroidManifestTemplate.xml b/project/AndroidManifestTemplate.xml index cfa942086..dca5f9fcb 100644 --- a/project/AndroidManifestTemplate.xml +++ b/project/AndroidManifestTemplate.xml @@ -24,7 +24,8 @@ - + + diff --git a/project/java/admob/Advertisement.java b/project/java/admob/Advertisement.java index 77d639706..e55cd8ae6 100644 --- a/project/java/admob/Advertisement.java +++ b/project/java/admob/Advertisement.java @@ -30,7 +30,7 @@ import android.view.WindowManager; import android.widget.TextView; import android.view.View; -import com.google.ads.*; // Copy GoogleAdMobAdsSdk.jar to the directory project/libs +import com.google.android.gms.ads.*; // Copy google-play-services.jar from Google SDK to the directory project/libs, and update it's version number in AndroidManifest.xml class Advertisement { @@ -41,22 +41,33 @@ class Advertisement { parent = p; AdSize adSize = AdSize.BANNER; + if( Globals.AdmobBannerSize.equals("BANNER") ) adSize = AdSize.BANNER; - else if( Globals.AdmobBannerSize.equals("IAB_BANNER") ) - adSize = AdSize.IAB_BANNER; - else if( Globals.AdmobBannerSize.equals("IAB_LEADERBOARD") ) - adSize = AdSize.IAB_LEADERBOARD; - else if( Globals.AdmobBannerSize.equals("IAB_MRECT") ) - adSize = AdSize.IAB_MRECT; - else if( Globals.AdmobBannerSize.equals("IAB_WIDE_SKYSCRAPER") ) - adSize = AdSize.IAB_WIDE_SKYSCRAPER; + else if( Globals.AdmobBannerSize.equals("LEADERBOARD") ) + adSize = AdSize.LEADERBOARD; + else if( Globals.AdmobBannerSize.equals("FULL_BANNER") ) + adSize = AdSize.FULL_BANNER; + else if( Globals.AdmobBannerSize.equals("MEDIUM_RECTANGLE") ) + adSize = AdSize.MEDIUM_RECTANGLE; else if( Globals.AdmobBannerSize.equals("SMART_BANNER") ) adSize = AdSize.SMART_BANNER; - ad = new AdView(parent, adSize, Globals.AdmobPublisherId); - AdRequest adRequest = new AdRequest(); - adRequest.addTestDevice(AdRequest.TEST_EMULATOR); // Copy GoogleAdMobAdsSdk.jar to the directory project/libs - adRequest.addTestDevice(Globals.AdmobTestDeviceId); + else if( Globals.AdmobBannerSize.equals("WIDE_SKYSCRAPER") ) + adSize = AdSize.WIDE_SKYSCRAPER; + else + { + String[] size = Globals.AdmobBannerSize.split(":"); + int width = size[0].equals("FULL_WIDTH") ? AdSize.FULL_WIDTH : Integer.parseInt(size[0]); + int height = size[1].equals("AUTO_HEIGHT") ? AdSize.AUTO_HEIGHT : Integer.parseInt(size[1]); + adSize = new AdSize(width, height); + } + ad = new AdView(parent); + ad.setAdSize(adSize); + ad.setAdUnitId(Globals.AdmobPublisherId); + AdRequest adRequest = new AdRequest.Builder(). + addTestDevice(AdRequest.DEVICE_ID_EMULATOR). + addTestDevice(Globals.AdmobTestDeviceId). + build(); ad.loadAd(adRequest); } @@ -67,9 +78,10 @@ class Advertisement public void requestNewAd() { - AdRequest adRequest = new AdRequest(); - adRequest.addTestDevice(AdRequest.TEST_EMULATOR); // Copy GoogleAdMobAdsSdk.jar to the directory project/libs - adRequest.addTestDevice(Globals.AdmobTestDeviceId); + AdRequest adRequest = new AdRequest.Builder(). + addTestDevice(AdRequest.DEVICE_ID_EMULATOR). + addTestDevice(Globals.AdmobTestDeviceId). + build(); ad.loadAd(adRequest); } } diff --git a/project/jni/application/ballfield/AndroidAppSettings.cfg b/project/jni/application/ballfield/AndroidAppSettings.cfg index a579c93e5..164794512 100644 --- a/project/jni/application/ballfield/AndroidAppSettings.cfg +++ b/project/jni/application/ballfield/AndroidAppSettings.cfg @@ -70,6 +70,10 @@ CreateService= # enabling the compatibility mode will force screen update every 100 milliseconds, which is laggy and inefficient (y) or (n) CompatibilityHacksForceScreenUpdate=n +# Application does not call SDL_Flip() or SDL_UpdateRects() after mouse click (ScummVM and all Amiga emulators do that) - +# force screen update by moving mouse cursor a little after each click (y) or (n) +CompatibilityHacksForceScreenUpdateMouseClick=y + # Application initializes SDL audio/video inside static constructors (which is bad, you won't be able to run ndk-gdb) (y)/(n) CompatibilityHacksStaticInit=n @@ -245,6 +249,6 @@ AdmobPublisherId=n # Your AdMob test device ID, to receive a test ad AdmobTestDeviceId= -# Your AdMob banner size (BANNER/IAB_BANNER/IAB_LEADERBOARD/IAB_MRECT/IAB_WIDE_SKYSCRAPER/SMART_BANNER) +# Your AdMob banner size (BANNER/FULL_BANNER/LEADERBOARD/MEDIUM_RECTANGLE/SMART_BANNER/WIDE_SKYSCRAPER/FULL_WIDTH:Height/Width:AUTO_HEIGHT/Width:Height) AdmobBannerSize= diff --git a/project/jni/application/test-advertisements/AndroidAppSettings.cfg b/project/jni/application/test-advertisements/AndroidAppSettings.cfg index a250e3c7a..28d2d28f6 100644 --- a/project/jni/application/test-advertisements/AndroidAppSettings.cfg +++ b/project/jni/application/test-advertisements/AndroidAppSettings.cfg @@ -1,54 +1,253 @@ # The application settings for Android libSDL port -AppSettingVersion=17 -LibSdlVersion=1.2 + +# Specify application name (e.x. My Application) AppName="Admob test" -AppFullName=ws.openarena.sdl -ScreenOrientation=h -InhibitSuspend=y -AppDataDownloadUrl="Game data is 1 Mb|ballfield2.zip" -VideoDepthBpp=16 -NeedDepthBuffer=n -NeedStencilBuffer=n -NeedGles2=n -SwVideoMode=y -SdlVideoResize=y -SdlVideoResizeKeepAspect=n -CompatibilityHacks=n -CompatibilityHacksStaticInit=n -CompatibilityHacksTextInputEmulatesHwKeyboard=n -CompatibilityHacksPreventAudioChopping=n -CompatibilityHacksAppIgnoresAudioBufferSize=n -AppUsesMouse=y -AppNeedsTwoButtonMouse=y -ShowMouseCursor=n -ForceRelativeMouseMode=n -AppNeedsArrowKeys=n -AppNeedsTextInput=y -AppUsesJoystick=n -AppUsesAccelerometer=n -AppUsesMultitouch=y -NonBlockingSwapBuffers=n -RedefinedKeys="SPACE RETURN NO_REMAP NO_REMAP SPACE ESCAPE" -AppTouchscreenKeyboardKeysAmount=0 -AppTouchscreenKeyboardKeysAmountAutoFire=0 -RedefinedKeysScreenKb="0 1 2 3 4 5 6 7 8 9" -StartupMenuButtonTimeout=500 -HiddenMenuOptions='OptionalDownloadConfig' -FirstStartMenuOptions='' -MultiABI=n -AppMinimumRAM=0 + +# Specify reversed site name of application (e.x. com.mysite.myapp) +AppFullName=test.ad.app + +# Application version code (integer) AppVersionCode=101 + +# Application user-visible version name (string) AppVersionName="1.01" + +# Specify path to download application data in zip archive in the form 'Description|URL|MirrorURL^Description2|URL2|MirrorURL2^...' +# If you'll start Description with '!' symbol it will be enabled by default, other downloads should be selected by user from startup config menu +# If the URL in in the form ':dir/file.dat:http://URL/' it will be downloaded as binary BLOB to the application dir and not unzipped +# If the URL does not contain 'http://' it is treated as file from 'project/jni/application/src/AndroidData' dir - +# these files are put inside .apk package by build system +# Also please avoid 'https://' URLs, many Android devices do not have trust certificates and will fail to connect to SF.net over HTTPS +AppDataDownloadUrl="Game data is 1 Mb|ballfield2.zip" + +# Reset SDL config when updating application to the new version (y) / (n) ResetSdlConfigForThisVersion=n + +# Delete application data files when upgrading (specify file/dir paths separated by spaces) DeleteFilesOnUpgrade="%" -CompiledLibraries="sdl_mixer sdl_image" -CustomBuildScript=n -AppCflags='-O2 -finline-functions' -AppLdflags='' -AppSubdirsBuild='' -AppCmdline='' + +# Here you may type readme text, which will be shown during startup. Format is: +# Text in English, use \\\\n to separate lines (that's four backslashes)^de:Text in Deutsch^ru:Text in Russian^button:Button that will open some URL:http://url-to-open/ ReadmeText='^Readme text' + +# libSDL version to use (1.2/1.3/2.0) +LibSdlVersion=1.2 + +# Specify screen orientation: (v)ertical/(p)ortrait or (h)orizontal/(l)andscape +ScreenOrientation=h + +# Video color depth - 16 BPP is the fastest and supported for all modes, 24 bpp is supported only +# with SwVideoMode=y, SDL_OPENGL mode supports everything. (16)/(24)/(32) +VideoDepthBpp=16 + +# Enable OpenGL depth buffer (needed only for 3-d applications, small speed decrease) (y) or (n) +NeedDepthBuffer=n + +# Enable OpenGL stencil buffer (needed only for 3-d applications, small speed decrease) (y) or (n) +NeedStencilBuffer=n + +# Try to use GLES 2.x context - will revert to GLES 1.X if unsupported by device +# you need this option only if you're developing 3-d app (y) or (n) +NeedGles2=n + +# Application uses software video buffer - you're calling SDL_SetVideoMode() without SDL_HWSURFACE and without SDL_OPENGL, +# this will allow small speed optimization. Enable this even when you're using SDL_HWSURFACE. (y) or (n) +SwVideoMode=y + +# Application video output will be resized to fit into native device screen (y)/(n) +SdlVideoResize=y + +# Application resizing will keep 4:3 aspect ratio, with black bars at sides (y)/(n) +SdlVideoResizeKeepAspect=n + +# Do not allow device to sleep when the application is in foreground, set this for video players or apps which use accelerometer +InhibitSuspend=y + +# Create Android service, so the app is less likely to be killed while in background +CreateService= + +# Application does not call SDL_Flip() or SDL_UpdateRects() appropriately, or draws from non-main thread - +# enabling the compatibility mode will force screen update every 100 milliseconds, which is laggy and inefficient (y) or (n) +CompatibilityHacksForceScreenUpdate=n + +# Application does not call SDL_Flip() or SDL_UpdateRects() after mouse click (ScummVM and all Amiga emulators do that) - +# force screen update by moving mouse cursor a little after each click (y) or (n) +CompatibilityHacksForceScreenUpdateMouseClick=y + +# Application initializes SDL audio/video inside static constructors (which is bad, you won't be able to run ndk-gdb) (y)/(n) +CompatibilityHacksStaticInit=n + +# On-screen Android soft text input emulates hardware keyboard, this will only work with Hackers Keyboard app (y)/(n) +CompatibilityHacksTextInputEmulatesHwKeyboard=n + +# Hack for broken devices: prevent audio chopping, by sleeping a bit after pushing each audio chunk (y)/(n) +CompatibilityHacksPreventAudioChopping=n + +# Hack for broken apps: application ignores audio buffer size returned by SDL (y)/(n) +CompatibilityHacksAppIgnoresAudioBufferSize=n + +# Hack for VCMI: preload additional shared libraries before aplication start +CompatibilityHacksAdditionalPreloadedSharedLibraries="" + +# Hack for Free Heroes 2, which redraws the screen inside SDL_PumpEvents(): slow and compatible SDL event queue - +# do not use it with accelerometer/gyroscope, or your app may freeze at random (y)/(n) +CompatibilityHacksSlowCompatibleEventQueue= + +# Save and restore OpenGL state when drawing on-screen keyboard for apps that use SDL_OPENGL +CompatibilityHacksTouchscreenKeyboardSaveRestoreOpenGLState= + +# Application uses SDL_UpdateRects() properly, and does not draw in any region outside those rects. +# This improves drawing speed, but I know only one application that does that, and it's written by me (y)/(n) +CompatibilityHacksProperUsageOfSDL_UpdateRects= + +# Application uses mouse (y) or (n), this will show mouse emulation dialog to the user +AppUsesMouse=y + +# Application needs two-button mouse, will also enable advanced point-and-click features (y) or (n) +AppNeedsTwoButtonMouse=y + +# Right mouse button can do long-press/drag&drop action, necessary for some games (y) or (n) +# If you disable it, swiping with two fingers will send mouse wheel events +RightMouseButtonLongPress= + +# Show SDL mouse cursor, for applications that do not draw cursor at all (y) or (n) +ShowMouseCursor=n + +# Generate more touch events, by default SDL generates one event per one video frame, this is useful for drawing apps (y) or (n) +GenerateSubframeTouchEvents= + +# Force relative (laptop) mouse movement mode, useful when both on-screen keyboard and mouse are needed (y) or (n) +ForceRelativeMouseMode=n + +# Application needs arrow keys (y) or (n), will show on-screen dpad/joystick (y) or (n) +AppNeedsArrowKeys=n + +# Application needs text input (y) or (n), enables button for text input on screen +AppNeedsTextInput=y + +# Application uses joystick (y) or (n), the on-screen DPAD will be used as joystick 0 axes 0-1 +AppUsesJoystick=n + +# Application uses second on-screen joystick, as SDL joystick 0 axes 2-3 (y)/(n) +AppUsesSecondJoystick=n + +# Application uses third on-screen joystick, as SDL joystick 0 axes 20-21 (y)/(n) +AppUsesThirdJoystick= + +# Application uses accelerometer (y) or (n), the accelerometer will be used as joystick 1 axes 0-1 and 5-7 +AppUsesAccelerometer=n + +# Application uses gyroscope (y) or (n), the gyroscope will be used as joystick 1 axes 2-4 +AppUsesGyroscope= + +# Use gyroscope to move mouse cursor (y) or (n), it eats battery, and can be disabled in settings, do not use with AppUsesGyroscope setting +MoveMouseWithGyroscope= + +# Application uses multitouch (y) or (n), multitouch events are passed as SDL_JOYBALLMOTION events for the joystick 0 +AppUsesMultitouch=y + +# Application records audio (it will use any available source, such a s microphone) +# API is defined in file SDL_android.h: int SDL_ANDROID_OpenAudioRecording(SDL_AudioSpec *spec); void SDL_ANDROID_CloseAudioRecording(void); +# This option will add additional permission to Android manifest (y)/(n) +AppRecordsAudio= + +# Application needs to access SD card. If your data files are bigger than 5 Mb, enable it. (y) / (n) +AccessSdCard= + +# Application needs Internet access. If you disable it, you'll have to bundle all your data files inside .apk (y) / (n) +AccessInternet= + +# Immersive mode - Android will hide on-screen Home/Back keys. Looks bad if you invoke Android keyboard. (y) / (n) +ImmersiveMode= + +# Application implements Android-specific routines to put to background, and will not draw anything to screen +# between SDL_ACTIVEEVENT lost / gained notifications - you should check for them +# rigth after SDL_Flip(), if (n) then SDL_Flip() will block till app in background (y) or (n) +# This option is reported to be buggy, sometimes failing to restore video state +NonBlockingSwapBuffers=n + +# Redefine common hardware keys to SDL keysyms +# BACK hardware key is available on all devices, MENU is available on pre-ICS devices, other keys may be absent +# SEARCH and CALL by default return same keycode as DPAD_CENTER - one of those keys is available on most devices +# Use word NO_REMAP if you want to preserve native functionality for certain key (volume keys are 3-rd and 4-th) +# Keys: TOUCHSCREEN (works only when AppUsesMouse=n), DPAD_CENTER/SEARCH, VOLUMEUP, VOLUMEDOWN, MENU, BACK, CAMERA +RedefinedKeys="SPACE RETURN NO_REMAP NO_REMAP SPACE ESCAPE" + +# Number of virtual keyboard keys (currently 6 is maximum) +AppTouchscreenKeyboardKeysAmount=0 + +# Redefine on-screen keyboard keys to SDL keysyms - 6 keyboard keys + 4 multitouch gestures (zoom in/out and rotate left/right) +RedefinedKeysScreenKb="0 1 2 3 4 5 6 7 8 9" + +# Names for on-screen keyboard keys, such as Fire, Jump, Run etc, separated by spaces, they are used in SDL config menu +RedefinedKeysScreenKbNames="" + +# On-screen keys theme +# 0 = Ultimate Droid by Sean Stieber (green, with gamepad joystick) +# 1 = Simple Theme by Beholder (white, with gamepad joystick) +# 2 = Sun by Sirea (yellow, with round joystick) +# 3 = Keen by Gerstrong (multicolor, with round joystick) +TouchscreenKeysTheme=2 + +# Redefine gamepad keys to SDL keysyms, button order is: +# A B X Y L1 R1 L2 R2 LThumb RThumb +RedefinedKeysGamepad="" + +# How long to show startup menu button, in msec, 0 to disable startup menu +StartupMenuButtonTimeout=500 + +# Menu items to hide from startup menu, available menu items: +# SettingsMenu.OkButton SettingsMenu.DummyMenu SettingsMenu.MainMenu SettingsMenuMisc.DownloadConfig SettingsMenuMisc.OptionalDownloadConfig SettingsMenuMisc.AudioConfig SettingsMenuMisc.VideoSettingsConfig SettingsMenuMisc.ShowReadme SettingsMenuMisc.GyroscopeCalibration SettingsMenuMisc.ResetToDefaultsConfig SettingsMenuMouse.MouseConfigMainMenu SettingsMenuMouse.DisplaySizeConfig SettingsMenuMouse.LeftClickConfig SettingsMenuMouse.RightClickConfig SettingsMenuMouse.AdditionalMouseConfig SettingsMenuMouse.JoystickMouseConfig SettingsMenuMouse.TouchPressureMeasurementTool SettingsMenuMouse.CalibrateTouchscreenMenu SettingsMenuKeyboard.KeyboardConfigMainMenu SettingsMenuKeyboard.ScreenKeyboardSizeConfig SettingsMenuKeyboard.ScreenKeyboardDrawSizeConfig SettingsMenuKeyboard.ScreenKeyboardThemeConfig SettingsMenuKeyboard.ScreenKeyboardTransparencyConfig SettingsMenuKeyboard.RemapHwKeysConfig SettingsMenuKeyboard.RemapScreenKbConfig SettingsMenuKeyboard.ScreenGesturesConfig SettingsMenuKeyboard.CustomizeScreenKbLayout +HiddenMenuOptions='' + +# Menu items to show at startup - this is Java code snippet, leave empty for default +# new SettingsMenuMisc.ShowReadme(), (AppUsesMouse \&\& \! ForceRelativeMouseMode \? new SettingsMenuMouse.DisplaySizeConfig(true) : new SettingsMenu.DummyMenu()), new SettingsMenuMisc.OptionalDownloadConfig(true), new SettingsMenuMisc.GyroscopeCalibration() +# Available menu items: +# SettingsMenu.OkButton SettingsMenu.DummyMenu SettingsMenu.MainMenu SettingsMenuMisc.DownloadConfig SettingsMenuMisc.OptionalDownloadConfig SettingsMenuMisc.AudioConfig SettingsMenuMisc.VideoSettingsConfig SettingsMenuMisc.ShowReadme SettingsMenuMisc.GyroscopeCalibration SettingsMenuMisc.ResetToDefaultsConfig SettingsMenuMouse.MouseConfigMainMenu SettingsMenuMouse.DisplaySizeConfig SettingsMenuMouse.LeftClickConfig SettingsMenuMouse.RightClickConfig SettingsMenuMouse.AdditionalMouseConfig SettingsMenuMouse.JoystickMouseConfig SettingsMenuMouse.TouchPressureMeasurementTool SettingsMenuMouse.CalibrateTouchscreenMenu SettingsMenuKeyboard.KeyboardConfigMainMenu SettingsMenuKeyboard.ScreenKeyboardSizeConfig SettingsMenuKeyboard.ScreenKeyboardDrawSizeConfig SettingsMenuKeyboard.ScreenKeyboardThemeConfig SettingsMenuKeyboard.ScreenKeyboardTransparencyConfig SettingsMenuKeyboard.RemapHwKeysConfig SettingsMenuKeyboard.RemapScreenKbConfig SettingsMenuKeyboard.ScreenGesturesConfig SettingsMenuKeyboard.CustomizeScreenKbLayout +FirstStartMenuOptions='SettingsMenu.DummyMenu' + +# Enable multi-ABI binary, with hardware FPU support - it will also work on old devices, +# but .apk size is 2x bigger (y) / (n) / (x86) / (all) +MultiABI='armeabi-v7a' + +# Minimum amount of RAM application requires, in Mb, SDL will print warning to user if it's lower +AppMinimumRAM=0 + +# Optional shared libraries to compile - removing some of them will save space +# MP3 support by libMAD is encumbered by patents and libMAD is GPL-ed +# Available libraries: mad (GPL-ed!) sdl_mixer sdl_image sdl_ttf sdl_net sdl_blitpool sdl_gfx sdl_sound intl xml2 lua jpeg png ogg flac tremor vorbis freetype xerces curl theora fluidsynth lzma lzo2 mikmod openal timidity zzip bzip2 yaml-cpp python boost_date_time boost_filesystem boost_iostreams boost_program_options boost_regex boost_signals boost_system boost_thread glu avcodec avdevice avfilter avformat avresample avutil swscale swresample bzip2 +CompiledLibraries="sdl_mixer sdl_image" + +# Application uses custom build script AndroidBuild.sh instead of Android.mk (y) or (n) +CustomBuildScript=n + +# Aditional CFLAGS for application +AppCflags='-O2 -finline-functions' + +# Additional LDFLAGS for application +AppLdflags='' + +# If application has headers with the same name as system headers, this option tries to fix compiler flags to make it compilable +AppOverlapsSystemHeaders= + +# Build only following subdirs (empty will build all dirs, ignored with custom script) +AppSubdirsBuild='' + +# Exclude these files from build +AppBuildExclude='' + +# Application command line parameters, including app name as 0-th param +AppCmdline='' + +# Screen size is used by Google Play to prevent an app to be installed on devices with smaller screens +# Minimum screen size that application supports: (s)mall / (m)edium / (l)arge MinimumScreenSize=s + +# Your AdMob Publisher ID, (n) if you don't want advertisements AdmobPublisherId=a14fe4dd0ebe974 + +# Your AdMob test device ID, to receive a test ad AdmobTestDeviceId=66133194946FB6C1CD0ED2EFCCB82539 -AdmobBannerSize=BANNER + +# Your AdMob banner size (BANNER/IAB_BANNER/IAB_LEADERBOARD/IAB_MRECT/IAB_WIDE_SKYSCRAPER/SMART_BANNER/FULL_WIDTH:Height/Width:AUTO_HEIGHT/Width:Height) +AdmobBannerSize=400:AUTO_HEIGHT diff --git a/project/jni/application/test-advertisements/ballfield.cpp b/project/jni/application/test-advertisements/ballfield.cpp index 9283bb863..bf6ed0957 100644 --- a/project/jni/application/test-advertisements/ballfield.cpp +++ b/project/jni/application/test-advertisements/ballfield.cpp @@ -534,9 +534,7 @@ int main(int argc, char* argv[]) int touchPointers[MAX_POINTERS][5]; memset(touchPointers, 0, sizeof(touchPointers)); - SDL_Joystick * joysticks[MAX_POINTERS+1]; - for(i=0; i 0 && adSize.h > 0) + { + adX = abs(x_offs / 100) % (physicalW - adSize.w); + adY = abs(y_offs / 80) % (physicalH - adSize.h); + SDL_ANDROID_SetAdvertisementPosition(adX, adY); + } } SDL_Rect adRect; adRect.x = adX * SCREEN_W / physicalW; diff --git a/project/jni/sdl-1.2/src/video/android/SDL_androidvideo.c b/project/jni/sdl-1.2/src/video/android/SDL_androidvideo.c index 50916ea0e..2baf3414d 100644 --- a/project/jni/sdl-1.2/src/video/android/SDL_androidvideo.c +++ b/project/jni/sdl-1.2/src/video/android/SDL_androidvideo.c @@ -426,6 +426,7 @@ void SDLCALL SDL_ANDROID_GetClipboardText(char * buf, int len) int SDLCALL SDL_ANDROID_GetAdvertisementParams(int * visible, SDL_Rect * position) { jint arr[5]; + (*JavaEnv)->PushLocalFrame( JavaEnv, 1 ); jintArray elemArr = (*JavaEnv)->NewIntArray(JavaEnv, 5); if (elemArr == NULL) return 0; @@ -433,6 +434,7 @@ int SDLCALL SDL_ANDROID_GetAdvertisementParams(int * visible, SDL_Rect * positio (*JavaEnv)->CallVoidMethod(JavaEnv, JavaRenderer, JavaGetAdvertisementParams, elemArr); (*JavaEnv)->GetIntArrayRegion(JavaEnv, elemArr, 0, 5, arr); (*JavaEnv)->DeleteLocalRef(JavaEnv, elemArr); + (*JavaEnv)->PopLocalFrame( JavaEnv, NULL ); if(visible) *visible = arr[0]; if(position)