android/source/AndroidManifest.xml |    3 ++-
 android/source/build.gradle        |    6 ++----
 2 files changed, 4 insertions(+), 5 deletions(-)

New commits:
commit 45fbfbfeae1de12e87d0a3748e22553b69adbc4a
Author:     Michael Weghorn <m.wegh...@posteo.de>
AuthorDate: Fri Mar 27 17:04:37 2020 +0100
Commit:     Michael Weghorn <m.wegh...@posteo.de>
CommitDate: Fri Mar 27 19:54:32 2020 +0100

    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.wegh...@posteo.de>

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"]
         }
     }
 
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to