SDL: put debug info from shared libraries into app bundle, updated build scripts to remove hacks and better integrate with Gradle

This commit is contained in:
pelya
2021-01-08 02:29:59 +02:00
parent 2b45093c2c
commit 636559b5af
10 changed files with 190 additions and 207 deletions

124
build.sh
View File

@@ -1,34 +1,33 @@
#!/bin/sh
#set -eu # Bashism, does not work with default shell on Ubuntu 12.04
install_apk=false
run_apk=false
sign_apk=false
sign_bundle=false
build_release=true
quick_rebuild=false
QUICK_REBUILD_ARGS=
if [ "$#" -gt 0 -a "$1" = "-s" ]; then
shift
sign_apk=true
fi
if [ "$#" -gt 0 -a "$1" = "-i" ]; then
shift
install_apk=true
fi
if [ "$#" -gt 0 -a "$1" = "-r" ]; then
shift
install_apk=true
run_apk=true
fi
if [ "$#" -gt 0 -a "$1" = "-q" ]; then
shift
quick_rebuild=true
QUICK_REBUILD_ARGS=APP_ABI=armeabi-v7a
fi
while getopts "sirqbh" OPT
do
case $OPT in
s) sign_apk=true;;
i) install_apk=true;;
r) install_apk=true ; run_apk=true;;
q) echo "Quick rebuild does not work anymore with Gradle!";;
b) sign_bundle=true;;
h)
echo "Usage: $0 [-s] [-i] [-r] [-q] [debug|release] [app-name]"
echo " -s: sign .apk file after building"
echo " -b: sign .aab app bundle file after building"
echo " -i: install APK file to device after building"
echo " -r: run APK file on device after building"
echo " debug: build debug package"
echo " release: build release package (default)"
echo " app-name: directory under project/jni/application to be compiled"
exit 0
;;
esac
done
shift `expr $OPTIND - 1`
if [ "$#" -gt 0 -a "$1" = "release" ]; then
shift
@@ -60,29 +59,13 @@ if [ "$#" -gt 0 -a "$1" '!=' "-h" ]; then
shift
fi
if [ "$#" -gt 0 -a "$1" = "-h" ]; then
echo "Usage: $0 [-s] [-i] [-r] [-q] [debug|release] [app-name]"
echo " -s: sign APK file after building"
echo " -i: install APK file to device after building"
echo " -r: run APK file on device after building"
echo " -q: quick-rebuild C code, without rebuilding Java files"
echo " debug: build debug package"
echo " release: build release package (default)"
echo " app-name: directory under project/jni/application to be compiled"
exit 0
fi
NDK_TOOLCHAIN_VERSION=$GCCVER
[ -z "$NDK_TOOLCHAIN_VERSION" ] && NDK_TOOLCHAIN_VERSION=4.9
# Set here your own NDK path if needed
# export PATH=$PATH:~/src/endless_space/android-ndk-r7
NDKBUILDPATH=$PATH
export `grep "AppFullName=" AndroidAppSettings.cfg`
if [ -e project/local.properties ] && \
( grep "package $AppFullName;" project/src/Globals.java > /dev/null 2>&1 && \
grep "package `grep AppFullName= AndroidAppSettings.cfg | sed 's/.*=//'`;" project/src/Globals.java > /dev/null 2>&1 && \
[ "`readlink AndroidAppSettings.cfg`" -ot "project/src/Globals.java" ] && \
[ -z "`find project/java/* project/AndroidManifestTemplate.xml -cnewer project/src/Globals.java`" ] ) ; then true ; else
[ -z "`find project/java/* project/AndroidManifestTemplate.xml -cnewer project/src/Globals.java`" ]
then
true
else
./changeAppSettings.sh -a || exit 1
sleep 1
touch project/src/Globals.java
@@ -102,56 +85,26 @@ if [ -z "$NCPU" ]; then
MYARCH=windows-x86_64
fi
fi
export BUILD_NUM_CPUS=$NCPU
# Fix Gradle compilation error
[ -z "$ANDROID_NDK_HOME" ] && export ANDROID_NDK_HOME="`which ndk-build | sed 's@/ndk-build@@'`"
$quick_rebuild || rm -r -f project/bin/* # New Android SDK introduced some lame-ass optimizations to the build system which we should take care about
[ -x project/jni/application/src/AndroidPreBuild.sh ] && {
cd project/jni/application/src
./AndroidPreBuild.sh || { echo "AndroidPreBuild.sh returned with error" ; exit 1 ; }
cd ../../../..
}
strip_libs() {
grep "CustomBuildScript=y" ../AndroidAppSettings.cfg > /dev/null && \
grep "MultiABI=" ../AndroidAppSettings.cfg | grep "y\\|all\\|armeabi-v7a" > /dev/null && \
echo Stripping libapplication-armeabi-v7a.so by hand && \
rm obj/local/armeabi-v7a/libapplication.so && \
cp jni/application/src/libapplication-armeabi-v7a.so obj/local/armeabi-v7a/libapplication.so && \
cp jni/application/src/libapplication-armeabi-v7a.so libs/armeabi-v7a/libapplication.so && \
`which ndk-build | sed 's@/ndk-build@@'`/toolchains/llvm/prebuilt/$MYARCH/bin/llvm-strip --strip-unneeded libs/armeabi-v7a/libapplication.so
grep "CustomBuildScript=y" ../AndroidAppSettings.cfg > /dev/null && \
grep "MultiABI=" ../AndroidAppSettings.cfg | grep "all\\|x86" > /dev/null && \
echo Stripping libapplication-x86.so by hand && \
rm obj/local/x86/libapplication.so && \
cp jni/application/src/libapplication-x86.so obj/local/x86/libapplication.so && \
cp jni/application/src/libapplication-x86.so libs/x86/libapplication.so && \
`which ndk-build | sed 's@/ndk-build@@'`/toolchains/llvm/prebuilt/$MYARCH/bin/llvm-strip --strip-unneeded libs/x86/libapplication.so
grep "CustomBuildScript=y" ../AndroidAppSettings.cfg > /dev/null && \
grep "MultiABI=" ../AndroidAppSettings.cfg | grep "all\\|x86_64" > /dev/null && \
echo Stripping libapplication-x86_64.so by hand && \
rm obj/local/x86_64/libapplication.so && \
cp jni/application/src/libapplication-x86_64.so obj/local/x86_64/libapplication.so && \
cp jni/application/src/libapplication-x86_64.so libs/x86_64/libapplication.so && \
`which ndk-build | sed 's@/ndk-build@@'`/toolchains/llvm/prebuilt/$MYARCH/bin/llvm-strip --strip-unneeded libs/x86_64/libapplication.so
grep "CustomBuildScript=y" ../AndroidAppSettings.cfg > /dev/null && \
grep "MultiABI=" ../AndroidAppSettings.cfg | grep "all\\|arm64-v8a" > /dev/null && \
echo Stripping libapplication-arm64-v8a.so by hand && \
rm obj/local/arm64-v8a/libapplication.so && \
cp jni/application/src/libapplication-arm64-v8a.so obj/local/arm64-v8a/libapplication.so && \
cp jni/application/src/libapplication-arm64-v8a.so libs/arm64-v8a/libapplication.so && \
`which ndk-build | sed 's@/ndk-build@@'`/toolchains/llvm/prebuilt/$MYARCH/bin/llvm-strip --strip-unneeded libs/arm64-v8a/libapplication.so
return 0
[ -n "`grep CustomBuildScript=y AndroidAppSettings.cfg`" ] && {
ndk-build -C project -j$NCPU V=1 CUSTOM_BUILD_SCRIPT_FIRST_PASS=1 NDK_APP_STRIP_MODE=none || exit 1
make -C project/jni/application -f CustomBuildScript.mk || exit 1
}
# Fix Gradle compilation error
[ -z "$ANDROID_NDK_HOME" ] && export ANDROID_NDK_HOME="`which ndk-build | sed 's@/ndk-build@@'`"
cd project && env PATH=$NDKBUILDPATH BUILD_NUM_CPUS=$NCPU ndk-build -j$NCPU V=1 $QUICK_REBUILD_ARGS && \
strip_libs && \
cd .. && ./copyAssets.sh && cd project && \
ndk-build -C project -j$NCPU V=1 NDK_APP_STRIP_MODE=none && \
./copyAssets.sh && cd project && \
{ if $build_release ; then \
$quick_rebuild && { \
zip -u -r app/build/outputs/apk/release/app-release-unsigned.apk lib assets || exit 1 ; \
} || ./gradlew assembleRelease || exit 1 ; \
./gradlew assembleRelease || exit 1 ; \
[ '!' -x jni/application/src/AndroidPostBuild.sh ] || {
cd jni/application/src ; \
./AndroidPostBuild.sh `pwd`/../../../app/build/outputs/apk/release/app-release-unsigned.apk || exit 1 ; \
@@ -175,6 +128,7 @@ cd project && env PATH=$NDKBUILDPATH BUILD_NUM_CPUS=$NCPU ndk-build -j$NCPU V=1
apksigner sign --ks ~/.android/debug.keystore --ks-key-alias androiddebugkey --ks-pass pass:android app/build/outputs/apk/release/app-release.apk || exit 1 ; \
fi ; } && \
{ if $sign_apk; then cd .. && ./sign.sh && cd project ; else true ; fi ; } && \
{ if $sign_bundle; then cd .. && ./signBundle.sh && cd project ; else true ; fi ; } && \
{ $install_apk && [ -n "`adb devices | tail -n +2`" ] && \
{ if $sign_apk; then \
APPNAME=`grep AppName ../AndroidAppSettings.cfg | sed 's/.*=//' | tr -d '"' | tr " '/" '---'` ; \

View File

@@ -999,7 +999,7 @@ $SEDI "s/public static String AppMainLibraries.*/public static String AppMainLib
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 := sdl-$LibSdlVersion sdl_main sdl_native_helpers jpeg png ogg flac vorbis freetype $CompiledLibraries application/" | \
sed "s/APP_MODULES := .*/APP_MODULES := sdl-$LibSdlVersion 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^" | \

View File

@@ -5,6 +5,7 @@ plugins {
android {
compileSdkVersion 30
buildToolsVersion "30.0.3"
ndkVersion "22.0.7026061"
defaultConfig {
applicationId "net.olofson.ballfield"
@@ -16,6 +17,9 @@ android {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), '../proguard-local.cfg', '../proguard.cfg'
ndk {
debugSymbolLevel 'FULL'
}
}
}
compileOptions {

View File

@@ -11,35 +11,6 @@ ICU := $(foreach ARCH, $(ARCHES32) $(ARCHES64), $(foreach NAME, $(ICU_LIBS), icu
OPENSSL := $(foreach ARCH, $(ARCHES32) $(ARCHES64), openssl/lib-$(ARCH)/libcrypto.so.sdl.1.so openssl/lib-$(ARCH)/libssl.so.sdl.1.so)
LIBS := $(ICONV) $(ICU) $(OPENSSL)
.PHONY: all boost openssl icu
all: $(LIBS)
openssl: $(OPENSSL)
icu: $(ICONV) $(ICU)
#.NOTPARALLEL: $(LIBS) $(BOOST)
$(ICONV) $(ICU): iconv/src/build.sh
cd iconv/src && \
./build.sh && \
for ARCH in $(ARCHES32) $(ARCHES64); do \
mkdir -p ../lib/$$ARCH ../include ; \
cp -f $$ARCH/libiconv.so $$ARCH/libcharset.so ../lib/$$ARCH/ ; \
cp -f $$ARCH/include/*.h ../include/ ; \
mkdir -p ../../icuuc/lib/$$ARCH ../../icuuc/include/unicode ../../icuuc/include/layout ; \
cp -f $$ARCH/libicu*.a $$ARCH/libharfbuzz.a ../../icuuc/lib/$$ARCH/ ; \
cp -f $$ARCH/include/unicode/*.h ../../icuuc/include/unicode/ ; \
cp -f $$ARCH/include/layout/*.h ../../icuuc/include/layout/ ; \
cp -f $$ARCH/include/icu-le-hb/layout/*.h ../../icuuc/include/layout/ ; \
done && \
git clean -f -d -x
$(OPENSSL): openssl/compile.sh
cd openssl && ./compile.sh
BOOST_LIBS := \
atomic \
chrono \
@@ -78,9 +49,36 @@ BOOST_LIBS := \
wave \
wserialization \
BOOST := $(foreach ARCH, $(ARCHES32) $(ARCHES64), $(foreach NAME, $(BOOST_LIBS), boost/lib/$(ARCH)/libboost_$(NAME).a))
.PHONY: all boost icu openssl
all: $(ICONV) $(ICU) $(OPENSSL) $(BOOST)
boost: $(BOOST)
icu: $(ICONV) $(ICU)
openssl: $(OPENSSL)
$(ICONV) $(ICU): iconv/src/build.sh
cd iconv/src && \
./build.sh && \
for ARCH in $(ARCHES32) $(ARCHES64); do \
mkdir -p ../lib/$$ARCH ../include ; \
cp -f $$ARCH/libiconv.so $$ARCH/libcharset.so ../lib/$$ARCH/ ; \
cp -f $$ARCH/include/*.h ../include/ ; \
mkdir -p ../../icuuc/lib/$$ARCH ../../icuuc/include/unicode ../../icuuc/include/layout ; \
cp -f $$ARCH/libicu*.a $$ARCH/libharfbuzz.a ../../icuuc/lib/$$ARCH/ ; \
cp -f $$ARCH/include/unicode/*.h ../../icuuc/include/unicode/ ; \
cp -f $$ARCH/include/layout/*.h ../../icuuc/include/layout/ ; \
cp -f $$ARCH/include/icu-le-hb/layout/*.h ../../icuuc/include/layout/ ; \
done && \
git clean -f -d -x
$(OPENSSL): openssl/compile.sh
cd openssl && ./compile.sh
$(BOOST): boost/src/build-android.sh
rm -rf boost/include boost/lib ; \
cd boost/src && \
@@ -93,8 +91,26 @@ $(BOOST): boost/src/build-android.sh
git clean -f -d -x ; \
$(foreach NAME, $(BOOST_LIBS), ln -sf boost ../../boost_$(NAME) ;)
boost: $(BOOST)
iconv/src/build.sh boost/src/build-android.sh:
git submodule update --init --recursive
# Dependencies for CustomBuildScript.mk
define COPY_TO_OBJ =
ARCH := $(1)
SRCDIR := $(2)
FILENAME := $(3)
../obj/local/$$(ARCH)/$$(FILENAME) $$(abspath ../obj/local/$$(ARCH)/$$(FILENAME)): $$(SRCDIR)/$$(FILENAME)
cp -f $$< $$@
#$$(warning === ARCH = $(1) SRCDIR = $(2) FILENAME = $(3) ../obj/local/$$(ARCH)/$$(FILENAME) $$(abspath ../obj/local/$$(ARCH)/$$(FILENAME)): $$(SRCDIR)/$$(FILENAME))
endef # COPY_TO_OBJ
$(foreach ARCH, $(ARCHES32) $(ARCHES64), $(foreach NAME, libiconv.so libcharset.so, $(eval $(call COPY_TO_OBJ,$(ARCH),iconv/lib/$(ARCH),$(NAME)))))
$(foreach ARCH, $(ARCHES32) $(ARCHES64), $(foreach NAME, $(ICU_LIBS), $(eval $(call COPY_TO_OBJ,$(ARCH),icuuc/lib/$(ARCH),lib$(NAME).a))))
$(foreach ARCH, $(ARCHES32) $(ARCHES64), $(foreach NAME, libcrypto.so.sdl.1.so libssl.so.sdl.1.so, $(eval $(call COPY_TO_OBJ,$(ARCH),openssl/lib-$(ARCH),$(NAME)))))

View File

@@ -9,10 +9,14 @@ APP_AVAILABLE_STATIC_LIBS := jpeg png freetype fontconfig xerces ogg vorbis flac
gl4es nanogl gd guichan
# 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
APP_MODULES := application sdl-1.2 sdl_main sdl_native_helpers jpeg png ogg flac vorbis freetype tremor ogg
APP_MODULES := application sdl-1.2 sdl_native_helpers jpeg png ogg flac vorbis freetype tremor ogg
ifeq ($(CUSTOM_BUILD_SCRIPT_FIRST_PASS),)
APP_MODULES += application sdl_main
endif
ifeq ($(APP_ABI),)
APP_ABI := armeabi-v7a
APP_ABI := arm64-v8a armeabi-v7a x86 x86_64
endif
# The namespace in Java file, with dots replaced with underscores

View File

@@ -3,8 +3,21 @@ LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := application
APPDIR := $(shell readlink $(LOCAL_PATH)/src)
LOCAL_SHARED_LIBRARIES := sdl-$(SDL_VERSION) $(filter-out $(APP_AVAILABLE_STATIC_LIBS), $(COMPILED_LIBRARIES))
LOCAL_STATIC_LIBRARIES := $(filter $(APP_AVAILABLE_STATIC_LIBS), $(COMPILED_LIBRARIES))
LOCAL_LDLIBS := $(APPLICATION_GLES_LIBRARY) -ldl -llog -lz
LOCAL_LDFLAGS := -Lobj/local/$(TARGET_ARCH_ABI)
LOCAL_LDFLAGS += $(APPLICATION_ADDITIONAL_LDFLAGS)
ifeq ($(APPLICATION_CUSTOM_BUILD_SCRIPT),)
APP_SUBDIRS := $(patsubst $(LOCAL_PATH)/%, %, $(shell find $(LOCAL_PATH)/$(APPDIR) -path '*/.svn' -prune -o -type d -print))
ifneq ($(APPLICATION_SUBDIRS_BUILD),)
APPLICATION_SUBDIRS_BUILD_NONRECURSIVE := $(addprefix $(APPDIR)/, $(filter-out %/*, $(APPLICATION_SUBDIRS_BUILD)))
@@ -41,73 +54,13 @@ LOCAL_CPPFLAGS += $(APPLICATION_ADDITIONAL_CPPFLAGS)
# Change C++ file extension as appropriate
LOCAL_CPP_EXTENSION := .cpp .cxx .cc
ifneq ($(APPLICATION_CUSTOM_BUILD_SCRIPT),)
LOCAL_SRC_FILES := dummy.c
endif
LOCAL_SHARED_LIBRARIES := sdl-$(SDL_VERSION) $(filter-out $(APP_AVAILABLE_STATIC_LIBS), $(COMPILED_LIBRARIES))
LOCAL_STATIC_LIBRARIES := $(filter $(APP_AVAILABLE_STATIC_LIBS), $(COMPILED_LIBRARIES))
LOCAL_LDLIBS := $(APPLICATION_GLES_LIBRARY) -ldl -llog -lz
LOCAL_LDFLAGS := -Lobj/local/$(TARGET_ARCH_ABI)
LOCAL_LDFLAGS += $(APPLICATION_ADDITIONAL_LDFLAGS)
LOCAL_CPP_EXTENSION := .cpp .cxx .cc
SDL_APP_LIB_DEPENDS-$(TARGET_ARCH_ABI) := $(LOCAL_PATH)/src/AndroidBuild.sh $(LOCAL_PATH)/src/AndroidAppSettings.cfg
SDL_APP_LIB_DEPENDS-$(TARGET_ARCH_ABI) += $(foreach LIB, $(LOCAL_SHARED_LIBRARIES), obj/local/$(TARGET_ARCH_ABI)/lib$(LIB).so)
SDL_APP_LIB_DEPENDS-$(TARGET_ARCH_ABI) += $(foreach LIB, $(LOCAL_STATIC_LIBRARIES), obj/local/$(TARGET_ARCH_ABI)/lib$(LIB).a)
.PHONY: obj/local/$(TARGET_ARCH_ABI)/libcrypto.so obj/local/$(TARGET_ARCH_ABI)/libssl.so obj/local/$(TARGET_ARCH_ABI)/libcurl.so
obj/local/$(TARGET_ARCH_ABI)/libcrypto.so: obj/local/$(TARGET_ARCH_ABI)/libcrypto.so.sdl.0.so
obj/local/$(TARGET_ARCH_ABI)/libssl.so: obj/local/$(TARGET_ARCH_ABI)/libssl.so.sdl.0.so
obj/local/$(TARGET_ARCH_ABI)/libcurl.so: obj/local/$(TARGET_ARCH_ABI)/libcurl-sdl.so
obj/local/$(TARGET_ARCH_ABI)/libexpat.so: obj/local/$(TARGET_ARCH_ABI)/libexpat-sdl.so
include $(BUILD_SHARED_LIBRARY)
ifneq ($(APPLICATION_CUSTOM_BUILD_SCRIPT),)
else ifeq ($(CUSTOM_BUILD_SCRIPT_FIRST_PASS),) # APPLICATION_CUSTOM_BUILD_SCRIPT and not CUSTOM_BUILD_SCRIPT_FIRST_PASS
# TODO: here we're digging inside NDK internal build system, that's not portable
# NDK r5b provided the $(PREBUILT_SHARED_LIBRARY) target, however it requires .so file to be already present on disk
# Also I cannot just launch AndroidBuild.sh from makefile because other libraries are not rebuilt and linking will fail
.PHONY: OVERRIDE_CUSTOM_LIB
OVERRIDE_CUSTOM_LIB:
# Prevent ./AndroidBuild.sh to be invoked in parallel for different architectures, it may do things like downloading files which work poorly when launched in parallel
# .NOTPARALLEL prevents other sources from building in parallel, so we're using flock shell command here
# There is flock command on Linux, but it fails to lock a file, and mkdir is more portable
PARALLEL_LOCK := until mkdir .lock >/dev/null 2>&1; do sleep 1; done
PARALLEL_UNLOCK := rmdir .lock >/dev/null 2>&1
LOCAL_SRC_FILES := $(APPDIR)/libapplication-$(TARGET_ARCH_ABI).so
LOCAL_MODULE_FILENAME := libapplication
LOCAL_PATH_SDL_APPLICATION := $(LOCAL_PATH)
include $(PREBUILT_SHARED_LIBRARY)
$(shell cd $(LOCAL_PATH_SDL_APPLICATION)/src && $(PARALLEL_UNLOCK))
obj/local/armeabi-v7a/libapplication.so: $(LOCAL_PATH)/src/libapplication-armeabi-v7a.so
$(LOCAL_PATH)/src/libapplication-armeabi-v7a.so: $(SDL_APP_LIB_DEPENDS-armeabi-v7a) OVERRIDE_CUSTOM_LIB
cd $(LOCAL_PATH_SDL_APPLICATION)/src && $(PARALLEL_LOCK) && \
./AndroidBuild.sh armeabi-v7a arm-linux-androideabi && $(PARALLEL_UNLOCK)
obj/local/x86/libapplication.so: $(LOCAL_PATH)/src/libapplication-x86.so
$(LOCAL_PATH)/src/libapplication-x86.so: $(SDL_APP_LIB_DEPENDS-x86) OVERRIDE_CUSTOM_LIB
cd $(LOCAL_PATH_SDL_APPLICATION)/src && $(PARALLEL_LOCK) && \
./AndroidBuild.sh x86 i686-linux-android && $(PARALLEL_UNLOCK)
obj/local/arm64-v8a/libapplication.so: $(LOCAL_PATH)/src/libapplication-arm64-v8a.so
$(LOCAL_PATH)/src/libapplication-arm64-v8a.so: $(SDL_APP_LIB_DEPENDS-arm64-v8a) OVERRIDE_CUSTOM_LIB
cd $(LOCAL_PATH_SDL_APPLICATION)/src && $(PARALLEL_LOCK) && \
./AndroidBuild.sh arm64-v8a aarch64-linux-android && $(PARALLEL_UNLOCK)
obj/local/x86_64/libapplication.so: $(LOCAL_PATH)/src/libapplication-x86_64.so
$(LOCAL_PATH)/src/libapplication-x86_64.so: $(SDL_APP_LIB_DEPENDS-x86_64) OVERRIDE_CUSTOM_LIB
cd $(LOCAL_PATH_SDL_APPLICATION)/src && $(PARALLEL_LOCK) && \
./AndroidBuild.sh x86_64 x86_64-linux-android && $(PARALLEL_UNLOCK)
endif # $(APPLICATION_CUSTOM_BUILD_SCRIPT)
endif

View File

@@ -0,0 +1,47 @@
include ../Settings.mk
APPDIR := $(shell readlink src)
all: $(foreach ARCH, $(APP_ABI), $(APPDIR)/libapplication-$(ARCH).so)
TARGET_GCC_PREFIX_armeabi-v7a := arm-linux-androideabi
TARGET_GCC_PREFIX_x86 := i686-linux-android
TARGET_GCC_PREFIX_arm64-v8a := aarch64-linux-android
TARGET_GCC_PREFIX_x86_64 := x86_64-linux-android
LOCAL_STATIC_LIBRARIES := $(filter $(APP_AVAILABLE_STATIC_LIBS), $(COMPILED_LIBRARIES))
LOCAL_SHARED_LIBRARIES := sdl-$(SDL_VERSION) $(filter-out $(APP_AVAILABLE_STATIC_LIBS), $(COMPILED_LIBRARIES))
LOCAL_SHARED_LIBRARIES := $(patsubst crypto, crypto.so.sdl.1, $(LOCAL_SHARED_LIBRARIES))
LOCAL_SHARED_LIBRARIES := $(patsubst ssl, ssl.so.sdl.1, $(LOCAL_SHARED_LIBRARIES))
LOCAL_SHARED_LIBRARIES := $(patsubst curl, curl-sdl, $(LOCAL_SHARED_LIBRARIES))
LOCAL_SHARED_LIBRARIES := $(patsubst expat, expat-sdl, $(LOCAL_SHARED_LIBRARIES))
define DEPENDS_FOR_ARCH =
../../obj/local/$(1)/$(2):
make -C .. -f Makefile.prebuilt $$(abspath $$@)
SDL_APP_LIB_DEPENDS_$(1) += ../../obj/local/$(1)/$(2)
#$$(warning === ../../obj/local/$(1)/$(2):)
endef
$(foreach ARCH, $(APP_ABI), $(foreach LIB, $(LOCAL_SHARED_LIBRARIES), $(eval $(call DEPENDS_FOR_ARCH,$(ARCH),lib$(LIB).so))))
$(foreach ARCH, $(APP_ABI), $(foreach LIB, $(LOCAL_STATIC_LIBRARIES), $(eval $(call DEPENDS_FOR_ARCH,$(ARCH),lib$(LIB).a))))
define BUILD_FOR_ARCH =
SDL_APP_LIB_DEPENDS_$(1) += $$(APPDIR)/AndroidBuild.sh $$(APPDIR)/AndroidAppSettings.cfg
$$(APPDIR)/libapplication-$(1).so: $$(SDL_APP_LIB_DEPENDS_$(1))
cd $$(APPDIR) && ./AndroidBuild.sh $(1) $$(TARGET_GCC_PREFIX_$(1))
#$$(warning ====== $$(APPDIR)/libapplication-$(1).so: ==> $$(SDL_APP_LIB_DEPENDS_$(1)))
endef
$(foreach ARCH, $(APP_ABI), $(eval $(call BUILD_FOR_ARCH,$(ARCH))))

View File

@@ -7,7 +7,7 @@ AppName="OpenTTD JGR"
AppFullName=org.openttd.jgrpp
# Application version code (integer)
AppVersionCode=039210
AppVersionCode=039211
# Application user-visible version name (string)
AppVersionName="0.39.2"

View File

@@ -18,4 +18,8 @@ LOCAL_SRC_FILES := sdl_main.c SDL_android_main.cpp
LOCAL_SHARED_LIBRARIES := sdl-$(SDL_VERSION) application
LOCAL_LDLIBS := -llog
ifeq ($(CUSTOM_BUILD_SCRIPT_FIRST_PASS),)
include $(BUILD_SHARED_LIBRARY)
endif

View File

@@ -29,12 +29,17 @@ How to compile demo application
Launch commands
./build.sh ballfield
Or in separate steps
rm project/jni/application/src
ln -s ballfield project/jni/application/src
./changeAppSettings.sh -a
./build.sh
Then edit file build.sh if needed to add NDK dir to your PATH, then launch it.
It will compile a bunch of libs under project/libs/armeabi,
It will compile a bunch of libs under project/libs/,
create Android package file project/bin/MainActivity-debug.apk,
and install it to your device or emulator, if you specify option -i or -r to build.sh.
Then you can test it by launching Ballfield icon from Android applications menu.
@@ -63,33 +68,25 @@ and generally it will take a lot of effort to port OpenGL application to GL ES.
Licensing issues when using gradle
==================================
cd into android-sdk-linux/tools/bin
cd into android-sdk-linux/tools/bin and
and
./sdkmanager --licenses
./sdkmanager --licenses
if that does not work you need to update
./sdkmanager --update
./sdkmanager --update
Accept the license with 'y'. It might download additional stuff, yet not sure, why...
Retry with
./sdkmanager --licenses
./sdkmanager --licenses
If the system tells you that the licenses were accepted, but the build system tells otherwise, it might be looking at the wrong path. Symlinking the licenses directory might solve your problem:
ln -s $ANDROID_HOME/licenses project
ln -s $ANDROID_HOME/licenses project
How to compile a specific SDL based application
===============================================
. build/envsetup.sh
build
How to compile your own application
===================================
@@ -302,14 +299,18 @@ There is helper script project/jni/application/setEnvironment.sh which will set
for configure script and makefile, see AndroidBuild.sh in project/jni/application/scummvm dir for reference.
How to compile your own application using GCC 4.7 or newer
Signing your application
==========================================================
By default, your application will be build with GCC 4.6. To use a newer version of GCC, e.g. GCC 4.8, set-up
your project like described but execute following commands before running any of the commandergenius scripts
to configure or build your project:
export GCCVER=4.8
export NDK_TOOLCHAIN_VERSION=${GCCVER}
You can use scripts sign.sh and signBundle.sh to sign your app.
Set environment variables ANDROID_KEYSTORE_FILE and ANDROID_KEYSTORE_ALIAS
to your app signing certificate path and certificate alias,
and if you don't want the script asking you for a password, set variable
ANDROID_KEYSTORE_PASS_FILE to a file containing your certificate password.
If you are using app bundles, set envirnment variables
ANDROID_UPLOAD_KEYSTORE_FILE, ANDROID_UPLOAD_KEYSTORE_ALIAS, and ANDROID_UPLOAD_KEYSTORE_PASS_FILE
to your app bundle signing certificate in a similar way.
Android application sleep/resume support