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:
124
build.sh
124
build.sh
@@ -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 " '/" '---'` ; \
|
||||
|
||||
@@ -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^" | \
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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)))))
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
47
project/jni/application/CustomBuildScript.mk
Normal file
47
project/jni/application/CustomBuildScript.mk
Normal 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))))
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
43
readme.txt
43
readme.txt
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user