c9ce3ced58
Openttd dropped support to not having getifaddrs, and Android only started shipping ifaddrs.h with SDK 24
1223 lines
49 KiB
Bash
Executable File
1223 lines
49 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -e
|
|
|
|
AUTO=a
|
|
CHANGED=
|
|
JAVA_SRC_PATH=project/java
|
|
[ -z "$ANDROID_SDK_ROOT" ] && ANDROID_SDK_ROOT="$ANDROID_HOME"
|
|
|
|
if [ "X$1" = "X-a" ]; then
|
|
AUTO=a
|
|
shift
|
|
fi
|
|
if [ "X$1" = "X-v" ]; then
|
|
AUTO=v
|
|
shift
|
|
fi
|
|
if [ "X$1" = "X-u" ]; then
|
|
CHANGED=1
|
|
AUTO=a
|
|
shift
|
|
fi
|
|
if [ "X$1" = "X-h" ]; then
|
|
echo "Usage: $0 [-a] [-v] [-u]"
|
|
echo " -a: auto-update project files without asking questions, it's the default action"
|
|
echo " -v: ask for new version number on terminal"
|
|
echo " -u: update AndroidAppSettings.cfg, this may add new config options to it"
|
|
exit
|
|
fi
|
|
|
|
if [ "$#" -gt 0 ]; then
|
|
echo "Switching build target to $1"
|
|
if [ -e project/jni/application/$1 ]; then
|
|
rm -f project/jni/application/src
|
|
ln -s "$1" project/jni/application/src
|
|
else
|
|
echo "Error: no app $1 under project/jni/application"
|
|
echo "Available applications:"
|
|
cd project/jni/application
|
|
for f in *; do
|
|
if [ -e "$f/AndroidAppSettings.cfg" ]; then
|
|
echo "$f"
|
|
fi
|
|
done
|
|
exit 1
|
|
fi
|
|
shift
|
|
fi
|
|
|
|
source ./AndroidAppSettings.cfg
|
|
|
|
var=""
|
|
|
|
if [ -n "${APP_FULL_NAME}" ]; then
|
|
echo ${APP_FULL_NAME}
|
|
AppFullName="${APP_FULL_NAME}"
|
|
CHANGED=1
|
|
fi
|
|
|
|
if [ "$CompatibilityHacks" = y ]; then
|
|
SwVideoMode=y
|
|
fi
|
|
|
|
if [ "$SwVideoMode" = "y" ]; then
|
|
NeedDepthBuffer=n
|
|
NeedStencilBuffer=n
|
|
NeedGles2=n
|
|
NeedGles3=n
|
|
fi
|
|
|
|
|
|
if [ "$AppUsesJoystick" != "y" ]; then
|
|
AppUsesSecondJoystick=n
|
|
fi
|
|
|
|
MenuOptionsAvailable=
|
|
for FF in Menu MenuMisc MenuMouse MenuKeyboard ; do
|
|
MenuOptionsAvailable1=`grep 'extends Menu' $JAVA_SRC_PATH/Settings$FF.java | sed "s/.* class \(.*\) extends .*/Settings$FF.\1/" | tr '\n' ' '`
|
|
MenuOptionsAvailable="$MenuOptionsAvailable $MenuOptionsAvailable1"
|
|
done
|
|
|
|
FirstStartMenuOptionsDefault='new SettingsMenuMisc.ShowReadme(), (AppUsesMouse \&\& \! ForceRelativeMouseMode \? new SettingsMenuMouse.DisplaySizeConfig(true) : new SettingsMenu.DummyMenu()), new SettingsMenuMisc.OptionalDownloadConfig(true), new SettingsMenuMisc.GyroscopeCalibration()'
|
|
|
|
if [ -z "$CompatibilityHacksForceScreenUpdate" ]; then
|
|
CompatibilityHacksForceScreenUpdate=$CompatibilityHacks
|
|
fi
|
|
|
|
if [ -z "$CompatibilityHacksForceScreenUpdateMouseClick" ]; then
|
|
CompatibilityHacksForceScreenUpdateMouseClick=n
|
|
fi
|
|
|
|
if [ -z "$TouchscreenKeysTheme" ]; then
|
|
TouchscreenKeysTheme=2
|
|
fi
|
|
|
|
|
|
if [ -z "$AppVersionCode" -o "-$AUTO" != "-a" ]; then
|
|
echo
|
|
echo -n "Application version code (integer) ($AppVersionCode): "
|
|
read var
|
|
if [ -n "$var" ] ; then
|
|
AppVersionCode="$var"
|
|
CHANGED=1
|
|
fi
|
|
fi
|
|
|
|
if [ -z "$AppVersionName" -o "-$AUTO" != "-a" ]; then
|
|
echo
|
|
echo -n "Application user-visible version name (string) ($AppVersionName): "
|
|
read var
|
|
if [ -n "$var" ] ; then
|
|
AppVersionName="$var"
|
|
CHANGED=1
|
|
fi
|
|
fi
|
|
|
|
if [ -z "$ResetSdlConfigForThisVersion" -o "-$AUTO" != "-a" ]; then
|
|
echo
|
|
echo -n "Reset SDL config when updating application to the new version (y) / (n) ($ResetSdlConfigForThisVersion): "
|
|
read var
|
|
if [ -n "$var" ] ; then
|
|
ResetSdlConfigForThisVersion="$var"
|
|
CHANGED=1
|
|
fi
|
|
fi
|
|
|
|
if [ "-$AUTO" != "-a" ]; then
|
|
echo
|
|
echo -n "Delete application data files when upgrading (specify file/dir paths separated by spaces): ($DeleteFilesOnUpgrade): "
|
|
read var
|
|
if [ -n "$var" ] ; then
|
|
DeleteFilesOnUpgrade="$var"
|
|
CHANGED=1
|
|
fi
|
|
fi
|
|
|
|
# Compatibility - if RedefinedKeysScreenGestures is empty, copy keycodes from RedefinedKeysScreenKb
|
|
KEY2=0
|
|
if [ -z "$RedefinedKeysScreenGestures" ] ; then
|
|
RedefinedKeysScreenGestures="$(
|
|
for KEY in $RedefinedKeysScreenKb; do
|
|
if [ $KEY2 -ge 6 ] && [ $KEY2 -le 9 ]; then
|
|
echo -n $KEY ' '
|
|
fi
|
|
KEY2=$(expr $KEY2 '+' 1)
|
|
done
|
|
)"
|
|
RedefinedKeysScreenKb="$(
|
|
for KEY in $RedefinedKeysScreenKb; do
|
|
if [ $KEY2 -lt 6 ] || [ $KEY2 -gt 9 ]; then
|
|
echo -n $KEY ' '
|
|
fi
|
|
KEY2=$(expr $KEY2 '+' 1)
|
|
done
|
|
)"
|
|
fi
|
|
|
|
if [ -n "$CHANGED" ]; then
|
|
cat /dev/null > AndroidAppSettings.cfg
|
|
cat <<EOF >./AndroidAppSettings.cfg
|
|
# The application settings for Android libSDL port
|
|
|
|
# Specify application name (e.x. My Application)
|
|
AppName="$AppName"
|
|
|
|
# Specify reversed site name of application (e.x. com.mysite.myapp)
|
|
AppFullName=$AppFullName
|
|
|
|
# Application version code (integer)
|
|
AppVersionCode=$AppVersionCode
|
|
|
|
# Application user-visible version name (string)
|
|
AppVersionName="$AppVersionName"
|
|
|
|
# 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, '!!' will also hide the entry from the menu, so it cannot be disabled
|
|
# 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://' or 'https://', it is treated as file from 'project/jni/application/src/AndroidData' dir -
|
|
# these files are put inside .apk package by the build system
|
|
# You can specify Google Play expansion files in the form 'obb:main.12345' or 'obb:patch.12345' where 12345 is the app version for the obb file
|
|
# You can mount expansion files created with jobb tool if you put 'mnt:main.12345' or 'mnt:patch.12345'
|
|
# The mount directory will be returned by calling getenv("ANDROID_OBB_MOUNT_DIR")
|
|
# You can use .zip.xz archives for better compression, but you need to add 'lzma' to CompiledLibraries
|
|
# Generate .zip.xz files like this: zip -0 -r data.zip your-data/* ; xz -8 data.zip
|
|
AppDataDownloadUrl="$AppDataDownloadUrl"
|
|
|
|
# Reset SDL config when updating application to the new version (y) / (n)
|
|
ResetSdlConfigForThisVersion=$ResetSdlConfigForThisVersion
|
|
|
|
# Delete application data files when upgrading (specify file/dir paths separated by spaces)
|
|
DeleteFilesOnUpgrade="$DeleteFilesOnUpgrade"
|
|
|
|
# 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='$ReadmeText' | sed 's/\\\\n/\\\\\\\\n/g'
|
|
|
|
# libSDL version to use (1.2/2)
|
|
LibSdlVersion=$LibSdlVersion
|
|
|
|
# Specify screen orientation: (v)ertical/(p)ortrait or (h)orizontal/(l)andscape
|
|
ScreenOrientation=$ScreenOrientation
|
|
|
|
# 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=$VideoDepthBpp
|
|
|
|
# Enable OpenGL depth buffer (needed only for 3-d applications, small speed decrease) (y) or (n)
|
|
NeedDepthBuffer=$NeedDepthBuffer
|
|
|
|
# Enable OpenGL stencil buffer (needed only for 3-d applications, small speed decrease) (y) or (n)
|
|
NeedStencilBuffer=$NeedStencilBuffer
|
|
|
|
# Use GLES 2.x context
|
|
# you need this option only if you're developing 3-d app (y) or (n)
|
|
NeedGles2=$NeedGles2
|
|
|
|
# Use GLES 3.x context
|
|
# you need this option only if you're developing 3-d app (y) or (n)
|
|
NeedGles3=$NeedGles3
|
|
|
|
# Use gl4es library for provide OpenGL 1.x functionality to OpenGL ES accelerated cards (y) or (n)
|
|
UseGl4es=$UseGl4es
|
|
|
|
# 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=$SwVideoMode
|
|
|
|
# Application video output will be resized to fit into native device screen (y)/(n)
|
|
SdlVideoResize=$SdlVideoResize
|
|
|
|
# Application resizing will keep 4:3 aspect ratio, with black bars at sides (y)/(n)
|
|
SdlVideoResizeKeepAspect=$SdlVideoResizeKeepAspect
|
|
|
|
# Do not allow device to sleep when the application is in foreground, set this for video players or apps which use accelerometer
|
|
InhibitSuspend=$InhibitSuspend
|
|
|
|
# Create Android service, so the app is less likely to be killed while in background
|
|
CreateService=$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=$CompatibilityHacksForceScreenUpdate
|
|
|
|
# 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=$CompatibilityHacksForceScreenUpdateMouseClick
|
|
|
|
# Application initializes SDL audio/video inside static constructors (which is bad, you won't be able to run ndk-gdb) (y)/(n)
|
|
CompatibilityHacksStaticInit=$CompatibilityHacksStaticInit
|
|
|
|
# On-screen Android soft text input emulates hardware keyboard, this will only work with Hackers Keyboard app (y)/(n)
|
|
CompatibilityHacksTextInputEmulatesHwKeyboard=$CompatibilityHacksTextInputEmulatesHwKeyboard
|
|
|
|
# Built-in text input keyboards with custom layouts for emulators, requires CompatibilityHacksTextInputEmulatesHwKeyboard=y
|
|
# 0 or empty - standard Android keyboard
|
|
# 1 - Simple QWERTY keyboard, no function keys, no arrow keys
|
|
# 2 - Commodore 64 keyboard
|
|
# 3 - Amiga keyboard
|
|
# 4 - Atari800 keyboard
|
|
TextInputKeyboard=$TextInputKeyboard
|
|
|
|
# Hack for broken devices: prevent audio chopping, by sleeping a bit after pushing each audio chunk (y)/(n)
|
|
CompatibilityHacksPreventAudioChopping=$CompatibilityHacksPreventAudioChopping
|
|
|
|
# Hack for broken apps: application ignores audio buffer size returned by SDL (y)/(n)
|
|
CompatibilityHacksAppIgnoresAudioBufferSize=$CompatibilityHacksAppIgnoresAudioBufferSize
|
|
|
|
# Hack for VCMI: preload additional shared libraries before aplication start
|
|
CompatibilityHacksAdditionalPreloadedSharedLibraries="$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=$CompatibilityHacksSlowCompatibleEventQueue
|
|
|
|
# Save and restore OpenGL state when drawing on-screen keyboard for apps that use SDL_OPENGL
|
|
CompatibilityHacksTouchscreenKeyboardSaveRestoreOpenGLState=$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=$CompatibilityHacksProperUsageOfSDL_UpdateRects
|
|
|
|
# Application uses mouse (y) or (n), this will show mouse emulation dialog to the user
|
|
AppUsesMouse=$AppUsesMouse
|
|
|
|
# Application needs two-button mouse, will also enable advanced point-and-click features (y) or (n)
|
|
AppNeedsTwoButtonMouse=$AppNeedsTwoButtonMouse
|
|
|
|
# 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=$RightMouseButtonLongPress
|
|
|
|
# Show SDL mouse cursor, for applications that do not draw cursor at all (y) or (n)
|
|
ShowMouseCursor=$ShowMouseCursor
|
|
|
|
# Screen follows mouse cursor, when it's covered by soft keyboard, this works only in software video mode (y) or (n)
|
|
ScreenFollowsMouse=$ScreenFollowsMouse
|
|
|
|
# Generate more touch events, by default SDL generates one event per one video frame, this is useful for drawing apps (y) or (n)
|
|
GenerateSubframeTouchEvents=$GenerateSubframeTouchEvents
|
|
|
|
# Force relative (laptop) mouse movement mode, useful when both on-screen keyboard and mouse are needed (y) or (n)
|
|
ForceRelativeMouseMode=$ForceRelativeMouseMode
|
|
|
|
# Show on-screen dpad/joystick, that will act as arrow keys (y) or (n)
|
|
AppNeedsArrowKeys=$AppNeedsArrowKeys
|
|
|
|
# On-screen dpad/joystick will appear under finger when it touches the screen (y) or (n)
|
|
# Joystick always follows finger, so moving mouse requires touching the screen with other finger
|
|
FloatingScreenJoystick=$FloatingScreenJoystick
|
|
|
|
# Application needs text input (y) or (n), enables button for text input on screen
|
|
AppNeedsTextInput=$AppNeedsTextInput
|
|
|
|
# Application uses joystick (y) or (n), the on-screen DPAD will be used as joystick 0 axes 0-1
|
|
# This will disable AppNeedsArrowKeys option
|
|
AppUsesJoystick=$AppUsesJoystick
|
|
|
|
# Application uses second on-screen joystick, as SDL joystick 0 axes 2-3 (y)/(n)
|
|
AppUsesSecondJoystick=$AppUsesSecondJoystick
|
|
|
|
# Application uses third on-screen joystick, as SDL joystick 0 axes 20-21 (y)/(n)
|
|
AppUsesThirdJoystick=$AppUsesThirdJoystick
|
|
|
|
# Application uses accelerometer (y) or (n), the accelerometer will be used as joystick 1 axes 0-1 and 5-7
|
|
AppUsesAccelerometer=$AppUsesAccelerometer
|
|
|
|
# Application uses gyroscope (y) or (n), the gyroscope will be used as joystick 1 axes 2-4
|
|
AppUsesGyroscope=$AppUsesGyroscope
|
|
|
|
# Application uses orientation sensor (y) or (n), reported as joystick 1 axes 8-10
|
|
AppUsesOrientationSensor=$AppUsesOrientationSensor
|
|
|
|
# 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=$MoveMouseWithGyroscope
|
|
|
|
# Application uses multitouch (y) or (n), multitouch events are passed as SDL_JOYBALLMOTION events for the joystick 0
|
|
AppUsesMultitouch=$AppUsesMultitouch
|
|
|
|
# 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=$AppRecordsAudio
|
|
|
|
# Application needs read/write access SD card. Always disable it, unless you want to access user photos and downloads. (y) / (n)
|
|
AccessSdCard=$AccessSdCard
|
|
|
|
# Application needs to read it's own OBB file. Enable this if you are using Play Store expansion files. (y) / (n)
|
|
ReadObbFile=$ReadObbFile
|
|
|
|
# Application needs Internet access. If you disable it, you'll have to bundle all your data files inside .apk (y) / (n)
|
|
AccessInternet=$AccessInternet
|
|
|
|
# Immersive mode - Android will hide on-screen Home/Back keys. Looks bad if you invoke Android keyboard. (y) / (n)
|
|
ImmersiveMode=$ImmersiveMode
|
|
|
|
# Draw in the display cutout area. (y) / (n)
|
|
DrawInDisplayCutout=$DrawInDisplayCutout
|
|
|
|
# Hide Android system mouse cursor image when USB mouse is attached (y) or (n) - the app must draw it's own mouse cursor
|
|
HideSystemMousePointer=$HideSystemMousePointer
|
|
|
|
# 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=$NonBlockingSwapBuffers
|
|
|
|
# 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="$RedefinedKeys"
|
|
|
|
# Number of virtual keyboard keys - currently 12 keys is the maximum
|
|
AppTouchscreenKeyboardKeysAmount=$AppTouchscreenKeyboardKeysAmount
|
|
|
|
# Define SDL keysyms for multitouch gestures - pinch-zoom in, pinch-zoom out, rotate left, rotate right
|
|
RedefinedKeysScreenGestures="$RedefinedKeysScreenGestures"
|
|
|
|
# Redefine on-screen keyboard keys to SDL keysyms - currently 12 keys is the maximum
|
|
RedefinedKeysScreenKb="$RedefinedKeysScreenKb"
|
|
|
|
# Names for on-screen keyboard keys, such as Fire, Jump, Run etc, separated by spaces, they are used in SDL config menu
|
|
RedefinedKeysScreenKbNames="$RedefinedKeysScreenKbNames"
|
|
|
|
# On-screen keys theme
|
|
# 0 = Ultimate Droid by Sean Stieber (green, with cross joystick)
|
|
# 1 = Simple Theme by Beholder (white, with cross joystick)
|
|
# 2 = Sun by Sirea (yellow, with round joystick)
|
|
# 3 = Keen by Gerstrong (multicolor, with round joystick)
|
|
# 4 = Retro by Santiago Radeff (red/white, with cross joystick)
|
|
# 5 = GameBoy from RetroArch
|
|
# 6 = PlayStation from RetroArch
|
|
# 7 = SuperNintendo from RetroArch
|
|
# 8 = DualShock from RetroArch
|
|
# 9 = Nintendo64 from RetroArch
|
|
TouchscreenKeysTheme=$TouchscreenKeysTheme
|
|
|
|
# Redefine gamepad keys to SDL keysyms, button order is:
|
|
# A B X Y L1 R1 L2 R2 LThumb RThumb Start Select Up Down Left Right LThumbUp LThumbDown LThumbLeft LThumbRight RThumbUp RThumbDown RThumbLeft RThumbRight
|
|
RedefinedKeysGamepad="$RedefinedKeysGamepad"
|
|
|
|
# Redefine keys for the second gamepad, same as the first gamepad if not set:
|
|
RedefinedKeysSecondGamepad="$RedefinedKeysSecondGamepad"
|
|
|
|
# Redefine keys for the third gamepad, same as the first gamepad if not set:
|
|
RedefinedKeysThirdGamepad="$RedefinedKeysThirdGamepad"
|
|
|
|
# Redefine keys for the fourth gamepad, same as the first gamepad if not set:
|
|
RedefinedKeysFourthGamepad="$RedefinedKeysFourthGamepad"
|
|
|
|
# How long to show startup menu button, in msec, 0 to disable startup menu
|
|
StartupMenuButtonTimeout=$StartupMenuButtonTimeout
|
|
|
|
# Menu items to hide from startup menu, available menu items (SDL 1.2 only):
|
|
# ${MenuOptionsAvailable%[[:space:]]}
|
|
|
|
HiddenMenuOptions='$HiddenMenuOptions'
|
|
|
|
# Menu items to show at startup - this is Java code snippet, leave empty for default
|
|
# $FirstStartMenuOptionsDefault
|
|
# Available menu items:
|
|
# ${MenuOptionsAvailable%[[:space:]]}
|
|
FirstStartMenuOptions='$FirstStartMenuOptions'
|
|
|
|
# Minimum amount of RAM application requires, in Mb, SDL will print warning to user if it's lower
|
|
AppMinimumRAM=$AppMinimumRAM
|
|
|
|
# GCC version, or 'clang' for CLANG
|
|
NDK_TOOLCHAIN_VERSION=$NDK_TOOLCHAIN_VERSION
|
|
|
|
# Android platform version.
|
|
# android-16 = Android 4.1, the earliest supported version in NDK r18.
|
|
# android-18 = Android 4.3, the first version supporting GLES3.
|
|
# android-21 = Android 5.1, the first version with SO_REUSEPORT defined, also minimum version for Google Play Services since Aug. 2023 https://android-developers.googleblog.com/2023/07/google-play-services-discontinuing-updates-for-kitkat.html
|
|
# android-24 = Android 7.0, the first version with ifaddrs.h (needed for getifaddrs)
|
|
APP_PLATFORM=$APP_PLATFORM
|
|
|
|
# Specify architectures to compile, 'all' or 'y' to compile for all architectures.
|
|
# Available architectures: armeabi-v7a arm64-v8a x86 x86_64
|
|
MultiABI='$MultiABI'
|
|
|
|
# Optional shared libraries to compile - removing some of them will save space
|
|
# MP3 patents are expired, but libmad license is GPL, not LGPL
|
|
# 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
|
|
# rep 'Available' project/jni/SettingsTemplate.mk
|
|
CompiledLibraries="$CompiledLibraries"
|
|
|
|
# Application uses custom build script AndroidBuild.sh instead of Android.mk (y) or (n)
|
|
CustomBuildScript=$CustomBuildScript
|
|
|
|
# Aditional CFLAGS for application
|
|
AppCflags='$AppCflags'
|
|
|
|
# Aditional C++-specific compiler flags for application, added after AppCflags
|
|
AppCppflags='$AppCppflags'
|
|
|
|
# Additional LDFLAGS for application
|
|
AppLdflags='$AppLdflags'
|
|
|
|
# If application has headers with the same name as system headers, this option tries to fix compiler flags to make it compilable
|
|
AppOverlapsSystemHeaders=$AppOverlapsSystemHeaders
|
|
|
|
# Build only following subdirs (empty will build all dirs, ignored with custom script)
|
|
AppSubdirsBuild='$AppSubdirsBuild'
|
|
|
|
# Exclude these files from build
|
|
AppBuildExclude='$AppBuildExclude'
|
|
|
|
# Application command line parameters, including app name as 0-th param
|
|
AppCmdline='$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=$MinimumScreenSize
|
|
|
|
# Your AdMob Publisher ID, (n) if you don't want advertisements
|
|
AdmobPublisherId=$AdmobPublisherId
|
|
|
|
# Your AdMob test device ID, to receive a test ad
|
|
AdmobTestDeviceId=$AdmobTestDeviceId
|
|
|
|
# Your AdMob banner size (BANNER/FULL_BANNER/LEADERBOARD/MEDIUM_RECTANGLE/SMART_BANNER/WIDE_SKYSCRAPER/FULL_WIDTH:Height/Width:AUTO_HEIGHT/Width:Height)
|
|
AdmobBannerSize=$AdmobBannerSize
|
|
|
|
# Google Play Game Services application ID, required for cloud saves to work
|
|
GooglePlayGameServicesId=$GooglePlayGameServicesId
|
|
|
|
# The app will open files with following extension, file path will be added to commandline params
|
|
AppOpenFileExtension='$AppOpenFileExtension'
|
|
EOF
|
|
fi
|
|
|
|
AppShortName=`echo $AppName | sed 's/ //g'`
|
|
DataPath="$AppFullName"
|
|
AppFullNameUnderscored=`echo $AppFullName | sed 's/[.]/_/g'`
|
|
AppSharedLibrariesPath=/data/data/$AppFullName/lib
|
|
ScreenOrientation1=sensorPortrait
|
|
HorizontalOrientation=false
|
|
|
|
UsingSdl2=false
|
|
if [ "$LibSdlVersion" = "2.0" ] ; then
|
|
LibSdlVersion="2"
|
|
fi
|
|
if [ "$LibSdlVersion" = "2" ] ; then
|
|
UsingSdl2=true
|
|
fi
|
|
|
|
if [ "$ScreenOrientation" = "h" -o "$ScreenOrientation" = "l" ] ; then
|
|
ScreenOrientation1=sensorLandscape
|
|
HorizontalOrientation=true
|
|
fi
|
|
|
|
AppDataDownloadUrl1="`echo $AppDataDownloadUrl | sed 's/[&]/%26/g'`"
|
|
|
|
if [ "$SdlVideoResize" = "y" ] ; then
|
|
SdlVideoResize=1
|
|
else
|
|
SdlVideoResize=0
|
|
fi
|
|
|
|
if [ "$SdlVideoResizeKeepAspect" = "y" ] ; then
|
|
SdlVideoResizeKeepAspect=true
|
|
else
|
|
SdlVideoResizeKeepAspect=false
|
|
fi
|
|
|
|
if [ "$InhibitSuspend" = "y" ] ; then
|
|
InhibitSuspend=true
|
|
else
|
|
InhibitSuspend=false
|
|
fi
|
|
|
|
if [ "$NeedDepthBuffer" = "y" ] ; then
|
|
NeedDepthBuffer=true
|
|
else
|
|
NeedDepthBuffer=false
|
|
fi
|
|
|
|
if [ "$NeedStencilBuffer" = "y" ] ; then
|
|
NeedStencilBuffer=true
|
|
else
|
|
NeedStencilBuffer=false
|
|
fi
|
|
|
|
if [ "$UseGl4es" = "y" ] ; then
|
|
UseGl4esCFlags=-DUSE_GL4ES=1
|
|
else
|
|
UseGl4es=
|
|
UseGl4esCFlags=
|
|
fi
|
|
|
|
if [ "$SwVideoMode" = "y" ] ; then
|
|
SwVideoMode=true
|
|
else
|
|
SwVideoMode=false
|
|
fi
|
|
|
|
if [ "$CompatibilityHacksForceScreenUpdate" = "y" ] ; then
|
|
CompatibilityHacksForceScreenUpdate=true
|
|
else
|
|
CompatibilityHacksForceScreenUpdate=false
|
|
fi
|
|
|
|
if [ "$CompatibilityHacksForceScreenUpdateMouseClick" = "y" ] ; then
|
|
CompatibilityHacksForceScreenUpdateMouseClick=true
|
|
else
|
|
CompatibilityHacksForceScreenUpdateMouseClick=false
|
|
fi
|
|
|
|
if [ "$CompatibilityHacksStaticInit" = "y" ] ; then
|
|
CompatibilityHacksStaticInit=true
|
|
else
|
|
CompatibilityHacksStaticInit=false
|
|
fi
|
|
|
|
if [ "$CompatibilityHacksTextInputEmulatesHwKeyboard" = "y" ] ; then
|
|
CompatibilityHacksTextInputEmulatesHwKeyboard=true
|
|
else
|
|
CompatibilityHacksTextInputEmulatesHwKeyboard=false
|
|
fi
|
|
|
|
if [ -z "$TextInputKeyboard" ] ; then
|
|
TextInputKeyboard=0
|
|
fi
|
|
|
|
if [ "$CompatibilityHacksPreventAudioChopping" = "y" ] ; then
|
|
CompatibilityHacksPreventAudioChopping=-DSDL_AUDIO_PREVENT_CHOPPING_WITH_DELAY=1
|
|
else
|
|
CompatibilityHacksPreventAudioChopping=
|
|
fi
|
|
|
|
if [ "$CompatibilityHacksAppIgnoresAudioBufferSize" = "y" ] ; then
|
|
CompatibilityHacksAppIgnoresAudioBufferSize=-DSDL_AUDIO_APP_IGNORES_RETURNED_BUFFER_SIZE=1
|
|
else
|
|
CompatibilityHacksAppIgnoresAudioBufferSize=
|
|
fi
|
|
|
|
if [ "$CompatibilityHacksSlowCompatibleEventQueue" = "y" ]; then
|
|
CompatibilityHacksSlowCompatibleEventQueue=-DSDL_COMPATIBILITY_HACKS_SLOW_COMPATIBLE_EVENT_QUEUE=1
|
|
else
|
|
CompatibilityHacksSlowCompatibleEventQueue=
|
|
fi
|
|
|
|
if [ "$CompatibilityHacksTouchscreenKeyboardSaveRestoreOpenGLState" = "y" ]; then
|
|
CompatibilityHacksTouchscreenKeyboardSaveRestoreOpenGLState=-DSDL_TOUCHSCREEN_KEYBOARD_SAVE_RESTORE_OPENGL_STATE=1
|
|
else
|
|
CompatibilityHacksTouchscreenKeyboardSaveRestoreOpenGLState=
|
|
fi
|
|
|
|
if [ "$CompatibilityHacksProperUsageOfSDL_UpdateRects" = "y" ]; then
|
|
CompatibilityHacksProperUsageOfSDL_UpdateRects=-DSDL_COMPATIBILITY_HACKS_PROPER_USADE_OF_SDL_UPDATERECTS=1
|
|
else
|
|
CompatibilityHacksProperUsageOfSDL_UpdateRects=
|
|
fi
|
|
|
|
if [ "$AppUsesMouse" = "y" ] ; then
|
|
AppUsesMouse=true
|
|
else
|
|
AppUsesMouse=false
|
|
fi
|
|
|
|
if [ "$AppNeedsTwoButtonMouse" = "y" ] ; then
|
|
AppNeedsTwoButtonMouse=true
|
|
else
|
|
AppNeedsTwoButtonMouse=false
|
|
fi
|
|
|
|
if [ "$RightMouseButtonLongPress" = "n" ] ; then
|
|
RightMouseButtonLongPress=false
|
|
else
|
|
RightMouseButtonLongPress=true
|
|
fi
|
|
|
|
if [ "$ForceRelativeMouseMode" = "y" ] ; then
|
|
ForceRelativeMouseMode=true
|
|
else
|
|
ForceRelativeMouseMode=false
|
|
fi
|
|
|
|
if [ "$ShowMouseCursor" = "y" ] ; then
|
|
ShowMouseCursor=true
|
|
else
|
|
ShowMouseCursor=false
|
|
fi
|
|
|
|
if [ "$ScreenFollowsMouse" = "y" ] ; then
|
|
ScreenFollowsMouse=true
|
|
else
|
|
ScreenFollowsMouse=false
|
|
fi
|
|
|
|
if [ "$GenerateSubframeTouchEvents" = "y" ] ; then
|
|
GenerateSubframeTouchEvents=true
|
|
else
|
|
GenerateSubframeTouchEvents=false
|
|
fi
|
|
|
|
if [ "$AppNeedsArrowKeys" = "y" ] ; then
|
|
AppNeedsArrowKeys=true
|
|
else
|
|
AppNeedsArrowKeys=false
|
|
fi
|
|
|
|
if [ "$FloatingScreenJoystick" = "y" ] ; then
|
|
FloatingScreenJoystick=true
|
|
else
|
|
FloatingScreenJoystick=false
|
|
fi
|
|
|
|
if [ "$AppNeedsTextInput" = "y" ] ; then
|
|
AppNeedsTextInput=true
|
|
else
|
|
AppNeedsTextInput=false
|
|
fi
|
|
|
|
if [ "$AppUsesJoystick" = "y" ] ; then
|
|
AppUsesJoystick=true
|
|
else
|
|
AppUsesJoystick=false
|
|
fi
|
|
|
|
if [ "$AppUsesSecondJoystick" = "y" ] ; then
|
|
AppUsesSecondJoystick=true
|
|
else
|
|
AppUsesSecondJoystick=false
|
|
fi
|
|
|
|
if [ "$AppUsesThirdJoystick" = "y" ] ; then
|
|
AppUsesThirdJoystick=true
|
|
else
|
|
AppUsesThirdJoystick=false
|
|
fi
|
|
|
|
if [ "$AppUsesAccelerometer" = "y" ] ; then
|
|
AppUsesAccelerometer=true
|
|
else
|
|
AppUsesAccelerometer=false
|
|
fi
|
|
|
|
if [ "$AppUsesGyroscope" = "y" ] ; then
|
|
AppUsesGyroscope=true
|
|
else
|
|
AppUsesGyroscope=false
|
|
fi
|
|
|
|
if [ "$AppUsesOrientationSensor" = "y" ] ; then
|
|
AppUsesOrientationSensor=true
|
|
else
|
|
AppUsesOrientationSensor=false
|
|
fi
|
|
|
|
if [ "$MoveMouseWithGyroscope" = "y" ] ; then
|
|
MoveMouseWithGyroscope=true
|
|
else
|
|
MoveMouseWithGyroscope=false
|
|
fi
|
|
|
|
if [ "$AppUsesMultitouch" = "y" ] ; then
|
|
AppUsesMultitouch=true
|
|
else
|
|
AppUsesMultitouch=false
|
|
fi
|
|
|
|
if [ "$NonBlockingSwapBuffers" = "y" ] ; then
|
|
NonBlockingSwapBuffers=true
|
|
else
|
|
NonBlockingSwapBuffers=false
|
|
fi
|
|
|
|
if [ "$ResetSdlConfigForThisVersion" = "y" ] ; then
|
|
ResetSdlConfigForThisVersion=true
|
|
else
|
|
ResetSdlConfigForThisVersion=false
|
|
fi
|
|
|
|
KEY2=0
|
|
for KEY in $RedefinedKeys; do
|
|
RedefinedKeycodes="$RedefinedKeycodes -DSDL_ANDROID_KEYCODE_$KEY2=$KEY"
|
|
KEY2=`expr $KEY2 '+' 1`
|
|
done
|
|
|
|
KEY2=0
|
|
for KEY in $RedefinedKeysScreenGestures; do
|
|
RedefinedSDLScreenGestures="$RedefinedSDLScreenGestures -DSDL_ANDROID_SCREEN_GESTURE_KEYCODE_$KEY2=$KEY"
|
|
KEY2=`expr $KEY2 '+' 1`
|
|
done
|
|
|
|
KEY2=0
|
|
for KEY in $RedefinedKeysScreenKb; do
|
|
RedefinedKeycodesScreenKb="$RedefinedKeycodesScreenKb -DSDL_ANDROID_SCREENKB_KEYCODE_$KEY2=$KEY"
|
|
KEY2=`expr $KEY2 '+' 1`
|
|
done
|
|
|
|
KEY2=0
|
|
for KEY in $RedefinedKeysGamepad; do
|
|
RedefinedKeycodesGamepad="$RedefinedKeycodesGamepad -DSDL_ANDROID_GAMEPAD_0_KEYCODE_$KEY2=$KEY"
|
|
KEY2=`expr $KEY2 '+' 1`
|
|
done
|
|
|
|
KEY2=0
|
|
for KEY in $RedefinedKeysSecondGamepad; do
|
|
RedefinedKeycodesGamepad="$RedefinedKeycodesGamepad -DSDL_ANDROID_GAMEPAD_1_KEYCODE_$KEY2=$KEY"
|
|
KEY2=`expr $KEY2 '+' 1`
|
|
done
|
|
|
|
KEY2=0
|
|
for KEY in $RedefinedKeysThirdGamepad; do
|
|
RedefinedKeycodesGamepad="$RedefinedKeycodesGamepad -DSDL_ANDROID_GAMEPAD_2_KEYCODE_$KEY2=$KEY"
|
|
KEY2=`expr $KEY2 '+' 1`
|
|
done
|
|
|
|
KEY2=0
|
|
for KEY in $RedefinedKeysFourthGamepad; do
|
|
RedefinedKeycodesGamepad="$RedefinedKeycodesGamepad -DSDL_ANDROID_GAMEPAD_3_KEYCODE_$KEY2=$KEY"
|
|
KEY2=`expr $KEY2 '+' 1`
|
|
done
|
|
|
|
if [ "$APP_PLATFORM" = "" ]; then
|
|
APP_PLATFORM=android-19
|
|
fi
|
|
|
|
if [ "$MultiABI" = "y" ] ; then
|
|
MultiABI="all"
|
|
elif [ "$MultiABI" = "n" ] ; then
|
|
MultiABI="armeabi-v7a"
|
|
else
|
|
MultiABI="$MultiABI"
|
|
fi
|
|
|
|
LibrariesToLoad="\\\"sdl_native_helpers\\\", \\\"`$UsingSdl2 && echo SDL2 || echo sdl-1.2`\\\""
|
|
|
|
StaticLibraries="`echo '
|
|
include project/jni/SettingsTemplate.mk
|
|
all:
|
|
@echo $(APP_AVAILABLE_STATIC_LIBS)
|
|
.PHONY: all' | make -s -f -`"
|
|
for lib in $CompiledLibraries; do
|
|
process=true
|
|
for lib1 in $StaticLibraries; do
|
|
if [ "$lib" = "$lib1" ]; then process=false; fi
|
|
done
|
|
if $process; then
|
|
LibrariesToLoad="$LibrariesToLoad, \\\"$lib\\\""
|
|
fi
|
|
done
|
|
|
|
MainLibrariesToLoad=""
|
|
for lib in $CompatibilityHacksAdditionalPreloadedSharedLibraries; do
|
|
MainLibrariesToLoad="$MainLibrariesToLoad \\\"$lib\\\","
|
|
done
|
|
|
|
if $UsingSdl2; then
|
|
MainLibrariesToLoad="$MainLibrariesToLoad \\\"application\\\""
|
|
else
|
|
MainLibrariesToLoad="$MainLibrariesToLoad \\\"application\\\", \\\"sdl_main\\\""
|
|
fi
|
|
|
|
if [ "$CustomBuildScript" = "n" ] ; then
|
|
CustomBuildScript=
|
|
fi
|
|
|
|
HiddenMenuOptions1=""
|
|
for F in $HiddenMenuOptions; do
|
|
HiddenMenuOptions1="$HiddenMenuOptions1 new $F(),"
|
|
done
|
|
|
|
FirstStartMenuOptions1=""
|
|
for F in $FirstStartMenuOptions; do
|
|
FirstStartMenuOptions1="$FirstStartMenuOptions1 new $F(),"
|
|
done
|
|
|
|
#if [ -z "$FirstStartMenuOptions" ]; then
|
|
# FirstStartMenuOptions="$FirstStartMenuOptionsDefault"
|
|
#fi
|
|
|
|
ReadmeText="`echo $ReadmeText | sed 's/\"/\\\\\\\\\"/g' | sed 's/[&%]//g'`"
|
|
|
|
|
|
SEDI="sed -i"
|
|
if uname -s | grep -i "darwin" > /dev/null ; then
|
|
SEDI="sed -i.killme.tmp" # MacOsX version of sed is buggy, and requires a mandatory parameter
|
|
fi
|
|
|
|
rm -rf project/src
|
|
mkdir -p project/src
|
|
|
|
if $UsingSdl2; then
|
|
JAVA_SRC_PATH=project/javaSDL2
|
|
fi
|
|
|
|
cd $JAVA_SRC_PATH
|
|
for F in *.java; do
|
|
echo '// DO NOT EDIT THIS FILE - it is automatically generated, ALL YOUR CHANGES WILL BE OVERWRITTEN, edit the file under '$JAVA_SRC_PATH' dir' | cat - $F > ../src/$F
|
|
done
|
|
|
|
for F in ../src/*.java; do
|
|
echo Patching $F
|
|
$SEDI "s/^package .*;/package $AppFullName;/" $F
|
|
done
|
|
|
|
if $UsingSdl2; then
|
|
# Keep package name org.libsdl.app, it's hardcoded inside libSDL2.so
|
|
for F in `ls ../jni/sdl2/android-project/app/src/main/java/org/libsdl/app/`; do
|
|
echo '// DO NOT EDIT THIS FILE - it is automatically generated, ALL YOUR CHANGES WILL BE OVERWRITTEN,' \
|
|
'edit the file under project/jni/sdl2/android-project/app/src/main/java/org/libsdl/app dir' | \
|
|
cat - ../jni/sdl2/android-project/app/src/main/java/org/libsdl/app/$F > ../src/$F
|
|
done
|
|
fi
|
|
|
|
if [ -e ../jni/application/src/java.diff ]; then patch -d ../src --no-backup-if-mismatch < ../jni/application/src/java.diff || exit 1 ; fi
|
|
if [ -e ../jni/application/src/java.patch ]; then patch -d ../src --no-backup-if-mismatch < ../jni/application/src/java.patch || exit 1 ; fi
|
|
if ls ../jni/application/src/*.java > /dev/null 2>&1; then cp -f ../jni/application/src/*.java ../src ; fi
|
|
|
|
cd ../..
|
|
|
|
if $UsingSdl2; then
|
|
ANDROID_MANIFEST_TEMPLATE=project/jni/sdl2/android-project/app/src/main/AndroidManifest.xml
|
|
else
|
|
ANDROID_MANIFEST_TEMPLATE=project/AndroidManifestTemplate.xml
|
|
fi
|
|
|
|
echo Patching project/AndroidManifest.xml
|
|
cat $ANDROID_MANIFEST_TEMPLATE | \
|
|
sed "s/package=.*//" | \
|
|
sed "s/android:screenOrientation=.*/android:screenOrientation=\"$ScreenOrientation1\"/" | \
|
|
sed "s^android:versionCode=.*^android:versionCode=\"$AppVersionCode\"^" | \
|
|
sed "s^android:versionName=.*^android:versionName=\"$AppVersionName\"^" | \
|
|
sed "s^activity android:name=\"SDLActivity\"^activity android:name=\"MainActivity\"^" > \
|
|
project/AndroidManifest.xml
|
|
if [ "$AdmobPublisherId" = "n" -o -z "$AdmobPublisherId" ] ; then
|
|
$SEDI "/==ADMOB==/ d" project/AndroidManifest.xml
|
|
AdmobPublisherId=""
|
|
else
|
|
F=$JAVA_SRC_PATH/admob/Advertisement.java
|
|
echo Patching $F
|
|
echo '// DO NOT EDIT THIS FILE - it is automatically generated, edit file under $JAVA_SRC_PATH dir' > project/src/Advertisement.java
|
|
cat $F | sed "s/^package .*;/package $AppFullName;/" >> project/src/Advertisement.java
|
|
fi
|
|
|
|
if [ -z "$ANDROID_NDK_HOME" ]; then
|
|
export ANDROID_NDK_HOME="$(which ndk-build | sed 's@/ndk-build@@')"
|
|
fi
|
|
if [ -z "$ANDROID_NDK_HOME" ]; then
|
|
echo "Set ANDROID_NDK_HOME env variable, or put ndk-build into your PATH"
|
|
exit 1
|
|
fi
|
|
NDK_VER=$(grep -Po "(?<=Pkg.Revision = )[0-9.]+" ${ANDROID_NDK_HOME}/source.properties)
|
|
|
|
cat project/app/build-template.gradle | \
|
|
sed 's/applicationId .*/applicationId "'"${AppFullName}"'"/' | \
|
|
sed 's/namespace .*/namespace '"'"${AppFullName}"'"'/' | \
|
|
sed 's/ndkVersion .*/ndkVersion "'"${NDK_VER}"'"/' > \
|
|
project/app/build.gradle
|
|
|
|
echo "-keep class $AppFullName.** { *; }" > project/proguard-local.cfg
|
|
|
|
if [ "$AppRecordsAudio" = "n" -o -z "$AppRecordsAudio" ] ; then
|
|
$SEDI "/==RECORD_AUDIO==/ d" project/AndroidManifest.xml
|
|
fi
|
|
|
|
case "$MinimumScreenSize" in
|
|
n|m)
|
|
$SEDI "/==SCREEN-SIZE-SMALL==/ d" project/AndroidManifest.xml
|
|
$SEDI "/==SCREEN-SIZE-LARGE==/ d" project/AndroidManifest.xml
|
|
;;
|
|
l)
|
|
$SEDI "/==SCREEN-SIZE-SMALL==/ d" project/AndroidManifest.xml
|
|
$SEDI "/==SCREEN-SIZE-NORMAL==/ d" project/AndroidManifest.xml
|
|
;;
|
|
*)
|
|
$SEDI "/==SCREEN-SIZE-NORMAL==/ d" project/AndroidManifest.xml
|
|
$SEDI "/==SCREEN-SIZE-LARGE==/ d" project/AndroidManifest.xml
|
|
;;
|
|
esac
|
|
|
|
if [ "$AccessSdCard" = "y" ]; then
|
|
$SEDI "/==NOT_EXTERNAL_STORAGE==/ d" project/AndroidManifest.xml
|
|
$SEDI "/==READ_OBB==/ d" project/AndroidManifest.xml
|
|
else
|
|
if [ "$ReadObbFile" = "y" ]; then
|
|
$SEDI "/==EXTERNAL_STORAGE==/ d" project/AndroidManifest.xml # Disabled by default
|
|
$SEDI "/==NOT_EXTERNAL_STORAGE==/ d" project/AndroidManifest.xml
|
|
else
|
|
$SEDI "/==EXTERNAL_STORAGE==/ d" project/AndroidManifest.xml # Disabled by default
|
|
$SEDI "/==READ_OBB==/ d" project/AndroidManifest.xml
|
|
fi
|
|
fi
|
|
|
|
if [ "$AccessInternet" = "n" ]; then
|
|
$SEDI "/==INTERNET==/ d" project/AndroidManifest.xml
|
|
fi
|
|
|
|
if [ -z "$AppOpenFileExtension" ]; then
|
|
$SEDI "/==OPENFILE==/ d" project/AndroidManifest.xml
|
|
else
|
|
EXTS="`for EXT in $AppOpenFileExtension; do echo -n '\\\\1'$EXT'\\\\2' ; done`"
|
|
$SEDI "s/\(.*\)==OPENFILE-EXT==\(.*\)/$EXTS/g" project/AndroidManifest.xml
|
|
fi
|
|
|
|
if [ "$ImmersiveMode" = "n" ]; then
|
|
ImmersiveMode=false
|
|
else
|
|
ImmersiveMode=true
|
|
fi
|
|
|
|
if [ "$DrawInDisplayCutout" = "y" ]; then
|
|
DrawInDisplayCutout=true
|
|
else
|
|
DrawInDisplayCutout=false
|
|
fi
|
|
|
|
if [ "$HideSystemMousePointer" = "n" ]; then
|
|
HideSystemMousePointer=false
|
|
else
|
|
HideSystemMousePointer=true
|
|
fi
|
|
|
|
if [ "$CreateService" = "y" ] ; then
|
|
CreateService=true
|
|
else
|
|
CreateService=false
|
|
$SEDI "/==FOREGROUND_SERVICE==/ d" project/AndroidManifest.xml
|
|
fi
|
|
|
|
GLESLib=-lGLESv1_CM
|
|
GLESVersion=-DSDL_VIDEO_OPENGL_ES_VERSION=1
|
|
|
|
if [ "$NeedGles2" = "y" ] ; then
|
|
NeedGles2=true
|
|
GLESLib=-lGLESv2
|
|
GLESVersion=-DSDL_VIDEO_OPENGL_ES_VERSION=2
|
|
else
|
|
NeedGles2=false
|
|
$SEDI "/==GLES2==/ d" project/AndroidManifest.xml
|
|
fi
|
|
|
|
if [ "$NeedGles3" = "y" ] ; then
|
|
NeedGles3=true
|
|
GLESLib=-lGLESv3
|
|
GLESVersion=-DSDL_VIDEO_OPENGL_ES_VERSION=3
|
|
else
|
|
NeedGles3=false
|
|
$SEDI "/==GLES3==/ d" project/AndroidManifest.xml
|
|
fi
|
|
|
|
|
|
echo Patching project/src/Globals.java
|
|
$SEDI "s/public static String ApplicationName = .*;/public static String ApplicationName = \"$AppShortName\";/" project/src/Globals.java
|
|
|
|
$SEDI "s/public static final boolean UsingSDL2 = .*;/public static final boolean UsingSDL2 = $UsingSdl2;/" project/src/Globals.java
|
|
|
|
# Work around "Argument list too long" problem when compiling VICE
|
|
#$SEDI "s@public static String DataDownloadUrl = .*@public static String DataDownloadUrl = \"$AppDataDownloadUrl1\";@" project/src/Globals.java
|
|
$SEDI "s@public static String\[\] DataDownloadUrl = .*@public static String[] DataDownloadUrl = { ### };@" project/src/Globals.java
|
|
echo "$AppDataDownloadUrl1" | tr '^' '\n' | while read URL; do $SEDI "s@###@\"$URL\", ###@" project/src/Globals.java ; done
|
|
$SEDI "s@###@@" project/src/Globals.java
|
|
|
|
$SEDI "s/public static boolean SwVideoMode = .*;/public static boolean SwVideoMode = $SwVideoMode;/" project/src/Globals.java
|
|
$SEDI "s/public static int VideoDepthBpp = .*;/public static int VideoDepthBpp = $VideoDepthBpp;/" project/src/Globals.java
|
|
$SEDI "s/public static boolean NeedDepthBuffer = .*;/public static boolean NeedDepthBuffer = $NeedDepthBuffer;/" project/src/Globals.java
|
|
$SEDI "s/public static boolean NeedStencilBuffer = .*;/public static boolean NeedStencilBuffer = $NeedStencilBuffer;/" project/src/Globals.java
|
|
$SEDI "s/public static boolean NeedGles2 = .*;/public static boolean NeedGles2 = $NeedGles2;/" project/src/Globals.java
|
|
$SEDI "s/public static boolean NeedGles3 = .*;/public static boolean NeedGles3 = $NeedGles3;/" project/src/Globals.java
|
|
$SEDI "s/public static boolean CompatibilityHacksVideo = .*;/public static boolean CompatibilityHacksVideo = $CompatibilityHacksForceScreenUpdate;/" project/src/Globals.java
|
|
$SEDI "s/public static boolean CompatibilityHacksStaticInit = .*;/public static boolean CompatibilityHacksStaticInit = $CompatibilityHacksStaticInit;/" project/src/Globals.java
|
|
$SEDI "s/public static boolean CompatibilityHacksTextInputEmulatesHwKeyboard = .*;/public static boolean CompatibilityHacksTextInputEmulatesHwKeyboard = $CompatibilityHacksTextInputEmulatesHwKeyboard;/" project/src/Globals.java
|
|
$SEDI "s/public static int TextInputKeyboard = .*;/public static int TextInputKeyboard = $TextInputKeyboard;/" project/src/Globals.java
|
|
$SEDI "s/public static boolean CompatibilityHacksForceScreenUpdateMouseClick = .*;/public static boolean CompatibilityHacksForceScreenUpdateMouseClick = $CompatibilityHacksForceScreenUpdateMouseClick;/" project/src/Globals.java
|
|
$SEDI "s/public static boolean HorizontalOrientation = .*;/public static boolean HorizontalOrientation = $HorizontalOrientation;/" project/src/Globals.java
|
|
$SEDI "s^public static boolean KeepAspectRatioDefaultSetting = .*^public static boolean KeepAspectRatioDefaultSetting = $SdlVideoResizeKeepAspect;^" project/src/Globals.java
|
|
$SEDI "s/public static boolean InhibitSuspend = .*;/public static boolean InhibitSuspend = $InhibitSuspend;/" project/src/Globals.java
|
|
$SEDI "s/public static boolean CreateService = .*;/public static boolean CreateService = $CreateService;/" project/src/Globals.java
|
|
$SEDI "s/public static boolean AppUsesMouse = .*;/public static boolean AppUsesMouse = $AppUsesMouse;/" project/src/Globals.java
|
|
$SEDI "s/public static boolean AppNeedsTwoButtonMouse = .*;/public static boolean AppNeedsTwoButtonMouse = $AppNeedsTwoButtonMouse;/" project/src/Globals.java
|
|
$SEDI "s/public static boolean RightMouseButtonLongPress = .*;/public static boolean RightMouseButtonLongPress = $RightMouseButtonLongPress;/" project/src/Globals.java
|
|
$SEDI "s/public static boolean ForceRelativeMouseMode = .*;/public static boolean ForceRelativeMouseMode = $ForceRelativeMouseMode;/" project/src/Globals.java
|
|
$SEDI "s/public static boolean ShowMouseCursor = .*;/public static boolean ShowMouseCursor = $ShowMouseCursor;/" project/src/Globals.java
|
|
$SEDI "s/public static boolean ScreenFollowsMouse = .*;/public static boolean ScreenFollowsMouse = $ScreenFollowsMouse;/" project/src/Globals.java
|
|
$SEDI "s/public static boolean GenerateSubframeTouchEvents = .*;/public static boolean GenerateSubframeTouchEvents = $GenerateSubframeTouchEvents;/" project/src/Globals.java
|
|
$SEDI "s/public static boolean AppNeedsArrowKeys = .*;/public static boolean AppNeedsArrowKeys = $AppNeedsArrowKeys;/" project/src/Globals.java
|
|
$SEDI "s/public static boolean FloatingScreenJoystick = .*;/public static boolean FloatingScreenJoystick = $FloatingScreenJoystick;/" project/src/Globals.java
|
|
$SEDI "s/public static boolean AppNeedsTextInput = .*;/public static boolean AppNeedsTextInput = $AppNeedsTextInput;/" project/src/Globals.java
|
|
$SEDI "s/public static boolean AppUsesJoystick = .*;/public static boolean AppUsesJoystick = $AppUsesJoystick;/" project/src/Globals.java
|
|
$SEDI "s/public static boolean AppUsesSecondJoystick = .*;/public static boolean AppUsesSecondJoystick = $AppUsesSecondJoystick;/" project/src/Globals.java
|
|
$SEDI "s/public static boolean AppUsesThirdJoystick = .*;/public static boolean AppUsesThirdJoystick = $AppUsesThirdJoystick;/" project/src/Globals.java
|
|
$SEDI "s/public static boolean AppUsesAccelerometer = .*;/public static boolean AppUsesAccelerometer = $AppUsesAccelerometer;/" project/src/Globals.java
|
|
$SEDI "s/public static boolean AppUsesGyroscope = .*;/public static boolean AppUsesGyroscope = $AppUsesGyroscope;/" project/src/Globals.java
|
|
$SEDI "s/public static boolean AppUsesOrientationSensor = .*;/public static boolean AppUsesOrientationSensor = $AppUsesOrientationSensor;/" project/src/Globals.java
|
|
$SEDI "s/public static boolean MoveMouseWithGyroscope = .*;/public static boolean MoveMouseWithGyroscope = $MoveMouseWithGyroscope;/" project/src/Globals.java
|
|
$SEDI "s/public static boolean AppUsesMultitouch = .*;/public static boolean AppUsesMultitouch = $AppUsesMultitouch;/" project/src/Globals.java
|
|
$SEDI "s/public static boolean NonBlockingSwapBuffers = .*;/public static boolean NonBlockingSwapBuffers = $NonBlockingSwapBuffers;/" project/src/Globals.java
|
|
$SEDI "s/public static boolean ResetSdlConfigForThisVersion = .*;/public static boolean ResetSdlConfigForThisVersion = $ResetSdlConfigForThisVersion;/" project/src/Globals.java
|
|
$SEDI "s/public static boolean ImmersiveMode = .*;/public static boolean ImmersiveMode = $ImmersiveMode;/" project/src/Globals.java
|
|
$SEDI "s/public static boolean DrawInDisplayCutout = .*;/public static boolean DrawInDisplayCutout = $DrawInDisplayCutout;/" project/src/Globals.java
|
|
$SEDI "s/public static boolean HideSystemMousePointer = .*;/public static boolean HideSystemMousePointer = $HideSystemMousePointer;/" project/src/Globals.java
|
|
$SEDI "s|public static String DeleteFilesOnUpgrade = .*;|public static String DeleteFilesOnUpgrade = \"$DeleteFilesOnUpgrade\";|" project/src/Globals.java
|
|
$SEDI "s/public static int AppTouchscreenKeyboardKeysAmount = .*;/public static int AppTouchscreenKeyboardKeysAmount = $AppTouchscreenKeyboardKeysAmount;/" project/src/Globals.java
|
|
$SEDI "s@public static String\\[\\] AppTouchscreenKeyboardKeysNames = .*;@public static String[] AppTouchscreenKeyboardKeysNames = \"$RedefinedKeysScreenKbNames\".split(\" \");@" project/src/Globals.java
|
|
$SEDI "s/public static int TouchscreenKeyboardTheme = .*;/public static int TouchscreenKeyboardTheme = $TouchscreenKeysTheme;/" project/src/Globals.java
|
|
$SEDI "s/public static int StartupMenuButtonTimeout = .*;/public static int StartupMenuButtonTimeout = $StartupMenuButtonTimeout;/" project/src/Globals.java
|
|
$SEDI "s/public static int AppMinimumRAM = .*;/public static int AppMinimumRAM = $AppMinimumRAM;/" project/src/Globals.java
|
|
$SEDI "s/public static SettingsMenu.Menu HiddenMenuOptions .*;/public static SettingsMenu.Menu HiddenMenuOptions [] = { $HiddenMenuOptions1 };/" project/src/Globals.java
|
|
[ -n "$FirstStartMenuOptions1" ] && $SEDI "s@public static SettingsMenu.Menu FirstStartMenuOptions .*;@public static SettingsMenu.Menu FirstStartMenuOptions [] = { $FirstStartMenuOptions1 };@" project/src/Globals.java
|
|
$SEDI "s%public static String ReadmeText = .*%public static String ReadmeText = \"$ReadmeText\";%" project/src/Globals.java
|
|
$SEDI "s%public static String CommandLine = .*%public static String CommandLine = \"$AppCmdline\";%" project/src/Globals.java
|
|
$SEDI "s%public static String AdmobPublisherId = .*%public static String AdmobPublisherId = \"$AdmobPublisherId\";%" project/src/Globals.java
|
|
$SEDI "s/public static String AdmobTestDeviceId = .*/public static String AdmobTestDeviceId = \"$AdmobTestDeviceId\";/" project/src/Globals.java
|
|
$SEDI "s/public static String AdmobBannerSize = .*/public static String AdmobBannerSize = \"$AdmobBannerSize\";/" project/src/Globals.java
|
|
$SEDI "s%public static String GooglePlayGameServicesId = .*%public static String GooglePlayGameServicesId = \"$GooglePlayGameServicesId\";%" project/src/Globals.java
|
|
$SEDI "s/public static String AppLibraries.*/public static String AppLibraries[] = { $LibrariesToLoad };/" project/src/Globals.java
|
|
$SEDI "s/public static String AppMainLibraries.*/public static String AppMainLibraries[] = { $MainLibrariesToLoad };/" project/src/Globals.java
|
|
|
|
if $UsingSdl2; then
|
|
# Delete options that reference classes from SDL 1.2
|
|
$SEDI "s/public static SettingsMenu.Menu HiddenMenuOptions .*;//" project/src/Globals.java
|
|
$SEDI "s/public static SettingsMenu.Menu FirstStartMenuOptions .*;//" project/src/Globals.java
|
|
fi
|
|
|
|
echo Patching project/jni/Settings.mk
|
|
echo '# DO NOT EDIT THIS FILE - it is automatically generated, edit file SettingsTemplate.mk' > project/jni/Settings.mk
|
|
cat project/jni/SettingsTemplate.mk | \
|
|
sed "s/APP_MODULES := .*/APP_MODULES := `$UsingSdl2 && echo SDL2 || echo sdl-1.2` sdl_native_helpers jpeg png ogg flac vorbis freetype $CompiledLibraries/" | \
|
|
sed "s/APP_ABI := .*/APP_ABI := $MultiABI/" | \
|
|
sed "s/SDL_JAVA_PACKAGE_PATH := .*/SDL_JAVA_PACKAGE_PATH := $AppFullNameUnderscored/" | \
|
|
sed "s^SDL_CURDIR_PATH := .*^SDL_CURDIR_PATH := $DataPath^" | \
|
|
sed "s^SDL_VIDEO_RENDER_RESIZE := .*^SDL_VIDEO_RENDER_RESIZE := $SdlVideoResize^" | \
|
|
sed "s^COMPILED_LIBRARIES := .*^COMPILED_LIBRARIES := $CompiledLibraries^" | \
|
|
sed "s^APPLICATION_ADDITIONAL_CFLAGS :=.*^APPLICATION_ADDITIONAL_CFLAGS := $AppCflags^" | \
|
|
sed "s^APPLICATION_ADDITIONAL_CPPFLAGS :=.*^APPLICATION_ADDITIONAL_CPPFLAGS := $AppCppflags^" | \
|
|
sed "s^APPLICATION_ADDITIONAL_LDFLAGS :=.*^APPLICATION_ADDITIONAL_LDFLAGS := $AppLdflags^" | \
|
|
sed "s^APPLICATION_GLES_LIBRARY :=.*^APPLICATION_GLES_LIBRARY := $GLESLib^" | \
|
|
sed "s^APPLICATION_OVERLAPS_SYSTEM_HEADERS :=.*^APPLICATION_OVERLAPS_SYSTEM_HEADERS := $AppOverlapsSystemHeaders^" | \
|
|
sed "s^USE_GL4ES :=.*^USE_GL4ES := $UseGl4es^" | \
|
|
sed "s^SDL_ADDITIONAL_CFLAGS :=.*^SDL_ADDITIONAL_CFLAGS := \
|
|
$RedefinedKeycodes \
|
|
$RedefinedSDLScreenGestures \
|
|
$RedefinedKeycodesScreenKb \
|
|
$RedefinedKeycodesGamepad \
|
|
$CompatibilityHacksPreventAudioChopping \
|
|
$CompatibilityHacksAppIgnoresAudioBufferSize \
|
|
$CompatibilityHacksSlowCompatibleEventQueue \
|
|
$CompatibilityHacksTouchscreenKeyboardSaveRestoreOpenGLState \
|
|
$CompatibilityHacksProperUsageOfSDL_UpdateRects \
|
|
$UseGl4esCFlags \
|
|
$GLESVersion^" | \
|
|
sed "s^APPLICATION_SUBDIRS_BUILD :=.*^APPLICATION_SUBDIRS_BUILD := $AppSubdirsBuild^" | \
|
|
sed "s^APPLICATION_BUILD_EXCLUDE :=.*^APPLICATION_BUILD_EXCLUDE := $AppBuildExclude^" | \
|
|
sed "s^APPLICATION_CUSTOM_BUILD_SCRIPT :=.*^APPLICATION_CUSTOM_BUILD_SCRIPT := $CustomBuildScript^" | \
|
|
sed "s^SDL_VERSION :=.*^SDL_VERSION := $LibSdlVersion^" | \
|
|
sed "s^NDK_TOOLCHAIN_VERSION :=.*^NDK_TOOLCHAIN_VERSION := $NDK_TOOLCHAIN_VERSION^" | \
|
|
sed "s^APP_PLATFORM :=.*^APP_PLATFORM := $APP_PLATFORM^" >> \
|
|
project/jni/Settings.mk
|
|
|
|
echo Patching strings.xml
|
|
rm -rf project/res/values*/strings.xml
|
|
cd $JAVA_SRC_PATH/translations
|
|
for F in */strings.xml; do
|
|
mkdir -p ../../res/`dirname $F`
|
|
cat $F | \
|
|
sed "s^[<]string name=\"app_name\"[>].*^<string name=\"app_name\">$AppName</string>^" > \
|
|
../../res/$F
|
|
done
|
|
cd ../../..
|
|
|
|
SDK_DIR=`grep '^sdk.dir' project/local.properties | sed 's/.*=//'`
|
|
[ -z "$SDK_DIR" ] && SDK_DIR="$ANDROID_HOME"
|
|
[ -z "$SDK_DIR" ] && SDK_DIR=`which android | sed 's@/tools/android$@@'`
|
|
mkdir -p project/libs
|
|
echo "sdk.dir=$SDK_DIR" > project/local.properties
|
|
echo 'proguard.config=proguard.cfg;proguard-local.cfg' >> project/local.properties
|
|
|
|
if [ "$GooglePlayGameServicesId" = "n" -o -z "$GooglePlayGameServicesId" ] ; then
|
|
$SEDI "/==GOOGLEPLAYGAMESERVICES==/ d" project/AndroidManifest.xml
|
|
$SEDI "/==GOOGLEPLAYGAMESERVICES==/ d" project/app/build.gradle
|
|
GooglePlayGameServicesId=""
|
|
else
|
|
for F in $JAVA_SRC_PATH/googleplaygameservices/*.java; do
|
|
OUT=`echo $F | sed 's@.*/@@'` # basename tool is not available everywhere
|
|
echo Patching $F
|
|
echo '// DO NOT EDIT THIS FILE - it is automatically generated, edit file under $JAVA_SRC_PATH dir' > project/src/$OUT
|
|
cat $F | sed "s/^package .*;/package $AppFullName;/" >> project/src/$OUT
|
|
done
|
|
|
|
$SEDI "s/==GOOGLEPLAYGAMESERVICES_APP_ID==/$GooglePlayGameServicesId/g" project/res/values/strings.xml
|
|
fi
|
|
|
|
if [ -e "project/jni/application/src/AndroidData/assetpack" ] ; then
|
|
true # Do nothing...
|
|
else
|
|
$SEDI "/==ASSETPACK==/ d" project/app/build.gradle
|
|
fi
|
|
|
|
if [ -e project/jni/application/src/project.diff ]; then patch -p1 --dry-run -f -R < project/jni/application/src/project.diff > /dev/null 2>&1 || patch -p1 --no-backup-if-mismatch < project/jni/application/src/project.diff || exit 1 ; fi
|
|
if [ -e project/jni/application/src/project.patch ]; then patch -p1 --dry-run -f -R < project/jni/application/src/project.patch > /dev/null 2>&1 || patch -p1 --no-backup-if-mismatch < project/jni/application/src/project.patch || exit 1 ; fi
|
|
|
|
rm -f project/lib
|
|
ln -s -f libs project/lib
|
|
|
|
echo Cleaning up dependencies
|
|
|
|
rm -rf project/libs/*/* project/gen
|
|
rm -rf project/obj/local/*/objs*/sdl_main/* project/$OUT/local/*/libsdl_main.so
|
|
rm -rf project/obj/local/*/libsdl-*.so
|
|
rm -rf project/obj/local/*/libsdl_*.so
|
|
rm -rf project/obj/local/*/objs*/sdl-*/src/*/android
|
|
rm -rf project/obj/local/*/objs*/sdl-*/src/video/SDL_video.o
|
|
rm -rf project/obj/local/*/objs*/sdl-*/SDL_renderer_gles.o
|
|
rm -rf project/obj/local/*/objs*/sdl_*
|
|
rm -rf project/obj/local/*/objs*/lzma/src/XZInputStream.o
|
|
rm -rf project/obj/local/*/objs*/liblzma.so
|
|
rm -rf project/obj/local/*/objs*/openal/src/Alc/android.o
|
|
rm -rf project/obj/local/*/objs*/libopenal.so
|
|
# No need to recompile SDL2 libraries, it does not contain package name
|
|
|
|
rm -rf project/jni/application/src/AndroidData/lib
|
|
|
|
rm -rf project/bin/classes
|
|
rm -rf project/bin/res
|
|
rm -rf project/app/build
|
|
|
|
# Generate OUYA icon, for that one user who still got an OUYA in his living room and won't throw it away just because someone else decides that it's dead
|
|
rm -rf project/res/drawable-xhdpi/ouya_icon.png
|
|
if which convert > /dev/null; then
|
|
mkdir -p project/res/drawable-xhdpi
|
|
convert project/res/drawable/icon.png -resize '732x412' -background none -gravity center -extent '732x412' project/res/drawable-xhdpi/ouya_icon.png
|
|
else
|
|
echo "Install ImageMagick to auto-resize Ouya icon from icon.png"
|
|
fi
|
|
|
|
./copyAssets.sh || exit 1
|
|
|
|
rm -rf project/jni/android-support
|
|
|
|
rm -rf project/res/drawable/banner.png
|
|
if [ -e project/jni/application/src/banner.png ]; then
|
|
ln -s ../../jni/application/src/banner.png project/res/drawable/banner.png
|
|
else
|
|
ln -s ../../themes/tv-banner-placeholder.png project/res/drawable/banner.png
|
|
fi
|
|
|
|
if uname -s | grep -i "darwin" > /dev/null ; then
|
|
find project/src -name "*.killme.tmp" -delete
|
|
fi
|
|
|
|
echo Compiling prebuilt libraries
|
|
|
|
if echo "$CompiledLibraries" | grep -E 'crypto|ssl' > /dev/null; then
|
|
make -C project/jni -f Makefile.prebuilt openssl ARCH_LIST="$MultiABI"
|
|
fi
|
|
|
|
if echo "$CompiledLibraries" | grep -E 'iconv|charset|icu' > /dev/null; then
|
|
echo "#=Compiling prebuilt icu"
|
|
make -C project/jni -f Makefile.prebuilt icu ARCH_LIST="$MultiABI"
|
|
fi
|
|
|
|
if echo "$CompiledLibraries" | grep 'boost_' > /dev/null; then
|
|
make -C project/jni -f Makefile.prebuilt boost ARCH_LIST="$MultiABI"
|
|
fi
|
|
|
|
echo Done
|