diff options
4 files changed, 37 insertions, 33 deletions
diff --git a/base/src/main/java/com/anysoftkeyboard/utils/CompatUtils.java b/base/src/main/java/com/anysoftkeyboard/utils/CompatUtils.java index 758a1b291..ce17040d5 100644 --- a/base/src/main/java/com/anysoftkeyboard/utils/CompatUtils.java +++ b/base/src/main/java/com/anysoftkeyboard/utils/CompatUtils.java @@ -17,14 +17,18 @@ package com.anysoftkeyboard.utils; import android.annotation.TargetApi; +import android.content.Context; import android.graphics.drawable.Drawable; import android.os.Build; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.widget.PopupWindow; +import com.getkeepsafe.relinker.ReLinker; + import java.lang.reflect.Method; import java.util.Locale; @@ -91,4 +95,22 @@ public class CompatUtils { public static void unbindDrawable(Drawable d) { if (d != null) d.setCallback(null); } + + public static void loadNativeLibrary(@NonNull Context context, @NonNull String library, @NonNull String libraryVersion) { + if (Build.VERSION.SDK_INT >= 9) { + ReLinker.loadLibrary(context, library, libraryVersion); + } else { + try { + System.loadLibrary(library); + } catch (UnsatisfiedLinkError ule) { + Log.e(TAG, "******** Could not load native library "+library+" ********"); + Log.e(TAG, "******** Could not load native library "+library+" ********", ule); + Log.e(TAG, "******** Could not load native library "+library+" ********"); + } catch (Throwable t) { + Log.e(TAG, "******** Failed to load native dictionary library "+library+" ********"); + Log.e(TAG, "******** Failed to load native dictionary library "+library+" *******", t); + Log.e(TAG, "******** Failed to load native dictionary library "+library+" ********"); + } + } + } } diff --git a/jnidictionaryv1/src/main/java/com/anysoftkeyboard/dictionaries/jni/BinaryDictionary.java b/jnidictionaryv1/src/main/java/com/anysoftkeyboard/dictionaries/jni/BinaryDictionary.java index 3df65dda2..e5e1f2326 100644 --- a/jnidictionaryv1/src/main/java/com/anysoftkeyboard/dictionaries/jni/BinaryDictionary.java +++ b/jnidictionaryv1/src/main/java/com/anysoftkeyboard/dictionaries/jni/BinaryDictionary.java @@ -16,11 +16,14 @@ package com.anysoftkeyboard.dictionaries.jni; +import android.content.Context; import android.content.res.AssetFileDescriptor; +import android.support.annotation.NonNull; import android.util.Log; import com.anysoftkeyboard.base.dictionaries.Dictionary; import com.anysoftkeyboard.base.dictionaries.WordComposer; +import com.anysoftkeyboard.utils.CompatUtils; import java.io.FileDescriptor; import java.util.Arrays; @@ -40,22 +43,9 @@ public class BinaryDictionary extends Dictionary { private char[] mOutputChars = new char[MAX_WORD_LENGTH * MAX_WORDS]; private int[] mFrequencies = new int[MAX_WORDS]; - static { - try { - System.loadLibrary("anysoftkey_jni"); - } catch (UnsatisfiedLinkError ule) { - Log.e(TAG, "******** Could not load native library anysoftkey_jni ********"); - Log.e(TAG, "******** Could not load native library anysoftkey_jni ********", ule); - Log.e(TAG, "******** Could not load native library anysoftkey_jni ********"); - } catch (Throwable t) { - Log.e(TAG, "******** Failed to load native dictionary library anysoftkey_jni ********"); - Log.e(TAG, "******** Failed to load native dictionary library anysoftkey_jni *******", t); - Log.e(TAG, "******** Failed to load native dictionary library anysoftkey_jni ********"); - } - } - - public BinaryDictionary(String dictionaryName, AssetFileDescriptor afd) { + public BinaryDictionary(@NonNull Context context, @NonNull String dictionaryName, @NonNull AssetFileDescriptor afd) { super(dictionaryName); + CompatUtils.loadNativeLibrary(context, "anysoftkey_jni", "1.0"); mAfd = afd; } diff --git a/jnidictionaryv2/src/main/java/com/anysoftkeyboard/dictionaries/jni/ResourceBinaryDictionary.java b/jnidictionaryv2/src/main/java/com/anysoftkeyboard/dictionaries/jni/ResourceBinaryDictionary.java index 6f367b89b..379b38f7a 100644 --- a/jnidictionaryv2/src/main/java/com/anysoftkeyboard/dictionaries/jni/ResourceBinaryDictionary.java +++ b/jnidictionaryv2/src/main/java/com/anysoftkeyboard/dictionaries/jni/ResourceBinaryDictionary.java @@ -19,11 +19,14 @@ package com.anysoftkeyboard.dictionaries.jni; import android.content.Context; import android.content.res.Resources; import android.content.res.TypedArray; +import android.support.annotation.NonNull; +import android.support.annotation.XmlRes; import android.util.Log; import com.anysoftkeyboard.base.dictionaries.Dictionary; import com.anysoftkeyboard.base.dictionaries.WordComposer; import com.anysoftkeyboard.base.utils.GCUtils; +import com.anysoftkeyboard.utils.CompatUtils; import java.io.IOException; import java.io.InputStream; @@ -55,35 +58,24 @@ public class ResourceBinaryDictionary extends Dictionary { private final char[] mOutputChars = new char[MAX_WORD_LENGTH * MAX_WORDS]; private final int[] mFrequencies = new int[MAX_WORDS]; - /** NOTE! + /** + * NOTE! * Keep a reference to the native dict direct buffer in Java to avoid - * unexpected de-allocation of the direct buffer. */ + * unexpected de-allocation of the direct buffer. + */ @SuppressWarnings("FieldCanBeLocal") private ByteBuffer mNativeDictDirectBuffer; private volatile long mNativeDict; - static { - try { - System.loadLibrary("anysoftkey2_jni"); - } catch (UnsatisfiedLinkError ule) { - Log.e(TAG, "******** Could not load native library anysoftkey2_jni ********"); - Log.e(TAG, "******** Could not load native library anysoftkey2_jni ********", ule); - Log.e(TAG, "******** Could not load native library anysoftkey2_jni ********"); - } catch (Throwable t) { - Log.e(TAG, "******** Failed to load native dictionary anysoftkey2_jni ********"); - Log.e(TAG, "******** Failed to load native dictionary anysoftkey2_jni *******", t); - Log.e(TAG, "******** Failed to load native dictionary anysoftkey2_jni ********"); - } - } - /** * Create a dictionary from a raw resource file * * @param context application context for reading resources * @param resId the resource containing the raw binary dictionary */ - public ResourceBinaryDictionary(String dictionaryName, Context context, int resId/* , int dicTypeId */) { + public ResourceBinaryDictionary(@NonNull String dictionaryName, @NonNull Context context, @XmlRes int resId/* , int dicTypeId */) { super(dictionaryName); + CompatUtils.loadNativeLibrary(context, "anysoftkey2_jni", "1.0"); mAppContext = context; mDictResId = resId; } diff --git a/src/main/java/com/anysoftkeyboard/dictionaries/DictionaryAddOnAndBuilder.java b/src/main/java/com/anysoftkeyboard/dictionaries/DictionaryAddOnAndBuilder.java index 48eb50cef..6675b973f 100644 --- a/src/main/java/com/anysoftkeyboard/dictionaries/DictionaryAddOnAndBuilder.java +++ b/src/main/java/com/anysoftkeyboard/dictionaries/DictionaryAddOnAndBuilder.java @@ -71,7 +71,7 @@ public class DictionaryAddOnAndBuilder extends AddOnImpl { public Dictionary createDictionary() throws Exception { if (mDictionaryResId == INVALID_RES_ID) - return new BinaryDictionary(getName(), getPackageContext().getAssets().openFd(mAssetsFilename)); + return new BinaryDictionary(getPackageContext(), getName(), getPackageContext().getAssets().openFd(mAssetsFilename)); else return new ResourceBinaryDictionary(getName(), getPackageContext(), mDictionaryResId); } |
