android: Make the extract_files() part of setup / init.

We need to have the files extracted before we attempt to initialize
LibreOfficeKit (call libreofficekit_hook), otherwise the .rdb's are not there.

Change-Id: Ib49db7e945a709d18a063eb488a27df18fef542b
This commit is contained in:
Jan Holesovsky
2014-06-28 19:21:49 +02:00
parent db89e5ff81
commit c72d300ba0
4 changed files with 11 additions and 38 deletions

View File

@@ -37,9 +37,6 @@ public final class Bootstrap
String cacheDir, String cacheDir,
String apkFile); String apkFile);
// Extracts files in the .apk that need to be extraced into the app's tree
static native void extract_files();
// Wrapper for getpid() // Wrapper for getpid()
public static native int getpid(); public static native int getpid();
@@ -101,9 +98,6 @@ public final class Bootstrap
activity.getApplication().getPackageResourcePath())) activity.getApplication().getPackageResourcePath()))
return; return;
// Extract files from the .apk that can't be used mmapped directly from it
extract_files();
// If we notice that a fonts.conf file was extracted, automatically // If we notice that a fonts.conf file was extracted, automatically
// set the FONTCONFIG_FILE env var. // set the FONTCONFIG_FILE env var.
InputStream i; InputStream i;

View File

@@ -26,7 +26,7 @@ public final class LibreOfficeKit
{ {
} }
private static String TAG = "lo-bootstrap"; private static String TAG = "LibreOfficeKit";
// Native methods in this class are all implemented in // Native methods in this class are all implemented in
// sal/android/lo-bootstrap.c as the lo-bootstrap library is loaded with // sal/android/lo-bootstrap.c as the lo-bootstrap library is loaded with
@@ -37,9 +37,6 @@ public final class LibreOfficeKit
String cacheDir, String cacheDir,
String apkFile); String apkFile);
// Extracts files in the .apk that need to be extraced into the app's tree
static native void extract_files();
/* /*
// Wrapper for getpid() // Wrapper for getpid()
public static native int getpid(); public static native int getpid();
@@ -92,7 +89,7 @@ public final class LibreOfficeKit
ApplicationInfo ai = activity.getApplicationInfo(); ApplicationInfo ai = activity.getApplicationInfo();
dataDir = ai.dataDir; dataDir = ai.dataDir;
Log.i(TAG, String.format("dataDir=%s\n", dataDir)); Log.i(TAG, String.format("Initializing LibreOfficeKit, dataDir=%s\n", dataDir));
redirect_stdio(true); redirect_stdio(true);
@@ -101,9 +98,6 @@ public final class LibreOfficeKit
activity.getApplication().getPackageResourcePath())) activity.getApplication().getPackageResourcePath()))
return; return;
// Extract files from the .apk that can't be used mmapped directly from it
extract_files();
// If we notice that a fonts.conf file was extracted, automatically // If we notice that a fonts.conf file was extracted, automatically
// set the FONTCONFIG_FILE env var. // set the FONTCONFIG_FILE env var.
InputStream i; InputStream i;

View File

@@ -37,7 +37,6 @@ extern int apk_file_size;
extern void Java_org_libreoffice_android_Bootstrap_putenv(JNIEnv* env, jobject clazz, jstring string); extern void Java_org_libreoffice_android_Bootstrap_putenv(JNIEnv* env, jobject clazz, jstring string);
extern void Java_org_libreoffice_android_Bootstrap_redirect_1stdio(JNIEnv* env, jobject clazz, jboolean state); extern void Java_org_libreoffice_android_Bootstrap_redirect_1stdio(JNIEnv* env, jobject clazz, jboolean state);
extern void Java_org_libreoffice_android_Bootstrap_extract_1files(JNIEnv* env, jobject clazz);
extern LibreOfficeKit *libreofficekit_hook(const char* install_path); extern LibreOfficeKit *libreofficekit_hook(const char* install_path);
@@ -63,15 +62,6 @@ Java_org_libreoffice_android_LibreOfficeKit_redirect_1stdio(JNIEnv* env,
Java_org_libreoffice_android_Bootstrap_redirect_1stdio(env, clazz, state); Java_org_libreoffice_android_Bootstrap_redirect_1stdio(env, clazz, state);
} }
/// Call the same method from Bootstrap.
__attribute__ ((visibility("default")))
void
Java_org_libreoffice_android_LibreOfficeKit_extract_1files(JNIEnv* env,
jobject clazz)
{
Java_org_libreoffice_android_Bootstrap_extract_1files(env, clazz);
}
/// Initialize the LibreOfficeKit. /// Initialize the LibreOfficeKit.
__attribute__ ((visibility("default"))) __attribute__ ((visibility("default")))
jboolean jboolean
@@ -136,6 +126,11 @@ Java_org_libreoffice_android_LibreOfficeKit_init__Ljava_lang_String_2Ljava_lang_
return JNI_FALSE; return JNI_FALSE;
} }
// Extract files from the .apk that can't be used mmapped directly from it
extract_files(UNPACK_TREE, UNPACK_TREE, 0);
extract_files(UNPACK_TREE_GZ, UNPACK_TREE_GZ, 1);
// Initialize LibreOfficeKit
pOffice = libreofficekit_hook(data_dir); pOffice = libreofficekit_hook(data_dir);
if (!pOffice) if (!pOffice)
{ {

View File

@@ -311,6 +311,10 @@ Java_org_libreoffice_android_Bootstrap_setup__Ljava_lang_String_2Ljava_lang_Stri
if (!setup_assets_tree()) if (!setup_assets_tree())
return JNI_FALSE; return JNI_FALSE;
// Extract files from the .apk that can't be used mmapped directly from it
extract_files(UNPACK_TREE, UNPACK_TREE, 0);
extract_files(UNPACK_TREE_GZ, UNPACK_TREE_GZ, 1);
return JNI_TRUE; return JNI_TRUE;
} }
@@ -807,20 +811,6 @@ extract_files(const char *root,
lo_apk_closedir(tree); lo_apk_closedir(tree);
} }
// static native void extract_files();
__attribute__ ((visibility("default")))
void
Java_org_libreoffice_android_Bootstrap_extract_1files(JNIEnv* env,
jobject clazz)
{
(void) env;
(void) clazz;
extract_files(UNPACK_TREE, UNPACK_TREE, 0);
extract_files(UNPACK_TREE_GZ, UNPACK_TREE_GZ, 1);
}
/* Android's JNI works only to libraries loaded through Java's /* Android's JNI works only to libraries loaded through Java's
* System.loadLibrary(), it seems. But now with just one big app-specific .so * System.loadLibrary(), it seems. But now with just one big app-specific .so
* on Android, that would not be a problem, but for historical reasons, we * on Android, that would not be a problem, but for historical reasons, we