summaryrefslogtreecommitdiffstats
path: root/android
diff options
context:
space:
mode:
authorMichael Weghorn <m.weghorn@posteo.de>2020-03-27 17:04:37 +0100
committerMichael Weghorn <m.weghorn@posteo.de>2020-03-27 19:54:32 +0100
commit45fbfbfeae1de12e87d0a3748e22553b69adbc4a (patch)
tree9b558c00af31b5af71efe80c56be291779709844 /android
parenttdf#131622 android: Handle password callback for non-editing case, too (diff)
downloadcore-45fbfbfeae1de12e87d0a3748e22553b69adbc4a.tar.gz
core-45fbfbfeae1de12e87d0a3748e22553b69adbc4a.zip
tdf#131622 android: Extract native libs again
Commit 66518ead516e90d606e87c6ce58ec11fea6d172e ("use extractNativeLibs="false" for less disk usage and faster installation", 2017-08-31) had set 'extractNativeLibs="false"' in Android's manifest for the debug build case, which prevented the shared native libraries from being extracted on the device. However, while e.g. liblo-native-code.so can be handled just fine when it is in the APK in uncompressed form, the NSS library tries to load modules at runtime by using an explicit path to the module (like '/data/user/0/org.libreoffice/lib/libnssckbi.so'; due to 'LO_LIB_DIR=file://$APP_DATA_DIR/lib/' set in fundamentalrc (as defined in build.gradle)), but the library was no longer there, so NSS initalization failed (s. 'nsscrypto_initialize'). As a result, Android Viewer was unable to open encrypted/password-protected files. Therefore, extract the libs again for the debug case as well to make that work again. (Release mode still had 'extractNativeLibs="true"' anyway.) Side note 1: According to [1], it should in general also be possible to use 'dlopen()' for dynamic libraries inside zip files (like the APK): > Note that in API level 23 and above dlopen(3) will > open a library from any zip file, not just your APK. > Just give dlopen(3) a path of the form > "my_zip_file.zip!/libs/libstuff.so". As with APKs, > the library must be page-aligned and stored uncompressed > for this to work. In any case, if that approach were to be taken, that would need some closer look to make it work, e.g. how to retrieve the actual location of the APK file, how to treat the different architecturs, whether that works for all supported Android versions,... Side note 2: To debug into the NSS library, temporarily avoiding stripping the debug information as follows helped: --- a/android/Bootstrap/Makefile.shared +++ b/android/Bootstrap/Makefile.shared @@ -68,7 +68,7 @@ $(SODEST)/liblo-native-code.so : $(OBJLOCAL)/liblo-native-code.so $(SODEST)/nss-libraries : mkdir -p $(SODEST) - $(foreach lib,$(NSSLIBS),$(STRIP) -o $(SODEST)/lib$(lib).so $(INSTDIR)/$(LIBO_LIB_FOLDER)/lib$(lib).so;) + $(foreach lib,$(NSSLIBS),cp $(INSTDIR)/$(LIBO_LIB_FOLDER)/lib$(lib).so $(SODEST)/lib$(lib).so;) $(SODEST)/libc++_shared.so : $(ANDROID_NDK_HOME)/sources/cxx-stl/llvm-libc++/libs/$(ANDROID_APP_ABI)/libc++_shared.so cp $< $@ [1] https://github.com/aosp-mirror/platform_bionic/blob/master/android-changes-for-ndk-developers.md#opening-shared-libraries-directly-from-an-apk Change-Id: I7631e4a1e5e3d7b3b589ba09d62b52dc5c55836c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91229 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Diffstat (limited to 'android')
-rw-r--r--android/source/AndroidManifest.xml3
-rw-r--r--android/source/build.gradle6
2 files changed, 4 insertions, 5 deletions
diff --git a/android/source/AndroidManifest.xml b/android/source/AndroidManifest.xml
index fb51eb4b0e43..58da19119828 100644
--- a/android/source/AndroidManifest.xml
+++ b/android/source/AndroidManifest.xml
@@ -11,10 +11,11 @@
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET" />
+ <!-- extractNativeLibs="true" needed e.g. for NSS to load modules at runtime -->
<application
android:name=".LibreOfficeApplication"
android:allowBackup="true"
- android:extractNativeLibs="${extractNativeLibs}"
+ android:extractNativeLibs="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/LibreOfficeTheme"
diff --git a/android/source/build.gradle b/android/source/build.gradle
index 668ff5e006b9..3383df0679d6 100644
--- a/android/source/build.gradle
+++ b/android/source/build.gradle
@@ -66,12 +66,10 @@ android {
// make android studio happy...
jniDebuggable true
// would work just fine with external, but setting emulator up is a little more work
- manifestPlaceholders = [installLocation: "auto", extractNativeLibs: "false"]
+ manifestPlaceholders = [installLocation: "auto"]
}
release {
- // need to extract native libs (allow to compress them in apk), since otherwise would
- // exceed maximum size for playstore
- manifestPlaceholders = [installLocation: "preferExternal", extractNativeLibs: "true"]
+ manifestPlaceholders = [installLocation: "preferExternal"]
}
}