According to [1], libandroid_support is no longer needed
for API level >= 21. Quoting from the issue:
> Dropping KitKat will have greater benefits than the other API levels
> we've dropped support for over the years (and while not the only reason,
> one motivation for the prior support removals was getting us
> closer to being able to drop 19/20):
>
> 1. libandroid_support will no longer be needed.
> i. libandroid_support
> adds to the APK size for all apps. Even if your minSdkVersion is
> 21+, libc++ is built for the lowest API level supported by the NDK,
> so it includes some pieces of libandroid_support.
> [...]
The LO Android build no longer supports API versions < 21
since:
commit c2fc2c8c7c
Author: Michael Weghorn <m.weghorn@posteo.de>
Date: Tue Dec 5 09:57:22 2023 +0100
android: Bump minSdkVersion to 21 (Android 5.0)
The linker flag was otherwise now causing linker errors in an NDK 28
build in a WIP branch including a fix for tdf#162769, using
--with-distro=LibreOfficeAndroidX86`
--with-android-sdk=/home/michi/Android/Sdk
--with-android-ndk=/home/michi/Android/Sdk/ndk/28.0.13004108/
Error:
Linking /home/michi/development/git/libreoffice-WORKTREE-android/android/obj/local/x86/liblo-native-code.so
ld.lld: error: unable to find library -landroid_support
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
The linker flag had already been dropped earlier in
commit a7f6338875
Author: Christian Lohmaier <lohmaier+LibreOffice@googlemail.com>
Date: Wed Aug 7 12:06:25 2019 +0200
android: support NDK 19 and above (20 as of this commit)
but was restored in
commit f68a36b62e
Date: Fri Oct 25 07:42:30 2019 +0200
android: Fix problems with unwinding in the Online-based Android app.
This partially reverts a7f6338875. The
problem is that with that approach, the problems with unwinding as
described in 312eeeee42 were plaguing the
Online-based Android app, leading to mysterious crashes with stack
traces like:
#00 pc 0005f2b6 /apex/com.android.runtime/lib/bionic/libc.so (abort+166) (BuildId: 68c87e04526a60689ecb5deb329804a0)
#01 pc 05caaae7 /data/app/libreoffice.debug-fBEOIUwPHY3_k3eQid159Q==/lib/arm/liblo-native-code.so (BuildId: 1c3d0e6336ddfc3578e1c186944160252a750b8b)
...
#06 pc 07452e43 /data/app/libreoffice.debug-fBEOIUwPHY3_k3eQid159Q==/lib/arm/liblo-native-code.so (BuildId: 1c3d0e6336ddfc3578e1c186944160252a750b8b)
#07 pc 0005a37c /apex/com.android.runtime/lib/bionic/libc.so (__restore_rt) (BuildId: 68c87e04526a60689ecb5deb329804a0)
#08 pc 0005f2b2 /apex/com.android.runtime/lib/bionic/libc.so (abort+162) (BuildId: 68c87e04526a60689ecb5deb329804a0)
#09 pc 07565d3b /data/app/libreoffice.debug-fBEOIUwPHY3_k3eQid159Q==/lib/arm/liblo-native-code.so (BuildId: 1c3d0e6336ddfc3578e1c186944160252a750b8b)
...
#11 pc 07565641 /data/app/libreoffice.debug-fBEOIUwPHY3_k3eQid159Q==/lib/arm/liblo-native-code.so (BuildId: 1c3d0e6336ddfc3578e1c186944160252a750b8b)
#12 pc 0001e394 /apex/com.android.runtime/lib/bionic/libm.so (__gnu_Unwind_RaiseException+108) (BuildId: 0ee3a75927e0da4fa0fe29469ccf8b39)
#13 pc 0001eee8 /apex/com.android.runtime/lib/bionic/libm.so (_Unwind_RaiseException+20) (BuildId: 0ee3a75927e0da4fa0fe29469ccf8b39)
Hopefully whatever was the problem back then is not
retriggered by dropping `-landroid_support` again
these days.
[1] https://github.com/android/ndk/issues/1751
Change-Id: Icd45abee58e13a2fc77d78d12e823a8045272b4f
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/181898
Reviewed-by: Christian Lohmaier <lohmaier+LibreOffice@googlemail.com>
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Tested-by: Jenkins
123 lines
5.0 KiB
Makefile
123 lines
5.0 KiB
Makefile
#
|
|
# Common Makefile pieces for building Java / Android apps.
|
|
#
|
|
|
|
#
|
|
# BOOTSTRAPDIR needs to be set to this directory before starting this
|
|
#
|
|
|
|
# Probably would be best to just stop fooling around with the possibilities to
|
|
# set various stuff with the -env command line parameters (and environment
|
|
# variables?) and in a plethora of rc files, and hardcode construction of
|
|
# *all* required pathnames based on the app installation location for Android
|
|
# (and iOS), etc. We don't really win anything by having so many layers of
|
|
# configurability on platforms like Android and iOS where apps based on LO
|
|
# code are very much self-contained pre-packaged thingies.
|
|
|
|
JNILIBSDIR=$(BUILDDIR)/android/jniLibs
|
|
SODEST=$(JNILIBSDIR)/$(ANDROID_APP_ABI)
|
|
OBJLOCAL=$(BUILDDIR)/android/obj/local/$(ANDROID_APP_ABI)
|
|
|
|
#
|
|
# Helpful rules ...
|
|
#
|
|
|
|
local.properties: $(BUILDDIR)/config_host.mk
|
|
echo sdk.dir=$(ANDROID_SDK_DIR) >local.properties
|
|
|
|
#
|
|
# Build / link the single .so for this app
|
|
#
|
|
|
|
ALL_STATIC_LIBS := $(shell $(SRCDIR)/bin/lo-all-static-libs)
|
|
|
|
LIBS = \
|
|
-Wl,--start-group \
|
|
$(ALL_STATIC_LIBS) \
|
|
-Wl,--end-group
|
|
|
|
NSSLIBS = freebl3 \
|
|
nspr4 \
|
|
nss3 \
|
|
nssckbi \
|
|
nssdbm3 \
|
|
nssutil3 \
|
|
plc4 \
|
|
plds4 \
|
|
smime3 \
|
|
softokn3 \
|
|
sqlite3 \
|
|
ssl3 \
|
|
|
|
WHOLELIBS = \
|
|
-Wl,--whole-archive \
|
|
$(addprefix -l,$(strip \
|
|
$(if $(ENABLE_JAVA),juh) \
|
|
)) \
|
|
-Wl,--no-whole-archive
|
|
|
|
|
|
$(OBJLOCAL)/liblo-native-code.so : native-code.cxx $(ALL_STATIC_LIBS)
|
|
@echo "Linking $@"
|
|
mkdir -p $(OBJLOCAL)
|
|
$(CXX) -Wl,--build-id=sha1 -Wl,--gc-sections -Wl,--version-script=../Bootstrap/version.map -Wl,--no-undefined -DANDROID -DDISABLE_DYNLOADING -shared -Wl,-soname,liblo-native-code.so -o $(OBJLOCAL)/liblo-native-code.so -I$(BUILDDIR)/config_host -I$(SRCDIR)/include native-code.cxx -L$(INSTDIR)/$(LIBO_LIB_FOLDER) $(WHOLELIBS) $(LIBS) -lc++_static -lc++abi $(if $(filter armeabi-v7a,$(ANDROID_APP_ABI)),-lunwind) $(addprefix -l,$(NSSLIBS)) -lGLESv2 -landroid -ljnigraphics -llog -lz
|
|
|
|
$(SODEST)/liblo-native-code.so : $(OBJLOCAL)/liblo-native-code.so
|
|
mkdir -p $(SODEST)
|
|
$(STRIP) -o $(SODEST)/liblo-native-code.so $(OBJLOCAL)/liblo-native-code.so
|
|
#to keep some symbols, eg.: $(STRIP) -o $(SODEST)/liblo-native-code.so $(OBJLOCAL)/liblo-native-code.so -w -K 'Java*'
|
|
|
|
$(SODEST)/nss-libraries :
|
|
mkdir -p $(SODEST)
|
|
$(foreach lib,$(NSSLIBS),$(STRIP) -o $(SODEST)/lib$(lib).so $(INSTDIR)/$(LIBO_LIB_FOLDER)/lib$(lib).so;)
|
|
|
|
$(SODEST)/libc++_shared.so : $(ANDROID_TOOLCHAIN)/sysroot/usr/lib/$(ANDROID_SYSROOT_PLATFORM)/libc++_shared.so
|
|
mkdir -p $(SODEST)
|
|
cp $< $@
|
|
|
|
link-so: $(SODEST)/liblo-native-code.so $(SODEST)/nss-libraries $(SODEST)/libc++_shared.so
|
|
|
|
# If you reinstall an app several times *on the emulator*, even if you
|
|
# uninstall it between, disk space seems to leak that won't get recycled until
|
|
# you stop and start... No idea if this holds for a device, too. (And you
|
|
# can't "stop" a device anyway.)
|
|
|
|
stop-start-cycle:
|
|
$(ANDROID_SDK_DIR)/platform-tools/adb shell stop && $(ANDROID_SDK_DIR)/platform-tools/adb shell start && sleep 10
|
|
|
|
# build-host specific stuff (build paths and the like) to keep build.gradle static
|
|
liboSettings.gradle: $(BUILDDIR)/config_build.mk $(BUILDDIR)/config_host.mk \
|
|
$(wildcard $(INSTDIR)/program/version.ini $(INSTDIR)/program/versionrc) \
|
|
$(SRCDIR)/android/Bootstrap/Makefile.shared
|
|
@echo "creating $@"
|
|
( \
|
|
echo "// created by Makefile.shared - your changes will be overridden" \
|
|
&& echo "ext {" \
|
|
&& echo " liboSrcRoot = '$(SRC_ROOT)'" \
|
|
&& echo " liboJniLibsdir = '$(JNILIBSDIR)'" \
|
|
&& echo " liboWorkdir = '$(WORKDIR)'" \
|
|
&& echo " liboInstdir = '$(INSTDIR)'" \
|
|
&& echo " liboEtcFolder = '$(LIBO_ETC_FOLDER)'" \
|
|
&& echo " liboUreMiscFolder = '$(LIBO_URE_MISC_FOLDER)'" \
|
|
&& echo " liboSharedResFolder = '$(LIBO_SHARE_RESOURCE_FOLDER)'" \
|
|
&& echo " liboUREJavaFolder = '$(LIBO_URE_SHARE_JAVA_FOLDER)'" \
|
|
&& echo " liboShareJavaFolder = '$(LIBO_SHARE_JAVA_FOLDER)'" \
|
|
&& echo " liboVersionMajor = '$(LIBO_VERSION_MAJOR)'" \
|
|
&& echo " liboVersionMinor = '$(LIBO_VERSION_MINOR)'" \
|
|
&& echo " liboGitFullCommit = '$(shell cd $(SRCDIR) && git log -1 --format=%H)'" \
|
|
&& echo "}" \
|
|
&& echo "android {" \
|
|
&& echo " ndkPath '$(ANDROID_NDK_DIR)'" \
|
|
&& echo " ndkVersion '$(ANDROID_NDK_VERSION)'" \
|
|
&& echo "}" \
|
|
&& echo "android.defaultConfig {" \
|
|
&& echo " applicationId '$(ANDROID_PACKAGE_NAME)'" \
|
|
&& echo " minSdkVersion $(ANDROID_API_LEVEL)" \
|
|
&& echo " versionCode project.hasProperty('cmdVersionCode') ? cmdVersionCode.toInteger() : $(if $(versionCode),$(versionCode),1)" \
|
|
&& echo " versionName '$(LIBO_VERSION_MAJOR).$(LIBO_VERSION_MINOR).$(LIBO_VERSION_MICRO).$(LIBO_VERSION_PATCH)$(LIBO_VERSION_SUFFIX)$(LIBO_VERSION_SUFFIX_SUFFIX)'" \
|
|
&& echo " buildConfigField('String', 'BUILD_ID_SHORT', '\"$(shell cd $(SRCDIR) && git log -1 --format=%h)\"')" \
|
|
&& echo " buildConfigField('String', 'VENDOR', '\"$(OOO_VENDOR)\"')" \
|
|
&& echo " buildConfigField('String', 'PRIVACY_POLICY_URL', '\"$(PRIVACY_POLICY_URL)\"')" \
|
|
&& echo "}" \
|
|
) > $@
|