From d1e4d8b11f1a78ba915640604183957006729c07 Mon Sep 17 00:00:00 2001 From: Egor Berdnikov Date: Sun, 29 May 2016 21:02:53 +0200 Subject: [PATCH] Add possibility to use custom native library loader. This allows to implement custom strategy for loading jni libraries. For example using ReLinker. --- .../sqlcipher/database/SQLiteDatabase.java | 33 +++++++++++++++++-- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/src/net/sqlcipher/database/SQLiteDatabase.java b/src/net/sqlcipher/database/SQLiteDatabase.java index 492b33af..4038bc9c 100644 --- a/src/net/sqlcipher/database/SQLiteDatabase.java +++ b/src/net/sqlcipher/database/SQLiteDatabase.java @@ -165,14 +165,41 @@ private static void loadICUData(Context context, File workingDir) { } } + /** + * Implement this interface to provide custom strategy for loading jni libraries. + */ + public interface LibraryLoader { + /** + * Load jni libraries by given names. + * Straightforward implementation will be calling {@link System#loadLibrary(String name)} + * for every provided library name. + * + * @param libNames library names that sqlcipher need to load + */ + void loadLibraries(String... libNames); + } + public static synchronized void loadLibs (Context context) { loadLibs(context, context.getFilesDir()); } public static synchronized void loadLibs (Context context, File workingDir) { - System.loadLibrary("stlport_shared"); - System.loadLibrary("sqlcipher_android"); - System.loadLibrary("database_sqlcipher"); + loadLibs(context, workingDir, new LibraryLoader() { + @Override + public void loadLibraries(String... libNames) { + for (String libName : libNames) { + System.loadLibrary(libName); + } + } + }); + } + + public static synchronized void loadLibs(Context context, LibraryLoader libraryLoader) { + loadLibs(context, context.getFilesDir(), libraryLoader); + } + + public static synchronized void loadLibs (Context context, File workingDir, LibraryLoader libraryLoader) { + libraryLoader.loadLibraries("stlport_shared", "sqlcipher_android", "database_sqlcipher"); boolean systemICUFileExists = new File("/system/usr/icu/icudt46l.dat").exists();